適用於:
Databricks SQL
Databricks Runtime
備註
在受控 Apache Iceberg 資料表上,Unity 目錄僅支援液體叢集,並將子句中 PARTITION BY 指定的分割區解譯為液體叢集的叢集索引鍵。
Databricks 建議所有新的 Delta Lake 資料表與管理式 Iceberg 資料表都採用液態叢集。 請參閱 Unity Catalog 管理的 Delta Lake 與 Apache Iceberg 表格,以及 使用液體叢集來管理表格。
若要將現有的分割 Delta Lake 表格轉換為液體叢集,請使用 ALTER TABLE ... REPLACE PARTITIONED BY WITH CLUSTER BY。 參見 「將分割資料表轉換為液體叢集」。
分區是由數據表中的行子集所組成,這些行共用相同的值,這些值來自於被稱作分區列的預定義列子集。 使用分割區可以加速對數據表的查詢,以及數據操作。
若要使用分割區,您可以在建立資料表時透過包含 PARTITIONED BY 子句來定義分割欄。
在數據表中插入或操作數據列時,Azure Databricks 會自動將數據列分派至適當的分割區。
您也可以使用 PARTITION 子句直接指定分割區。
此語法也可適用於不使用 Delta Lake 格式的資料表,透過使用 DROP 語句來快速對 ADD、RENAME 或 ALTER TABLE 進行分割。
以...分區表示
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 ( { 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');