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

问题描述

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

这是我的 sql 查询 - 工作正常并返回 Col1。

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

我想将结果写入另一个我可以查询的表中。因此我这样做:

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

好的

df

出[28]:数据帧[Col1:bigint]

df.createOrReplaceTempView("df_tmp_view")

好的

%sql
select * from df_tmp_view

sql 语句错误:AnalysisException:找不到表或视图:df_tmp_view;第 1 行 pos 14; '项目 [*] +- 'UnresolvedRelation [df_tmp_view],[],false

display(affected_customers_tmp_view)

NameError: name 'df_tmp_view' 未定义

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

谢谢!

解决方法

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

public class Car {
    
    String color;
    int price;

    public static void main(String[] args) {
        Car obj = new Car();
        obj.color = "Red";
        obj.price = 80;
        System.out.println(obj.color + " "+ obj.price);
        
        
        Car obj1 = new Car();
        obj1.color = "White";
        obj1.price = 70;
        System.out.println(obj1.color+" "+obj1.price);
    }
}

documentation

例如:

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