分區

適用于:核取標示為是 Databricks SQL 檢查標示為是 Databricks Runtime

資料分割是由資料表中的資料列子集所組成,這些資料列會針對稱為 資料分割資料行之預先定義的資料行子集共用相同的值。 使用資料分割可以加速資料表的查詢,以及資料操作。

若要使用資料分割,當您藉由包含 PARTITIONED BY 子句來建立資料表時,您可以定義資料分割資料行的集合。

在資料表中插入或運算元據列時,Azure Databricks 會自動將資料列分派到適當的分割區。

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

此語法也適用于不使用 Delta Lake 格式的資料表,使用 ALTER TABLE 語句快速 DROP、ADD 或 RENAME 資料分割。

分割依據

PARTITIONED BY 句指定了新資料表分割的資料行清單。

語法

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

參數

  • partition_column

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

  • column_type

    partition_column除非 參考 column_identifier 資料表 中的 column_specificationcolumn_type 否則 會定義 的 partition_column 資料類型。

    並非所有資料來源都支援 Databricks SQL 支援的所有資料類型

注意

除非您定義 Delta Lake 資料表資料分割資料行來參考資料行規格中的資料行,否則一律會移至資料表結尾。

分區

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

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

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

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

參數

  • partition_column

    名為 的資料行,做為資料表的資料分割資料行。 您不一定指定相同的資料行兩次。

  • = partition_value

    資料類型的常值,符合資料分割資料行的類型。 如果您省略資料分割值,規格將會符合此資料分割資料行的所有值。

  • LIKE pattern

    只有 ALTER SHARE ADD TABLE中才允許此表單。

    將 的 partition_columnpattern 字串表示與 相符。 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');