2
0

Databricksにおけるパーティションの取り扱い

Last updated at Posted at 2022-05-15

Partitions | Databricks on AWS [2022/3/10時点]の翻訳です。

本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。

パーティションとは、事前に定義されるパーティショニングカラムと呼ばれるカラムのサブセットで同じ値を共有するテーブル内の行のサブセットから構成されます。パーティションを用いることで、テーブルに対するクエリーやデータの操作を高速化することができます。

パーティションを用いるには、テーブルを作成する際にPARTITIONED BYを追加することで、パーティショニングカラムのセットを定義します。

テーブルに行を挿入したり、行を操作する際、Databricksランタイムが自動的に行を適切なパーティションにディスパッチします。

PARTITION句を用いて、直接パーティションを指定することもできます。

Delta Lakeフォーマットを用いたいテーブルに対してもこの構文は有効であり、ALTER TABLE文を用いることでクイックにパーティションのDROP、ADD、RENAMEが可能です。

PARTITIONED BY

PARTITIONED BY句を用いて、新規テーブルをどのカラムでパーティショニングするのかをカラムのリストで指定します。

構文

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

パラメーター

  • partition_column
    識別子はテーブルのcolumn_identifierを参照する場合があります。2つ以上のカラムを指定する場合、重複してはいけません。テーブルのcolumn_specificationのすべてのカラムを参照した場合、エラーとなります。

  • column_type
    partition_columnがテーブルのcolumn_specification上のcolumn_identifierを参照しない限り、column_typepartition_columnのデータ型を定義します。

    Databricksランタイムでサポートされているすべてのデータ型が、すべてのデータソースでサポートされているわけではないことに注意してください。

注意

カラム指定にあるカラムを参照するDelta Lakeテーブルのパーティショニングカラムを定義しない場合、常にテーブルの末尾に移動されます。

PARTITION

クエリーあるいは操作されるパーティションを特定するためにPARTITION句を使用します。

カラムの全ての名前とそれぞれを値で紐づけることでパーティションが特定されます。特定の順序で指定する必要はありません。

既存テーブルに新規のパーティションを追加しないのであれば、オペレーションがカラムのサブセットにマッチするすべてのパーティションに適用されることを示すカラムや値を省略することができます。

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

パラメーター

  • partition_column
    テーブルのパーティションカラムとして指定するカラム。同じカラムを二回指定する必要はありません。

  • = partition_value
    パーティションカラムの型とマッチするデータ型のリテラル。パーティションの値を省略すると、指定された内容はこのパーティションカラムのすべての値とマッチします。

  • LIKE pattern
    この形式はALTER SHARE ADD TABLEでのみ利用できます。

    patternに対してpartition_columnの文字列表現をマッチします。patternLIKEで使われるような文字列リテラルでなくてはいけません。

サンプル

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

Databricks 無料トライアル

Databricks 無料トライアル

2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0