Partitions | Databricks on AWS [2022/3/10時点]の翻訳です。
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
パーティションとは、事前に定義されるパーティショニングカラムと呼ばれるカラムのサブセットで同じ値を共有するテーブル内の行のサブセットから構成されます。パーティションを用いることで、テーブルに対するクエリーやデータの操作を高速化することができます。
パーティションを用いるには、テーブルを作成する際にPARTITIONED BYを追加することで、パーティショニングカラムのセットを定義します。
テーブルに行を挿入したり、行を操作する際、Databricksランタイムが自動的に行を適切なパーティションにディスパッチします。
PARTITION句を用いて、直接パーティションを指定することもできます。
Delta Lakeフォーマットを用いたいテーブルに対してもこの構文は有効であり、ALTER TABLE文を用いることでクイックにパーティションのDROP、ADD、RENAMEが可能です。
PARTITIONED BY
PARTITIONED BY
句を用いて、新規テーブルをどのカラムでパーティショニングするのかをカラムのリストで指定します。
構文
PARTITIONED BY ( { partition_column [ column_type ] } [, ...] )
パラメーター
-
partition_column
識別子はテーブルのcolumn_identifier
を参照する場合があります。2つ以上のカラムを指定する場合、重複してはいけません。テーブルのcolumn_specification
のすべてのカラムを参照した場合、エラーとなります。 -
column_type
partition_column
がテーブルのcolumn_specification
上のcolumn_identifier
を参照しない限り、column_type
がpartition_column
のデータ型を定義します。Databricksランタイムでサポートされているすべてのデータ型が、すべてのデータソースでサポートされているわけではないことに注意してください。
注意
カラム指定にあるカラムを参照するDelta Lakeテーブルのパーティショニングカラムを定義しない場合、常にテーブルの末尾に移動されます。
PARTITION
クエリーあるいは操作されるパーティションを特定するためにPARTITION
句を使用します。
カラムの全ての名前とそれぞれを値で紐づけることでパーティションが特定されます。特定の順序で指定する必要はありません。
既存テーブルに新規のパーティションを追加しないのであれば、オペレーションがカラムのサブセットにマッチするすべてのパーティションに適用されることを示すカラムや値を省略することができます。
PARTITION ( { partition_column [ = partition_value | LIKE pattern ] } [ , ... ] )
パラメーター
-
partition_column
テーブルのパーティションカラムとして指定するカラム。同じカラムを二回指定する必要はありません。 -
= partition_value
パーティションカラムの型とマッチするデータ型のリテラル。パーティションの値を省略すると、指定された内容はこのパーティションカラムのすべての値とマッチします。 -
LIKE pattern
この形式はALTER SHARE ADD TABLEでのみ利用できます。pattern
に対してpartition_column
の文字列表現をマッチします。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 PARTIITON(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');