分区
分区由表中的行子集组成,这些行对称为分区列的预定义列子集共享相同的值。 使用分区可以加速对表的查询以及数据操作。
要使用分区,你可以在创建表时通过包含 PARTITIONED BY 子句来定义分区列集。
在表中插入或操作行时,Databricks Runtime 会自动将行分派到适当的分区中。
还可以使用 PARTITION 子句直接指定分区。
此语法也可用于未使用 Delta Lake 格式的表,以使用 ALTER TABLE 语句快速删除、添加或重命名分区。
PARTITIONED BY
PARTITIONED BY 子句指定了新表分区依据列的列表。
语法
PARTITIONED BY ( { partition_column [ column_type ] } [, ...] )
parameters
-
标识符可以引用表中的
column_identifier。 如果指定多列,则不能有重复项。 如果引用表的column_specification中的所有列,则会引发错误。 -
除非
partition_column引用表的column_specification中的column_identifier,否则column_type定义partition_column的数据类型。并非所有数据源都支持 Databricks Runtime 支持的所有数据类型。
备注
除非定义 Delta Lake 表分区列,否则引用列规范中的列总是移动到表的末尾。
PARTITION
使用 PARTITION 子句标识要查询或操作的分区。
通过命名分区的所有列并将每个列与值相关联来标识分区。 无需按特定顺序指定它们。
除非向现有表添加新分区,否则可以省略列或值以指示该操作适用于与列子集匹配的所有匹配分区。
PARTITION ( { partition_column [ = partition_value | LIKE pattern ] } [ , ... ] )
parameters
-
指定为表的分区列的列。 不能两次指定同一列。
= partition_value与分区列的类型匹配的数据类型的文本。 如果省略分区值,则规范将匹配此分区列的所有值。
LIKE pattern这种形式只允许在 ALTER SHARE ADD TABLE 中使用。
将
partition_column的字符串表示形式与pattern匹配。pattern必须是在 LIKE 中使用的字符串字面量。
示例
-- 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');