AssertionError: assertion failed: No plan for DeleteFromTable In Databricks

AssertionError: assertion failed: No plan for DeleteFromTable In Databricks

这个命令运行良好的原因是什么:

%sql SELECT * FROM Azure.Reservations WHERE timestamp > '2021-04-02'

返回 2 行,而下面:

%sql DELETE FROM Azure.Reservations WHERE timestamp > '2021-04-02'

失败:

Error in SQL statement: AssertionError: assertion failed: No plan for DeleteFromTable (timestamp#394 > 1617321600000000)

?

我是 Databricks 的新手,但我确定我 运行 另一个 table 上的类似命令(没有 WHERE 子句)。 table是基于Parquet文件创建的。

DELETE FROM(以及类似的 UPDATEMERGE)在 Parquet 文件上不受支持 - 现在在 Databricks 上支持 Delta 格式。您可以使用 CONVERT TO DELTA 将您的 parquet 文件转换为 delta,然后此命令将为您工作。

另一种实现方法是读取 parquet 文件,过滤掉您想要保留的行,然后覆盖您的 parquet 文件。

只需从增量中删除

%sql 
delete from delta.`/mnt/path`
where x

可能是您正在尝试从 VIEW 中删除(以防它不是 parquet 文件)

不幸的是,没有简单的方法来区分数据块中的 VIEW 和 TABLE;您可以测试它是否确实是视图的唯一方法是:

SHOW VIEWS FROM Azure like 'reser*' 或者,如果它是 table: SHOW TABLES FROM Azure like 'reser*'

Show tables syntax Show views syntax