簡體   English   中英

如何從 spark sql databricks 中的臨時視圖或等效視圖中刪除?

[英]How to delete from a temp view or equivalent in spark sql databricks?

我需要從數據塊的臨時視圖中刪除,但看起來我只能合並 select 並插入。 也許我錯過了一些東西,但我沒有找到任何關於此的文檔。

第 1 步:我在這里創建一個臨時視圖:

table_df = spark.read.format('delta).load("mnt/table_path")
table_df.createOrReplaceTempView("table_name")

第 2 步:然后嘗試刪除:

%sql 
delete from table_name
where id in (1,2,3)

得到:

無效命令:'table_name' 是視圖而不是表。; 第 1 行位置 0;

第 3 步:

table_name_delta = DeltaTable.forPath(spark, "mnt/table_path")
last_actions = table_name_delta.history(1).collect()

它適用於合並、select 和插入。 這里有幾個限制:

  • 我不想創建一個增量表來繼續刪除,因為在其他筆記本/集群中不應訪問該視圖。
  • 我想訪問在步驟 3 中創建的增量表的日志,並查看發生的刪除語句
  • 我有一個約束,只能使用源表和目標表,不能使用中間表

是否可以從視圖或等效項中刪除? 是否有支持刪除的等效臨時視圖?

Apache spark 不支持刪除操作。 您可以通過在數據框上應用過濾器或使用過濾條件創建另一個臨時表來實現它。

  1. 步驟創建示例 DataFrame
data = spark.createDataFrame([("Alberto", 1), 
                              ("Dakota", 2), 
                              ("Kumar", 3),
                              ("Siva", 4),
                              ("Sree", 5),
                              ("Kavin", 6)], 
                                   ["Name", "id"])

data.createOrReplaceTempView("table_name")

在您的 spark SQL 中,您可以使用過濾后的值創建另一個視圖,如下所示:

%sql 
CREATE OR REPLACE TEMPORARY VIEW table_name1 AS SELECT id, name FROM table_name WHERE id not in(1, 2);
select * from table_name1;

Databricks 筆記本示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM