Databricks SQL 分区

分区在表中构成行的子集,这些行为称作分区列的预定义列子集共享相同的值。 使用分区可以加速对表的查询以及数据操作。

若要利用分区,请在使用已 分区 by 子句创建表时,先定义分区列集。

在表中插入或操作行时 Databricks SQL 会自动将行调度到相应的分区。

您还可以使用 partition 子句直接指定分区。

此语法还可用于删除非增量 Lake 表,使用 ALTER TABLE 语句快速添加或重命名分区。

PARTITIONED BY

PARTITIONED BY子句指定了用于对新表进行分区的列的列表。

语法

PARTITIONED BY ( { partition_column [ column_type ] } [, ...] )

参数

  • partition_column

    一个标识符,它可以引用 column_identifier 表中的。 如果指定多个列,则不能有重复项。 不能引用表的中的所有列 column_specification

  • column_type

    除非 partition_column 引用 column_identifier 表的中的,否则将 column_specificationcolumn_type 定义的数据类型 partition_column

    并非所有数据源都支持 Databricks SQL 支持的所有数据类型

备注

除非您定义一个增量 Lake 表分区列,否则列规范中的列将始终移到表的末尾。

PARTITION

使用 PARTITION 子句标识要查询或操作的分区。

若要为单个分区命名,必须将 PARTITION by 子句中标识的所有列命名为,并将其与值相关联。 但不需要按特定顺序指定它们。

除非您要将新分区添加到现有表中,否则您可能会省略列或值,以指示该操作应用于与列的子集相匹配的所有匹配分区。

PARTITION ( { partition_column  [ = partition_value ] } [ , ... ] )

参数

  • partition_column

    一个名为的列,该列是表的分区列。 不能两次指定同一列。

  • partition_value

    与分区列的类型相匹配的数据类型的文本。 如果省略分区值,则该规范将与此分区列的所有值匹配。

示例

-- Use the PARTTIONED BY clause in a table definition
> CREATE TABLE student(university STRING,
                       major      STRING,
                       name       STRING)
         PARTITIONED BY(university, major)

> CREATE TABLE professor(name STRING)
         PARTITIONED BY(university STRING,
                        department STRING);

-- Use the PARTITION specification to INSERT into a table
> INSERT INTO student
         PARTITION(university= 'TU Kaiserslautern') (major, name)
         SELECT major, name FROM freshmen;

-- Use the partition specification to add and drop a partition
> CREATE TABLE log(date DATE, id INT, event STRING)
     USING CSV LOCATION 'dbfs:/log'
     PARTITIONED BY (date);

> ALTER TABLE log ADD PARTIITON(date = DATE'2021-09-10');

> ALTER TABLE log DROP PARTITION(date = DATE'2021-09-10');

-- Drop all partitions from the named university, independent of the major.
> ALTER TABLE student DROP PARTITION(university = 'TU Kaiserslautern');