共用方式為


隔板

適用於:核取記號為「是」Databricks SQL 核取記號為「是」Databricks Runtime

備註

在受控 Apache Iceberg 資料表上,Unity 目錄僅支援液體叢集,並將子句中 PARTITION BY 指定的分割區解譯為液體叢集的叢集索引鍵。

Databricks 建議針對所有新的 Delta 資料表和受控 Iceberg 資料表使用液體叢集。 請參閱適用於 Delta Lake 和 Apache Iceberg 的 Azure Databricks 中的 Unity Catalog 管理的資料表,以及使用液體叢集來處理資料表

分區是由數據表中的行子集所組成,這些行共用相同的值,這些值來自於被稱作分區列的預定義列子集。 使用分割區可以加速對數據表的查詢,以及數據操作。

若要使用分割區,您可以在建立資料表時透過包含 PARTITIONED BY 子句來定義分割欄。

在數據表中插入或操作數據列時,Azure Databricks 會自動將數據列分派至適當的分割區。

您也可以使用 PARTITION 子句直接指定分割區。

此語法也可適用於不使用 Delta Lake 格式的資料表,透過使用 DROP 語句來快速對 ADDRENAMEALTER 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');