分区
适用于: Databricks SQL Databricks Runtime
分区由表中的行子集组成,这些行对称为分区列的预定义列子集共享相同的值。 使用分区可以加速对表的查询以及数据操作。
要使用分区,你可以在创建表时通过包含 PARTITIONED BY 子句来定义分区列集。
在表中插入或操作行时,Azure Databricks 会自动将行分派到适当的分区中。
还可以使用 PARTITION 子句直接指定分区。
此语法也适用于不使用 Delta Lake 格式的表,DROP
ADD
或者RENAME
通过使用 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 SQL 支持的所有数据类型。
备注
除非定义 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
PARTITIONED BY (date);
> ALTER TABLE log ADD PARTITION(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');