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
(以及类似的 UPDATE
或 MERGE
)在 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*'
这个命令运行良好的原因是什么:
%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
(以及类似的 UPDATE
或 MERGE
)在 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*'