python 如何使用全局临时视图作为read_sql_query中的连接表- DataBricks

tvz2xvvm  于 2023-03-21  发布在  Python
关注(0)|答案(1)|浏览(102)

我目前正在尝试在Data Bricks上使用pysark.pandas库进行一些查询,使用函数read_sql_query。在同一个spark应用程序中,我创建了一些glogal临时视图。
我想要的是使用这个临时表在read_sql_query中执行左连接。
下面是一个例子:

import pyspark.pandas as ps
con = conection_to_db

df = ps.DataFrame(data = {some_data})
df.to_spark().createGlobalTempView('temp_name')

df_query = ps.read_sql_query(sql = f'''SELECT COLUMN_1, COLUMN_2 FROM DB.TABLE AS A
LEFT JOIN global_temp.temp_name AS B on A.COLUMN = B.COLUMN''', con=con)

但我得到了以下错误:

com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name 'global_temp.temp_name '

我也试过

jdbcDF3 = spark.read \
    .format("jdbc") \
    .option("url", con) \
    .option("query", '''SELECT COLUMN_1, COLUMN_2 FROM DB.TABLE AS A
                     LEFT JOIN global_temp.temp_name AS B on A.COLUMN = B.COLUMN''') \
    .load()

但给了我同样的错误。
我做错了什么?有更好的方法可以用SQL查询将临时视图中的表连接到数据库中的表吗?
我们试图尽可能地接近SQL,因为我们正在将一些SQL从SAS迁移到Data Bricks,因此,有必要创建和连接临时数据,就像我们在SAS中所做的那样。
先谢了!

iih3973s

iih3973s1#

这条线
df.to_spark().createGlobalTempView('temp_name')
在Spark Session中创建一个全局临时视图。这一行

jdbcDF3 = spark.read \
    .format("jdbc") \
    .option("url", con) \
    .option("query", '''SELECT COLUMN_1, COLUMN_2 FROM DB.TABLE AS A
                     LEFT JOIN global_temp.temp_name AS B on A.COLUMN = B.COLUMN''') \
    .load()

向SQL Server发送查询。SQL Server对Spark会话中的全局临时视图一无所知。
要使SQL Server能够引用df中的数据,您需要使用spark.write将其写入SQL Server。

相关问题