資料分割
適用於:Databricks SQL Databricks Runtime
partition 是由 table 中的數據列子集所組成,這些數據列會針對稱為 數據分割 columns之預先定義的 columns 子集共用相同的值。 使用分割區可以加快查詢 table 和數據操作的速度。
若要使用分割區,您可以在建立 table 時定義 column 分區的 set,方法是透過包含 PARTITIONED BY 子句。
在 table 插入或操作數據列時,Azure Databricks 會自動將數據列分派至適當的分割區。
您也可以直接使用 PARTITION 子句來指定 partition。
此語法也適用於不使用 Delta Lake 格式的 tables,透過 ALTER TABLE 語句快速操作 DROP
、ADD
或 RENAME
分割區。
PARTITIONED BY
PARTITIONED BY
子句指定了新 table 的分割是沿著 columns 的 list 進行的。
語法
PARTITIONED BY ( { partition_column [ column_type ] } [, ...] )
Parameters
-
identifier 可能會參考 table中的
column_identifier
。 如果您指定多個 column,則必須確保沒有重複的項目。 如果您在 table的column_specification
中參考所有的 columns,就會引發錯誤。 -
除非
partition_column
參考 tablecolumn_specification
中的column_identifier
,否則column_type
會定義partition_column
的數據類型。並非所有數據源都支援 Databricks SQL 支援的所有 數據類型 。
備註
除非您定義 Delta Lake table 分割 columns 參考 column 規格中的 columns,否則一律會移至 table結尾。
PARTITION
您可以使用 PARTITION
子句來識別要查詢或操作的 partition。
partition 是透過命名所有的 columns 並將每個與值相關聯來識別的。 您不需要以特定順序指定它們。
除非您將新的 partition 新增至現有的 table,否則您可以省略 columns 或 values,以指出作業會套用至符合 columns子集的所有相符分割區。
PARTITION ( { partition_column [ = partition_value | LIKE pattern ] } [ , ... ] )
Parameters
-
column 名為 table的 partitioncolumn。 您不得指定相同的 column 兩次。
= partition_value
符合 partitioncolumn類型的資料類型字面值。 如果您省略 partition 值,規格將會符合此 partitioncolumn的所有 values。
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');