資料分割
適用於:Databricks SQL
Databricks Runtime
分割區是由數據表中的數據列子集所組成,該數據行的子集與預先定義的數據行子集共用相同的值,稱為 數據分割數據行。 使用分割區可以加速對數據表的查詢,以及數據操作。
若要使用分割區,您可以在建立資料表時透過包含 PARTITIONED BY 子句來定義分割欄。
在數據表中插入或操作數據列時,Azure Databricks 會自動將數據列分派至適當的分割區。
您也可以使用 PARTITION 子句直接指定分割區。
這個語法也適用於不使用 Delta Lake 格式的數據表,可以透過使用 ALTER TABLE 語句來快速分割 DROP
、ADD
或 RENAME
分區。
PARTITIONED BY
PARTITIONED BY
子句指定了一份用於對新資料表進行分區的欄位清單。
語法
PARTITIONED BY ( { partition_column [ column_type ] } [, ...] )
參數
-
標識碼可能會參考數據表中的
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 ] } [ , ... ] )
參數
-
被指定為資料表分割資料行的資料行名稱。 您不能指定相同的欄位兩次。
= 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');