分區
適用于: Databricks SQL Databricks Runtime
資料分割是由資料表中的資料列子集所組成,這些資料列會針對稱為 資料分割資料行之預先定義的資料行子集共用相同的值。 使用資料分割可以加速資料表的查詢,以及資料操作。
若要使用資料分割,當您藉由包含 PARTITIONED BY 子句來建立資料表時,您可以定義資料分割資料行的集合。
在資料表中插入或運算元據列時,Azure Databricks 會自動將資料列分派到適當的分割區。
您也可以使用 PARTITION 子句直接指定資料分割。
此語法也適用于不使用 Delta Lake 格式的資料表,使用 ALTER TABLE 語句快速 DROP、ADD 或 RENAME 資料分割。
分割依據
子 PARTITIONED BY
句指定了新資料表分割的資料行清單。
語法
PARTITIONED BY ( { partition_column [ column_type ] } [, ...] )
參數
-
識別碼可能會參考
column_identifier
資料表中的 。 如果您指定多個資料行,則不得重複。 如果您參考資料表column_specification
中的所有資料行,就會引發錯誤。 -
partition_column
除非 參考column_identifier
資料表 中的column_specification
,column_type
否則 會定義 的partition_column
資料類型。並非所有資料來源都支援 Databricks SQL 支援的所有資料類型 。
注意
除非您定義 Delta Lake 資料表資料分割資料行來參考資料行規格中的資料行,否則一律會移至資料表結尾。
分區
您可以使用 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 LOCATION 'dbfs:/log'
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');