CREATE TABLE [USING]

適用対象: 「はい」のチェック マーク Databricks SQL 「はい」のチェック マーク Databricks Runtime

必要に応じてデータ ソースを使用して、マネージドまたは外部のテーブルを定義します。

構文

{ { [CREATE OR] REPLACE TABLE | CREATE [EXTERNAL] TABLE [ IF NOT EXISTS ] }
  table_name
  [ table_specification ]
  [ USING data_source ]
  [ table_clauses ]
  [ AS query ] }

table_specification
  ( { column_identifier column_type [ column_properties ] } [, ...]
    [ , table_constraint ] [...] )

column_properties
  { NOT NULL |
    GENERATED ALWAYS AS ( expr ) |
    GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( [ START WITH start ] [ INCREMENT BY step ] ) ] |
    DEFAULT default_expression |
    COMMENT column_comment |
    column_constraint |
    MASK clause } [ ... ]

table_clauses
  { OPTIONS clause |
    PARTITIONED BY clause |
    CLUSTER BY clause |
    clustered_by_clause |
    LOCATION path [ WITH ( CREDENTIAL credential_name ) ] |
    COMMENT table_comment |
    TBLPROPERTIES clause |
    WITH { ROW FILTER clause } } [...]

clustered_by_clause
  { CLUSTERED BY ( cluster_column [, ...] )
    [ SORTED BY ( { sort_column [ ASC | DESC ] } [, ...] ) ]
    INTO num_buckets BUCKETS }

