共用方式為


資料分割

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

partition 是由 table 中的數據列子集所組成,這些數據列會針對稱為 數據分割 columns之預先定義的 columns 子集共用相同的值。 使用分割區可以加快查詢 table 和數據操作的速度。

若要使用分割區,您可以在建立 table 時定義 column 分區的 set,方法是透過包含 PARTITIONED BY 子句。

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

您也可以直接使用 PARTITION 子句來指定 partition。

此語法也適用於不使用 Delta Lake 格式的 tables,透過 ALTER TABLE 語句快速操作 DROPADDRENAME 分割區。

PARTITIONED BY

PARTITIONED BY 子句指定了新 table 的分割是沿著 columns 的 list 進行的。

語法

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

Parameters

  • partition_column

    identifier 可能會參考 table中的 column_identifier。 如果您指定多個 column,則必須確保沒有重複的項目。 如果您在 table的 column_specification 中參考所有的 columns,就會引發錯誤。

  • column_type

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

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

備註

除非您定義 Delta Lake table 分割 columns 參考 column 規格中的 columns,否則一律會移至 table結尾。

PARTITION

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

partition 是透過命名所有的 columns 並將每個與值相關聯來識別的。 您不需要以特定順序指定它們。

除非您將新的 partition 新增至現有的 table,否則您可以省略 columns 或 values,以指出作業會套用至符合 columns子集的所有相符分割區。

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

Parameters

  • partition_column

    column 名為 table的 partitioncolumn。 您不得指定相同的 column 兩次。

  • = partition_value

    符合 partitioncolumn類型的資料類型字面值。 如果您省略 partition 值,規格將會符合此 partitioncolumn的所有 values。

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