DELETE FROM(Azure Databricks 上的 Delta Lake)

删除与谓词匹配的行。 如果未提供谓词,则删除所有行。

语法

DELETE FROM table_identifier [AS alias] [WHERE predicate]
  • table_identifier

    • [database_name.] table_name:表名,可选择使用数据库名称进行限定。
    • delta.`<path-to-table>`:现有 Delta 表的位置。
  • AS 别名

    定义表别名。

  • WHERE

    按谓词筛选行。

    WHERE 谓词支持子查询,包括 INNOT INEXISTSNOT EXISTS 和标量子查询。 不支持以下类型的子查询:

    • 嵌套子查询,即一个子查询内的另一个子查询
    • OR 中的 NOT IN 子查询,例如 a = 3 OR b NOT IN (SELECT c from t)

    在大多数情况下,可以使用 NOT EXISTS 重写 NOT IN 子查询。 建议尽可能使用 NOT EXISTS,因为执行带有 NOT IN 子查询的 DELETE 可能会速度较慢。

示例

DELETE FROM events WHERE date < '2017-01-01'

子查询示例

DELETE FROM all_events
  WHERE session_time < (SELECT min(session_time) FROM good_events)

DELETE FROM orders AS t1
  WHERE EXISTS (SELECT oid FROM returned_orders WHERE t1.oid = oid)

DELETE FROM events
  WHERE category NOT IN (SELECT category FROM events2 WHERE date > '2001-01-01')