将 SQL 查询的结果写入 Databricks 中的临时视图

Writing results of SQL query to Temp View in Databricks

我想根据 SQL 查询的结果创建一个临时视图 - 这听起来像是一件基本的事情,但我无法让它工作并且不明白这是什么错了。

这是我的 SQL 查询 - 工作正常 returns Col1.

%sql
SELECT
  Col1
  FROM
  Table1
    WHERE EXISTS (
      select * 
        from TempView1)

我想把结果写在另一个我可以查询的table中。因此我这样做:

df = spark.sql("""
SELECT
  Col1
  FROM
  Table1
    WHERE EXISTS (
      select * 
        from TempView1)""")

好的

df

输出[28]: DataFrame[Col1: bigint]

df.createOrReplaceTempView("df_tmp_view")

好的

%sql
select * from df_tmp_view

SQL 语句中的错误:AnalysisException:Table 或未找到视图:df_tmp_view;第 1 行位置 14; '项目 [*] +- 'UnresolvedRelation [df_tmp_view], [], false

display(affected_customers_tmp_view)

NameError: 名称 'df_tmp_view' 未定义

我做错了什么? 我不明白该名称未定义的错误,尽管我只在上面的一个命令中定义了它。此外,SQL 查询正在运行并返回数据...所以我错过了什么?

谢谢!

您需要获取视图的全局上下文,例如您的情况:

global_temp_db = spark.conf.get("spark.sql.globalTempDatabase")
display(table(global_temp_db + "." + 'df_tmp_view'))

documentation

例如:

df_pd = pd.DataFrame(
  {
    'Name' : [231232,12312321,3213231],
  }
)

df = spark.createDataFrame(df_pd)

df.createOrReplaceGlobalTempView('test_tmp_view')

global_temp_db = spark.conf.get("spark.sql.globalTempDatabase")
display(table(global_temp_db + "." + 'test_tmp_view'))