次の方法で共有


CREATE TABLE [使用中]

適用対象:チェックマーク付き: はい 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 |
    COLLATE collation_name |
    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 |
    DEFAULT COLLATION default_collation_name |
    WITH { ROW FILTER clause } } [...]

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

Databricks Runtime 16.1 より前の START WITH は、INCREMENT BYの前に置く必要があります。

パラメーター

  • 取り替える

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

    REPLACE では、 テーブル履歴 と付与された特権が保持されます。

    メモ

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

  • 外部

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

  • 存在しない場合

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

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

  • table_name

    作成されるテーブルの名前。 名前には 、テンポラル仕様またはオプション指定を含めてはなりません。 名前が修飾されていない場合、テーブルは現在のスキーマに作成されます。

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

  • テーブル仕様

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

    テーブル スキーマで列を定義しない場合は、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 のテーブルでのみサポートされます。

    • COLLATE collation_name

      適用対象:チェック マークあり Databricks SQL チェック マークあり Databricks Runtime 16.1 以上

      STRING column_type の場合は、必要に応じて、この列の比較および並べ替え操作に適用する照合順序に名前を付けます。 既定の照合順序は、テーブル default_collation_nameです。

    • GENERATED ALWAYS AS ( expr )

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

      テーブルの DEFAULT COLLATIONUTF8_BINARYする必要があります。

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

      また、exprにはサブクエリを含めてはなりません。

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

      適用対象:はいにチェック 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 を行う

      メモ

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

    • デフォルト デフォルト式

      適用対象:チェックで「はい」とマークされています Databricks SQL チェックで「はい」とマークされています Databricks Runtime 11.3 LTS以上

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

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

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

      また、default_expressionにはサブクエリを含めてはなりません。

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

    • コメント column_comment

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

    • column_constraint

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

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

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

    • MASK 句

      適用対象:はい Databricks SQL はいとチェックマークが付けられている Databricks Runtime 12.2 LTS以上はいとチェックマークが付けられている Unity Catalogのみ

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

    • テーブル制約

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

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

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

  • data_sourceの使用

    data_source には、ファイル形式またはフェデレーション JDBC データ ソースのいずれかを指定できます。

    ファイル形式は、次のいずれかである必要があります。

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

    DELTA以外のファイル形式の場合は、テーブル カタログがLOCATIONされていない限り、hive_metastoreも指定する必要があります。

    次のフェデレーション JDBC ソースがサポートされています。

    • POSTGRESQL
    • SQLSERVER
    • MYSQL
    • BIGQUERY
    • NETSUITE
    • ORACLE
    • REDSHIFT
    • SNOWFLAKE
    • SQLDW
    • SYNAPSE
    • SALESFORCE
    • SALESFORCE_DATA_CLOUD
    • TERADATA
    • WORKDAY_RAAS
    • MONGODB

    フェデレーション JDBC ソースを指定する場合は、必要な接続情報を含む OPTIONS 句も指定する必要があります。 フェデレーション データ ソースのクエリの詳細については、 JDBC を使用したデータベース のクエリを参照してください。

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

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

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

    以下の適用対象: Databricks Runtime

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

    • FILEFORMAT
    • INPUTFORMAT
    • OUTPUTFORMAT
    • SERDE
    • FIELDDELIM
    • ESCAPEDELIM
    • MAPKEYDELIM
    • LINEDELIM
  • テーブル条項

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

    • でパーティション分け

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

      メモ

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

    • CLUSTER BY

      適用対象: はい 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 を参照する識別子。 複数の列を指定する場合は、重複しないようにする必要があります。 クラスタリングはパーティション レベルで動作するため、パーティション列をクラスター列として指定しないでください。

      • ソート順

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

        • sort_column

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

        • ASC または DESC

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

      • INTO num_buckets BUCKETS

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

    • LOCATION パス [ WITH ( CREDENTIAL credential_name ) ]

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

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

      hive_metastore カタログに存在しないテーブルの場合、有効なpathが指定されていない限り、テーブル 外部の場所で保護する必要があります。

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

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

    • オプション

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

    • コメント table_comment

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

    • TBLPROPERTIES

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

    • デフォルトの照合順序 default_collation_name

      適用対象:チェック マークあり Databricks SQL チェック マークあり Databricks Runtime 16.3 以降

      使用する既定の照合順序を定義します。

      • STRING テーブルの列と項目
      • DEFAULT
      • CREATE TABLE AS query の本文

      CHECK 制約と生成される列式には、 UTF8_BINARYの既定の照合順序が必要です。

      指定しない場合、既定の照合順序は UTF8_BINARY

    • WITH ROW FILTER 句

      適用対象:はい Databricks SQL はいとチェックマークが付けられている Databricks Runtime 12.2 LTS以上はいとチェックマークが付けられている Unity Catalogのみ

      行フィルター関数をテーブルに追加します。 そのテーブルからの後続のすべてのクエリは、関数がブール値 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));

-- Create a table with a string column with a case-insensitive collation.
> CREATE TABLE names(name STRING COLLATE UNICODE_CI);

-- Create a table with a default collation and override for a specific column.
> CREATE TABLE names(name STRING, first_name STRING, id STRING COLLATE UTF8_BINARY) DEFAULT COLLATION UNICODE_CI;

-- Create an external table connected to Oracle
> CREATE TABLE IF NOT EXISTS ora_tab
  USING ORACLE
  OPTIONS (
    url '<jdbc-url>',
    dbtable '<table-name>',
    user '<username>',
    password '<password>'
);

> SELECT * FROM ora_tab;