如何在spark sql databricks中从临时视图或等效视图中删除?

bd1hkmkf  于 2023-03-19  发布在  Apache
关注(0)|答案(1)|浏览(245)

我需要从数据库的临时视图中删除,但它看起来像我只能做合并,选择和插入。也许我错过了一些东西,但我没有找到任何有关这方面的文档。
步骤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;
第三步:

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

它可以很好地用于合并、选择和插入。这里有几个约束:

  • 我不想创建增量表来继续删除,因为在其他笔记本/群集中不应访问该视图。
  • 我想访问在STEP 3中创建的增量表的日志,并查看删除语句的执行情况
  • 我有一个约束,即只使用源表和目标表,而不使用中间表

是否可以从视图或类似视图中删除?是否有支持删除的临时视图的类似视图?

kpbwa7wx

kpbwa7wx1#

Apache spark不支持删除操作。你可以通过在数据框上应用过滤器或者创建另一个带有过滤条件的临时表来实现。
1.步骤创建示例数据框

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;

Sample Databricks notebook

相关问题