共用方式為


資料分割

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

分割區是由數據表中的數據列子集所組成,該數據行的子集與預先定義的數據行子集共用相同的值,稱為 數據分割數據行。 使用分割區可以加速對數據表的查詢,以及數據操作。

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

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

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

這個語法也適用於不使用 Delta Lake 格式的數據表,可以透過使用 ALTER TABLE 語句來快速分割 DROPADDRENAME 分區。

PARTITIONED BY

PARTITIONED BY 子句指定了一份用於對新資料表進行分區的欄位清單。

語法

PARTITIONED BY ( { partition_column [ column_type ] } [, ...] )

參數

  • partition_column

    標識碼可能會參考數據表中的 column_identifier。 如果您指定多個欄位,則不得有重複。 如果您參考資料表 column_specification 中的所有資料行,就會發生錯誤。

  • column_type

    除非 partition_column 參考數據表 column_specification中的 column_identifier,否則 column_type 會定義 partition_column的數據類型。

    並非所有數據源都支援 Databricks SQL 支援的所有 數據類型

備註

除非您定義 Delta Lake 資料表的分區欄位並讓它們參考欄位規格中的欄位,否則這些欄位將一律移至資料表的結尾。

PARTITION

您可以使用 PARTITION 子句來識別要查詢或操作的分區。

數據分割的識別方式是命名其所有數據行,並將每個數據行與值產生關聯。 您不需要以特定順序指定它們。

除非您將新的分割區新增至現有的數據表,否則您可以省略數據行或值,以指出作業會套用至符合數據行子集的所有相符數據分割。

PARTITION ( { partition_column  [ = partition_value | LIKE pattern ] } [ , ... ] )

參數

  • partition_column

    被指定為資料表分割資料行的資料行名稱。 您不能指定相同的欄位兩次。

  • = 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');