パラメーター

  • REPLACE

    指定した場合は、テーブルとその内容が既に存在する場合に置き換えられます。 この句は、Delta Lake のテーブルでのみサポートされます。

    REPLACE ではテーブル履歴が保持されます。

    注意

    Azure Databricks では、Delta Lake のテーブルを削除して再作成するのではなく、REPLACE を使用することを強くお勧めします。

  • EXTERNAL

    指定すると、外部テーブルが作成されます。 外部テーブルを作成するときは、LOCATION 句も指定する必要があります。 外部テーブルが削除されても、LOCATION のファイルは削除されません。

  • IF NOT EXISTS

    指定した場合、同じ名前のテーブルが既に存在すると、ステートメントは無視されます。

    IF NOT EXISTSREPLACE と共存できません。つまり、CREATE OR REPLACE TABLE IF NOT EXISTS は許可されません。

  • table_name

    作成されるテーブルの名前。 この名前には、テンポラル仕様を含めることはできません。 名前が修飾されていない場合、テーブルは現在のスキーマに作成されます。

    hive_metastore で作成されたテーブルには、英数字の ASCII 文字とアンダースコア (INVALID_SCHEMA_OR_RELATION_NAME) のみを含めることができます。

  • table_specification

    この省略可能な句で、列、その型、プロパティ、説明、および列制約の一覧を定義します。

    テーブル スキーマで列を定義しない場合は、AS query または LOCATION のいずれかを指定する必要があります。

    • column_identifier

      列の一意の名前。

      列マッピング プロパティ ('delta.columnMapping.mode' = 'name') がない Delta Lake テーブルの列識別子には、文字 ‘ ‘ (スペース)、‘,’、‘;’、‘{‘、‘}’、‘(‘、‘)’、 ‘n’、‘t’、‘=’ を含めることはできません。

      AVRO テーブルの列識別子は、‘’ または Unicode 文字 (非 ASCII 文字を含む) で始まり、その後に ‘’、Unicode 文字と数字の組み合わせが続く必要があります。

    • column_type

      列のデータ型を指定します。 Azure Databricks でサポートされているすべてのデータ型が、すべてのデータ ソースでサポートされているわけではありません。

    • NOT NULL

      指定した場合、列は NULL 値を受け入れません。 この句は、Delta Lake のテーブルでのみサポートされます。

    • GENERATED ALWAYS AS ( expr )

      この句を指定すると、この列の値は、指定した expr によって決定されます。

      expr は、以下のものを除く、リテラル、テーブル内の列識別子、および決定論的な組み込みの SQL 関数または演算子で構成される場合があります。

      また expr には、サブクエリを含めることはできません。

    • GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( [ START WITH start ] [ INCREMENT BY step ] ) ]

      適用対象: check marked yes Databricks SQL 「はい」のチェック マーク Databricks Runtime 10.4 LTS 以降

      ID 列を定義します。 テーブルへの書き込み時に ID 列の値を指定しなかった場合は、統計的に増加する (または step が負の場合は減少する) 一意の値が自動的に割り当てられます。 この句は、Delta Lake のテーブルでのみサポートされます。 この句は、BIGINT データ型の列にのみ使用できます。

      自動的に割り当てられた値は、start から始まり、step ずつ増えます。 割り当てられた値は一意ですが、連続している保証はありません。 どちらのパラメーターも省略可能で、既定値は 1 です。 step0 は指定できません。

      自動的に割り当てられた値が ID 列の型の範囲を超える場合、クエリは失敗します。

      ALWAYS を使用する場合は、ID 列に独自の値を指定できません。

      次の操作はサポートされていません。

      • ID 列で PARTITIONED BY を行う
      • ID 列の UPDATE を行う

      Note

      Delta テーブルで ID 列を宣言すると、同時実行トランザクションが無効になります。 ID 列は、ターゲット テーブルへの同時書き込みが不要なユース ケースでのみ使用してください。

    • DEFAULT default_expression

      適用対象: check marked yes Databricks SQL 「はい」のチェックマーク Databricks Runtime 11.3 LTS 以降

      列が指定されていない場合に INSERTUPDATEMERGE ... INSERT で使われる列の DEFAULT 値を定義します。

      既定値が指定されていない場合、Null 許容列には DEFAULT NULL が適用されます。

      default_expression は、リテラル、および組み込みの SQL 関数か演算子で構成することができます。ただし、次のものは除きます。

      また default_expression には、サブクエリを含めることはできません。

      DEFAULTCSVJSONPARQUET、と ORC ソースでサポートされています。

    • COMMENT column_comment

      列について説明する文字列リテラル。

    • column_constraint

      Delta Lake テーブル内の列に主キーまたは外部キー制約を追加します。

      制約は、hive_metastore カタログ内のテーブルではサポートされていません。

      Delta Lake テーブルに CHECK 制約を追加するには、ALTER TABLE を使用します。

    • MASK 句

      適用対象: check marked yes Databricks SQL Databricks Runtime 12.2 LTS 以降 「はい」のチェック マーク Unity Catalog のみ

      重要

      この機能はパブリック プレビュー段階にあります。

      列マスク関数を追加して、機密データを匿名化します。 今後その列からのすべてのクエリでは、列の元の値の代わりに、列に対してその関数の評価結果を受け取ります。 これは、値を編集するかどうかを決定するために呼び出したユーザーの ID やグループ メンバーシップを関数で検査できる、きめ細かいアクセス制御に役立ちます。

    • table_constraint

      情報主キーまたは情報外部キーの制約を Delta Lake テーブルに追加します。

      主な制約は、hive_metastore カタログ内のテーブルに対してはサポートされません。

      Delta Lake テーブルに CHECK 制約を追加するには、ALTER TABLE を使用します。

  • USING data_source

    テーブルに使用するファイル形式。 data_source は次のいずれかにする必要があります。

    • AVRO
    • BINARYFILE
    • CSV
    • DELTA
    • JSON
    • ORC
    • PARQUET
    • TEXT

    テーブルに使用する次の追加のファイル形式が Databricks Runtime でサポートされています。

    • JDBC
    • LIBSVM
    • org.apache.spark.sql.sources.DataSourceRegister のカスタム実装の完全修飾クラス名。

    USING を省略した場合、既定値は DELTA です。

    DELTA 以外の data_source の場合、テーブル カタログが hive_metastore でない限り、LOCATION も指定する必要があります。

    次の説明は Databricks Runtime に関係します

    HIVE は Databricks Runtime で Hive SerDe テーブルを作成するためにサポートされています。 Hive 固有の file_formatrow_format を、OPTIONS 句を使用して指定できます。これは、大文字と小文字を区別しない文字列マップです。 option_keys は次のとおりです。

    • FILEFORMAT
    • INPUTFORMAT
    • OUTPUTFORMAT
    • SERDE
    • FIELDDELIM
    • ESCAPEDELIM
    • MAPKEYDELIM
    • LINEDELIM
  • table_clauses

    必要に応じて、新しいテーブルの場所、パーティション分割、クラスタリング、オプション、コメント、およびユーザー定義のプロパティを指定します。 各サブ句は、1 回だけ指定できます。

    • PARTITIONED BY

      列のサブセットによってテーブルをパーティション分割する省略可能な句。

      Note

      Delta テーブルを定義しない場合、パーティション分割列は、列の仕様で以前に定義されている場合でも、テーブルの末尾に配置されます。 Delta テーブルの場合は PARTITIONED BY ではなく、CLUSTER BY を使用することを検討してください。

    • CLUSTER BY

      適用対象: check marked yes Databricks SQL Databricks Runtime 13.3 以降

      列のサブセットによって Delta テーブルをクラスター化するための省略可能な句。 他のテーブルをクラスター化するには、clustered_by_clause を使用します。

      Delta Lake リキッド クラスタリングを PARTITIONED BY と組み合わせることはできません。

    • clustered_by_clause

      必要に応じて、列のサブセットを使用して、テーブルまたは各パーティションを固定数のハッシュ バケットにクラスター化します。

      クラスタリングは、Delta Lake のテーブルではサポートされていません。

      • CLUSTERED BY

        各パーティション (パーティション分割が指定されていない場合は、テーブル) のクラスター化に使用する列のセットを指定します。

        • cluster_column

          テーブル内の column_identifier を参照する識別子。 複数の列を指定する場合は、重複しないようにする必要があります。 クラスタリングはパーティション レベルで動作するため、パーティション列をクラスター列として指定しないでください。

      • SORTED BY

        必要に応じて、バケット内の行の並べ替え順序を維持します。

        • sort_column

          バケットの並べ替えに使用する列。 この列をパーティション列にすることはできません。 並べ替え列は一意である必要があります。

        • ASC または DESC

          必要に応じて、sort_column の並べ替えを昇順 (ASC) にするか、降順 (DESC) にするかを指定します。 既定値は ASC です。

      • INTO num_buckets BUCKETS

        各パーティション (またはパーティション分割が指定されていない場合はテーブル) が分割される分のバケット数を指定する INTEGER リテラル。

    • LOCATION path [ WITH ( CREDENTIAL credential_name ) ]

      テーブル データが格納されているディレクトリへの省略可能なパス。これは、分散ストレージ上のパスにすることもできます。 path は文字列リテラルである必要があります。 場所を指定しない場合、テーブルは managed table と見なされ、Azure Databricks によって既定のテーブルの場所が作成されます。

      場所を指定すると、テーブルは外部テーブルになります。

      hive_metastore カタログに存在しないテーブルについては、有効なストレージ資格情報が指定されていない限り、テーブルの path外部の場所で保護する必要があります。

      マネージド テーブルの場所と重複する場所に外部テーブルを作成することはできません。

      Delta Lake テーブルのテーブル構成は、データが存在する場合、LOCATION から継承されます。 そのため、TBLPROPERTIEStable_specification、または PARTITIONED BY の句が Delta Lake テーブルに指定されている場合は、それらが Delta Lake 場所データと正確に一致している必要があります。

    • OPTIONS

      1 つ以上のユーザー定義テーブル オプションを設定またはリセットします。

    • COMMENT table_comment

      テーブルについて説明する文字列リテラル。

    • TBLPROPERTIES

      必要に応じて、1 つ以上のユーザー定義プロパティを設定します。

    • WITH ROW FILTER 句

      適用対象: check marked yes Databricks SQL Databricks Runtime 12.2 LTS 以降 Unity Catalog のみ

      行フィルター関数をテーブルに追加します。 今後そのテーブルからのすべてのクエリでは、関数が Boolean TRUE に評価される行のサブセットを受け取ります。 これは、特定の行をフィルタリングするかどうかを決定するために呼び出したユーザーの ID やグループ メンバーシップを関数で検査できる、きめ細かいアクセス制御に役立ちます。

  • AS クエリ

    この省略可能な句により、query からのデータを使用してテーブルが事前設定されます。 query を指定する場合は、table_specification も指定することはしないで ください。 テーブル スキーマはクエリから生成されます。

    Azure Databricks では、作成されたテーブルに入力クエリとまったく同じデータが確実に含まれるように、基になるデータ ソースが入力クエリのデータで上書きされることに注意してください。

-- Creates a Delta table
> CREATE TABLE student (id INT, name STRING, age INT);

-- Use data from another table
> CREATE TABLE student_copy AS SELECT * FROM student;

-- Creates a CSV table from an external directory
> CREATE TABLE student USING CSV LOCATION '/path/to/csv_files';

-- Specify table comment and properties
> CREATE TABLE student (id INT, name STRING, age INT)
    COMMENT 'this is a comment'
    TBLPROPERTIES ('foo'='bar');

-- Specify table comment and properties with different clauses order
> CREATE TABLE student (id INT, name STRING, age INT)
    TBLPROPERTIES ('foo'='bar')
    COMMENT 'this is a comment';

-- Create partitioned table
> CREATE TABLE student (id INT, name STRING, age INT)
    PARTITIONED BY (age);

-- Create a table with a generated column
> CREATE TABLE rectangles(a INT, b INT,
                          area INT GENERATED ALWAYS AS (a * b));