メインコンテンツまでスキップ
バージョン: 26.x

CREATE TABLE

説明

現在のデータベースまたは指定されたデータベースに新しいテーブルを作成します。テーブルは複数の列を持つことができ、各列の定義には名前、データ型、およびオプションで以下の属性を含めることができます:

  • キーであるかどうか
  • 集約セマンティクスを持つかどうか
  • 生成列であるかどうか
  • 値が必要かどうか(NOT NULL)
  • 自動増分列であるかどうか
  • 挿入時にデフォルト値があるかどうか
  • 更新時にデフォルト値があるかどうか

さらに、このコマンドは以下のバリエーションもサポートしています:

  • CREATE TABLE … AS SELECT(データが事前に投入されたテーブルを作成する。CTASとしても知られる)
  • CREATE TABLE … LIKE(既存のテーブルの空のコピーを作成する)

構文

CREATE [ TEMPORARY | EXTERNAL ] TABLE [ IF NOT EXISTS ] <table_name>
(<columns_definition> [ <indexes_definition> ])
[ ENGINE = <table_engine_type> ]
[ <key_type> KEY (<key_cols>)
[ CLUSTER BY (<cluster_cols>) ]
]
[ COMMENT '<table_comment>' ]
[ <partitions_definition> ]
[ DISTRIBUTED BY { HASH (<distribute_cols>) | RANDOM }
[ BUCKETS { <bucket_count> | AUTO } ]
]
[ <roll_up_definition> ]
[ PROPERTIES (
-- Table property
<table_property>
-- Additional table properties
[ , ... ])
]

どこで:

columns_definition
: -- Column definition
<col_name> <col_type>
[ KEY ]
[ <col_aggregate_type> ]
[ [ GENERATED ALWAYS ] AS (<col_generate_expression>) ]
[ [NOT] NULL ]
[ AUTO_INCREMENT(<col_auto_increment_start_value>) ]
[ DEFAULT <col_default_value> ]
[ ON UPDATE CURRENT_TIMESTAMP (<col_on_update_precision>) ]
[ COMMENT '<col_comment>' ]
-- Additional column definitions
[ , <col_name> <col_type> [ ... ] ]
indexes_definition
: -- Index definition
INDEX [ IF NOT EXISTS ]
<index_name> (<index_cols>)
[ USING <index_type> ]
[ PROPERTIES (
-- Table property
<index_property>
-- Additional table properties
[ , ... ])
]
[ COMMENT '<index_comment>' ]
-- Additional index definitions
[ , <index_name> (<index_cols>) [ ... ] ]
partitions_definition
: AUTO PARTITION BY RANGE(<auto_partition_function>(<auto_partition_arguments>))
<origin_partitions_definition>
| AUTO PARTITION BY LIST(<partition_cols>)
<origin_partitions_definition>
| PARTITION BY <partition_type> (<partition_cols>)
<origin_partitions_definition>
  • ここで:

    <origin_partitions_definition>
    : (
    -- Partition definition
    <one_partition_definition>
    -- Additional partition definition
    [ , ... ]
    )

    <one_partition_definition>
    : PARTITION [ IF NOT EXISTS ] <partition_name>
    VALUES LESS THAN <partition_value_list>
    | PARTITION [ IF NOT EXISTS ] <partition_name>
    VALUES [ <partition_lower_bound>, <partition_upper_bound>)
    | FROM <partition_lower_bound> TO <partition_upper_bound>
    INTERVAL <n> [ <datetime_unit> ]
    | PARTITION [ IF NOT EXISTS ] <partition_name>
    VALUES IN {
    (<partition_value> [, <partition_value> [ ... ] ])
    | <partition_value>
    }
roll_up_definition
: ROLLUP (
-- Rollup definition
<rollup_name> (<rollup_cols>)
[ DUPLICATE KEY (<duplicate_cols>) ]
-- Additional rollup definition
[ , <rollup_name> (<rollup_cols>) [ ... ] ]
)

Varaint Syntax

CREATE TABLE ... AS SELECT (CTASとも呼ばれる)

テーブルを生成し、queryから返されたデータでそれを入力します:

CREATE
[ EXTERNAL ]
TABLE [ IF NOT EXISTS ] <table_name>
[ ( <column_definitions> ) ]
[ <index_definitions> ]
[ ENGINE = <storage_engine_type> ]
[ <partitioning_key_type> KEY ( <key_columns> )
[ CLUSTER BY ( <clustering_columns> ) ]
]
[ COMMENT '<table_description>' ]
[ <partition_definitions> ]
[ DISTRIBUTED BY { HASH ( <distribution_columns> ) | RANDOM }
[ BUCKETS { <number_of_buckets> | AUTO } ]
]
[ <rollup_definitions> ]
[ PROPERTIES (
"<table_properties>"
[ , ... ]
) ]
[ AS ] <query>;

CREATE TABLE ... LIKE

既存のテーブルと同じカラム定義で新しいテーブルを作成しますが、既存のテーブルからデータはコピーされません。カラムのすべてのプロパティが新しいテーブルに複製されます。rollup名のリストが指定されている場合、元のテーブルから対応するrollupも複製されます:

CREATE TABLE <new_table_name> LIKE <existing_table_name>
[ WITH ROLLUP ( <rollup_list> ) ];

必須パラメータ

テーブルの識別子(つまり名前)を指定します。テーブルが作成されるデータベース内で一意である必要があります。

識別子は文字で始まる必要があり(Unicode名前サポートが有効な場合は任意の言語文字)、識別子文字列全体がバッククォートで囲まれていない限り(例:My Object)、スペースや特殊文字を含むことはできません。

識別子は予約キーワードを使用できません。

詳細については、Identifier Requirements および Reserved Keywords を参照してください。

<col_name>

カラム識別子(つまり名前)を指定します。作成されるテーブル内で一意である必要があります。

識別子は文字(Unicode名前サポートが有効な場合は任意の言語文字)、数字、または記号@で始まる必要があり、識別子文字列全体がバッククォートで囲まれていない限り(例:My Object)、スペースや特殊文字を含むことはできません。

詳細については、Identifier Requirements および Reserved Keywords を参照してください。

<col_type>

カラムのデータタイプを指定します。

テーブルカラムに指定可能なデータタイプの詳細については、Data Types セクションを参照してください。

CTASの必須パラメータ。データを投入するSELECT文を指定します。

<source_table>

CREATE TABLE ... LIKEの必須パラメータ。コピーする元のテーブルを指定します。

オプションパラメータ

データモデル関連パラメータ

<key_type>

テーブルのデータモデル。オプション値はDUPLICATE(詳細モデル)、UNIQUE(プライマリキーモデル)、AGGREGATE(集約モデル)です。データモデルの詳細については、Data Model セクションを参照してください。

<key_cols>

テーブルのキーカラム。Dorisでは、キーカラムはテーブルの最初のK列である必要があります。単一のタブレット内のデータは、これらのカラムによって順序付けされます。キーの制限とキーカラムの選択方法については、Data Model セクションの各サブセクションを参照してください。

<cluster_cols>

データローカルソートカラム。データモデルがUNIQUE(プライマリキーモデル)の場合のみ使用できます。<cluster_cols>が指定されている場合、データは<key_cols>を使用する代わりに<cluster_cols>によってソートされます。

<col_aggregate_type>

カラムの集約方法。テーブルが集約モデルの場合のみ使用できます。集約方法の詳細については、Aggregation Model セクションを参照してください。

バケット関連パラメータ

<distribute_cols> および <bucket_count>

バケットカラムとバケット数。詳細モデルのバケットカラムは任意のカラムにできますが、集約モデルとプライマリキーモデルのバケットカラムはキーカラムと一致している必要があります。バケット数は任意の正の整数です。バケット化の詳細については、Manual Bucketing および Automatic Bucketing セクションを参照してください。

カラムデフォルト値関連パラメータ

[ GENERATED ALWAYS ] AS (<col_generate_expression>)

生成カラム。現在のカラムより前のカラムを使用して、式<col_generate_expression>を通じて現在のカラムのデータを生成します。生成カラムは、ユーザーによって直接挿入または更新されるのではなく、他のカラムの値から計算されるデータベーステーブルカラムの特殊なタイプです。この機能は、式の結果を事前計算してデータベースに格納することをサポートし、頻繁なクエリや複雑な計算が必要なシナリオに適しています。

AUTO_INCREMENT(<col_auto_increment_start_value>)

データをインポートする際、Dorisは値が指定されていない自動増分カラムのデータ行に対して、テーブル内で一意の値を割り当てます。<col_auto_increment_start_value>は自動増分カラムの開始値を指定します。自動増分カラムの詳細については、Auto-Increment Columns セクションを参照してください。

DEFAULT <col_default_value>

カラムのデフォルト値。このカラムを含めずに書き込みを行う場合、このデフォルト値が使用されます。デフォルト値が明示的に設定されていない場合、NULLが使用されます。利用可能なデフォルト値は以下の通りです:

  • NULL:すべてのタイプで利用可能、NULLをデフォルト値として使用。
  • 数値リテラル:数値タイプでのみ使用可能。
  • 文字列リテラル:文字列タイプでのみ使用可能。
  • CURRENT_DATE:日付タイプでのみ使用可能。現在の日付をデフォルト値として使用。
  • CURRENT_TIMESTAMP [ ]:datetime タイプでのみ使用可能。現在のタイムスタンプをデフォルト値として使用。<defaultValuePrecision>で時間精度を指定可能。
  • PI:double タイプでのみ使用可能。円周率をデフォルト値として使用。
  • E:double タイプでのみ使用可能。数学定数eをデフォルト値として使用。
  • BITMAP_EMPTY:カラムがbitmap タイプの場合のみ使用可能。空のビットマップを設定。

ON UPDATE CURRENT_TIMESTAMP (<col_on_update_precision>)

データが更新される際、このカラムに値が指定されない場合、現在のタイムスタンプを使用してこのカラムのデータを更新します。UNIQUE(プライマリキーモデル)のテーブルでのみ使用可能。

インデックス関連パラメータ

<index_name>

インデックス識別子(つまり名前)を指定します。作成されるテーブル内で一意である必要があります。識別子の詳細については、Identifier Requirements および Reserved Keywords を参照してください。

<index_cols>

インデックスを追加するカラムのリスト。テーブル内の既存のカラムである必要があります。

<index_type>

インデックスのタイプ。現在、INVERTEDのみサポートされています。

<index_property>

インデックスのプロパティ。詳細な説明については、Inverted Index セクションを参照してください。

自動パーティション関連パラメータ

パーティショニングの詳細な紹介については、Automatic Partitioning セクションを参照してください。

手動パーティショニング関連パラメータ

パーティショニングの詳細な紹介については、「手動パーティショニング」セクションを参照してください。

<partition_type>

DorisはRANGEパーティショニングとLISTパーティショニングをサポートしています。詳細については、Manual Partitioning セクションを参照してください。

<partition_name>

パーティション識別子(つまり名前)。作成されるテーブル内で一意である必要があります。識別子の詳細については、Identifier Requirements および Reserved Keywords を参照してください。

VALUES LESS THAN <partition_value_list>

RANGEパーティショニング。パーティションデータ範囲は下限から<partition_value_list>まで。

上限を表す場合、<partition_value_list>MAX_VALUEに簡素化できます。

<partition_value_list>のフォーマットは次の通りです:((col_1_value, ...), (col_1_value, ...), ...)

VALUES [ <partition_lower_bound>, <partition_upper_bound>)

RANGEパーティショニング。パーティションデータ範囲は<partition_lower_bound>から<partition_upper_bound>まで。一つのパーティションのみ作成されます。

<partition_lower_bound><partition_upper_bound>のフォーマットは次の通りです:(col_1_value, ...)

FROM <partition_lower_bound> TO <partition_upper_bound>

INTERVAL [ <datetime_unit> ]

RANGEパーティショニング。パーティションデータ範囲は<partition_lower_bound>から<partition_value_list>まで。<n>ごとにパーティションが作成されます。

<partition_lower_bound><partition_upper_bound>のフォーマットは次の通りです:(col_1_value, ...)

VALUES IN {

(<partition_value> [, <partition_value> [ ... ] ])

| <partition_value>

}

LISTパーティショニング。パーティションカラムが<partition_value>と等しい行がこのパーティションに属します。

<partition_value>のフォーマットは次の通りです:(col_1_value, ...)

同期マテリアライズドビュー関連

Note

rollupを使用した同期マテリアライズドビュー作成機能は限定的であり、もはや推奨されません。別のステートメントを使用して同期マテリアライズドビューを作成することをお勧めします。詳細については、CREATE MATERIALIZED VIEW ステートメントと Synchronized Materialized View セクションを参照してください。

<rollup_name>

同期マテリアライズドビューの識別子(つまり名前)。作成されるテーブル内で一意である必要があります。識別子の詳細については、Identifier Requirements および Reserved Keywords を参照してください。

<rollup_cols>

同期マテリアライズドビューに含まれるカラム。

テーブルプロパティ関連パラメータ

<table_property>

プロパティ名機能
replication_numレプリカ数。デフォルトのレプリカ数は3です。BEノード数が3未満の場合、BEノード数以下のレプリカ数を指定する必要があります。バージョン0.15以降、このプロパティは自動的にreplication_allocationプロパティに変換されます。例:"replication_num" = "3"は自動的に"replication_allocation" = "tag.location.default:3"に変換されます。
replication_allocationTagに基づいてレプリカの分散を設定します。このプロパティはreplication_numプロパティの機能を完全に上書きできます。
min_load_replica_numデータインポートが成功するために必要な最小レプリカ数を設定します。デフォルト値は-1です。このプロパティが0以下の場合、データインポートには過半数のレプリカが成功する必要があることを示します。
is_being_syncedこのテーブルがCCRによって複製されており、現在syncerによって同期されているかどうかを識別するために使用されます。デフォルト値はfalseです。trueに設定されると、colocate_withstorage_policyプロパティがクリアされます。dynamic partitionauto bucket機能は無効になります。つまり、show create tableでは有効に見えますが実際には効果がありません。is_being_syncedfalseに設定されると、これらの機能が再開されます。このプロパティはCCR周辺モジュール専用であり、CCR同期プロセス中に手動で設定すべきではありません。
storage_mediumテーブルデータの初期ストレージメディアを宣言します。
storage_cooldown_timeテーブルデータの初期ストレージメディアの有効期限を設定します。この時間後、自動的に第一級ストレージメディアにダウングレードされます。
colocate_withColocation Join機能が必要な場合、このパラメータを使用してColocation Groupを設定します。
bloom_filter_columnsユーザーが指定したBloom Filterインデックスの追加が必要なカラム名のリスト。各カラムのBloom Filterインデックスは独立しており、複合インデックスではありません。例:"bloom_filter_columns" = "k1, k2, k3"
compressionDorisテーブルのデフォルト圧縮方法はLZ4です。バージョン1.1以降、より高い圧縮率のためにZSTDを圧縮方法として指定することがサポートされています。
function_column.sequence_colUnique Keyモデルを使用する場合、Sequenceカラムを指定できます。Keyカラムが同じ場合、Sequenceカラムに従ってREPLACEが実行されます(大きい値が小さい値を置き換える;そうでなければ置き換えできません)。function_column.sequence_colはsequenceカラムをテーブルの特定のカラムにマップするために使用され、整数または日付/時刻タイプ(DATE、DATETIME)にできます。このカラムのタイプは作成後に変更できません。function_column.sequence_colが設定されている場合、function_column.sequence_typeは無視されます。
function_column.sequence_typeUnique Keyモデルを使用する場合、Sequenceカラムを指定できます。Keyカラムが同じ場合、Sequenceカラムに従ってREPLACEが実行されます(大きい値が小さい値を置き換える;そうでなければ置き換えできません)。ここでは、sequenceカラムのタイプのみを指定する必要があり、日付/時刻タイプまたは整数をサポートします。Dorisは隠しsequenceカラムを作成します。
enable_unique_key_merge_on_writeUniqueテーブルがMerge-on-Write実装を使用するかどうか。このプロパティはバージョン2.1より前ではデフォルトで無効、バージョン2.1からはデフォルトで有効です。
light_schema_changeLight Schema Change最適化を使用するかどうか。trueに設定された場合、値カラムの追加および削除操作をより高速かつ同期的に完了できます。この機能はバージョン2.0.0以降でデフォルトで有効です。
disable_auto_compactionこのテーブルの自動コンパクションを無効にするかどうか。このプロパティがtrueに設定された場合、バックグラウンドの自動コンパクションプロセスはこのテーブルのすべてのタブレットをスキップします。
enable_single_replica_compactionこのテーブルの単一レプリカコンパクションを有効にするかどうか。このプロパティがtrueに設定された場合、テーブルのタブレットのすべてのレプリカのうち一つのレプリカのみが実際のコンパクションアクションを実行し、他のレプリカはそのレプリカからコンパクションされたrowsetをプルします。
enable_duplicate_without_keys_by_defaulttrueに設定された場合、テーブル作成時にUnique、Aggregate、またはDuplicateが指定されていない場合、デフォルトでソートカラムとプレフィックスインデックスがないDuplicateモデルテーブルが作成されます。
skip_write_index_on_loadこのテーブルのデータインポート中にインデックスを書き込まないことを有効にするかどうか。このプロパティがtrueに設定された場合、データインポート中にインデックスが書き込まれません(現在は転置インデックスのみ有効)が、コンパクション時まで遅延されます。これにより、初回書き込みとコンパクション中にインデックスを繰り返し書き込むCPUとIOリソース消費を回避し、高スループットインポートのパフォーマンスを向上させることができます。
compaction_policyこのテーブルのコンパクションマージポリシーを構成します。time_seriesまたはsize_basedtime_seriesのみサポート:rowsetのディスク容量が一定のサイズに蓄積されると、バージョンマージが実行されます。マージされたrowsetは直接base compactionフェーズに昇格されます。これにより、継続的インポートシナリオでのcompactの書き込み増幅を効果的に削減します。このポリシーはtime_series_compactionプレフィックスのパラメータを使用してコンパクションの実行を調整します。
time_series_compaction_goal_size_mbytesコンパクションマージポリシーがtime_seriesの場合、このパラメータは各コンパクションの入力ファイルサイズを調整するために使用され、出力ファイルサイズは入力と同等です。
time_series_compaction_file_count_thresholdコンパクションマージポリシーがtime_seriesの場合、このパラメータは各コンパクションの最小入力ファイル数を調整するために使用されます。タブレット内のファイル数がこの設定を超えると、コンパクションがトリガーされます。
time_series_compaction_time_threshold_secondsコンパクションマージポリシーがtime_seriesの場合、このパラメータはコンパクション間の最長間隔を調整するために使用されます。つまり、長時間実行されていない場合にコンパクションがトリガーされ、単位は秒です。
time_series_compaction_level_thresholdコンパクションマージポリシーがtime_seriesの場合、このパラメータはデフォルトで1です。2に設定された場合、一度マージされたセグメントが再度マージされることを制御し、セグメントサイズがtime_series_compaction_goal_size_mbytesに達することを保証し、セグメント数を減らす効果を達成するために使用されます。
group_commit_interval_msこのテーブルのGroup Commitバッチ間隔を構成します。単位はmsで、デフォルト値は10000ms、つまり10sです。Group Commitのタイミングはgroup_commit_interval_msgroup_commit_data_bytesのうちどちらが先に設定値に達するかによります。
group_commit_data_bytesこのテーブルのGroup Commitバッチデータサイズを構成します。単位はbytesで、デフォルト値は134217728、つまり128MBです。Group Commitのタイミングはgroup_commit_interval_msgroup_commit_data_bytesのうちどちらが先に設定値に達するかによります。
enable_mow_light_deleteMowのUniqueテーブルでDelete文によるDelete述語の書き込みを有効にするかどうか。有効にすると、Delete文のパフォーマンスが向上しますが、Delete後の部分カラム更新で一部のデータエラーが発生する可能性があります。無効にすると、Delete文のパフォーマンスは低下しますが正確性が保証されます。このプロパティのデフォルト値はfalseです。このプロパティはUnique Merge-on-Writeテーブルでのみ有効にできます。
動的パーティショニング関連プロパティ動的パーティショニングについては、Data Partitioning - Dynamic Partitioning を参照
enable_unique_key_skip_bitmap_columnUnique Merge-on-WriteテーブルでFlexible Column Update機能を有効にするかどうか。このプロパティはUnique Merge-on-Writeテーブルでのみ有効にできます。

アクセス制御要件

このSQLコマンドを実行するユーザーは、少なくとも以下の権限を持つ必要があります:

権限オブジェクト説明
CREATE_PRIVDatabase
SELECT_PRIVTable、ViewCTASを実行する際に、クエリするテーブル、ビュー、またはマテリアライズドビューにSELECT_PRIVが必要

使用上の注意

  • データベース(Database)には同じ名前のテーブル(Table)やビュー(View)を含むことはできません。

  • テーブル名、カラム名、rollup名はReserved Keywordsを使用できません。

  • CREATE TABLE ... LIKE:

    • このコマンドは内部のDorisテーブルでのみ使用できます。
    • 明示的に指定されたrollupのみがコピーされます。
    • すべての同期マテリアライズドビューは複製されません。
  • CREATE TABLE ... AS SELECT (CTAS):

    • SELECTリスト内のカラム名の別名が有効なカラムである場合、CTAS文ではカラム定義は不要です;省略された場合、カラム名とデータタイプはベースクエリから推測されます:

      CREATE TABLE <table_name> AS SELECT ...
  • または、以下の構文を使用して明示的に名前を指定することもできます:

    CREATE TABLE <table_name> ( <col1_name>, <col2_name>, ... ) AS SELECT ...
  • パーティショニングとバケッティング

    • テーブルはバケッティング列を指定する必要がありますが、パーティションの指定をオプトアウトできます。パーティショニングとバケッティングの詳細については、Data Partitioningドキュメントを参照してください。
    • Dorisのテーブルは、パーティション化されたテーブルまたはパーティション化されていないテーブルのいずれかになります。この属性はテーブル作成時に決定され、後で変更することはできません。つまり、パーティション化されたテーブルでは、その後の使用でパーティションを追加または削除できますが、パーティション化されていないテーブルには後でパーティションを追加できません。
    • パーティション列とバケット列は、テーブル作成後に変更できません。パーティション列とバケット列の型を変更することも、これらの列を追加または削除することもできません。
  • 動的パーティショニング

    • 動的パーティショニング機能は、主にユーザーがパーティションを自動的に管理するのに役立ちます。特定のルールを設定することで、Dorisシステムが定期的に新しいパーティションを追加したり、古いパーティションを削除したりします。詳細については、Dynamic Partitioningドキュメントを参照してください。
  • 自動パーティショニング

  • 同期マテリアライズドビュー

    • ユーザーはテーブル作成時に複数の同期マテリアライズドビュー(ROLLUP)を作成できます。同期マテリアライズドビューは、テーブル作成後にも追加できます。テーブル作成文に含めることで、すべての同期マテリアライズドビューを一度に作成することが容易になります。
    • テーブル作成時に同期マテリアライズドビューが作成される場合、その後のすべてのデータインポート操作でマテリアライズドビューのデータが同期的に生成されます。マテリアライズドビューの数は、データインポートの効率に影響を与える可能性があります。
    • マテリアライズドビューの紹介については、Synchronized Materialized Viewsのドキュメントを参照してください。
  • インデックス

    • ユーザーはテーブル作成時に複数の列インデックスを作成できます。インデックスは、テーブル作成後にも追加できます。
    • その後の使用でインデックスが追加され、テーブルに既存のデータがある場合、すべてのデータを書き直す必要があります。したがって、インデックスを作成する時間は現在のデータ量に依存します。

Examples

Basic Examples

Detail Model

CREATE TABLE t1
(
c1 INT,
c2 STRING
)
DUPLICATE KEY(c1)
DISTRIBUTED BY HASH(c1)
PROPERTIES (
'replication_num' = '1'
);

集約モデル

CREATE TABLE t2
(
c1 INT,
c2 INT MAX
)
AGGREGATE KEY(c1)
DISTRIBUTED BY HASH(c1)
PROPERTIES (
'replication_num' = '1'
);

Primary Key Model

CREATE TABLE t3
(
c1 INT,
c2 INT
)
UNIQUE KEY(c1)
DISTRIBUTED BY HASH(c1)
PROPERTIES (
'replication_num' = '1'
);

生成列の使用

CREATE TABLE t4
(
c1 INT,
c2 INT GENERATED ALWAYS AS (c1 + 1)
)
DUPLICATE KEY(c1)
DISTRIBUTED BY HASH(c1)
PROPERTIES (
'replication_num' = '1'
);

列のデフォルト値の指定

CREATE TABLE t5
(
c1 INT,
c2 INT DEFAULT 10
)
DUPLICATE KEY(c1)
DISTRIBUTED BY HASH(c1)
PROPERTIES (
'replication_num' = '1'
);

バケッティング手法

CREATE TABLE t6
(
c1 INT,
c2 INT
)
DUPLICATE KEY(c1)
DISTRIBUTED BY RANDOM
PROPERTIES (
'replication_num' = '1'
);

自動パーティショニング

CREATE TABLE t7
(
c1 INT,
c2 DATETIME NOT NULL
)
DUPLICATE KEY(c1)
AUTO PARTITION BY RANGE(date_trunc(c2, 'day')) ()
DISTRIBUTED BY RANDOM
PROPERTIES (
'replication_num' = '1'
);

Range Partitioning

CREATE TABLE t8
(
c1 INT,
c2 DATETIME NOT NULL
)
DUPLICATE KEY(c1)
PARTITION BY RANGE(c2) (
FROM ('2020-01-01') TO ('2020-01-10') INTERVAL 1 DAY
)
DISTRIBUTED BY RANDOM
PROPERTIES (
'replication_num' = '1'
);

List Partitioning

CREATE TABLE t9
(
c1 INT,
c2 DATE NOT NULL
)
DUPLICATE KEY(c1)
PARTITION BY LIST(c2) (
PARTITION p1 VALUES IN (('2020-01-01'),('2020-01-02'))
)
DISTRIBUTED BY RANDOM
PROPERTIES (
'replication_num' = '1'
);

ストレージメディアとクールダウン時間

CREATE TABLE example_db.table_hash
(
k1 BIGINT,
k2 LARGEINT,
v1 VARCHAR(2048),
v2 SMALLINT DEFAULT "10"
)
UNIQUE KEY(k1, k2)
DISTRIBUTED BY HASH (k1, k2) BUCKETS 32
PROPERTIES(
"storage_medium" = "SSD",
"storage_cooldown_time" = "2015-06-04 00:00:00"
);

storage_policyプロパティを使用したテーブルのコールド・ホット階層データ移行戦略の設定

  1. テーブルが移行戦略と正常に関連付けられるように、まずs3リソースとstorage policyを作成する必要があります。

    -- Non-partitioned table
    CREATE TABLE IF NOT EXISTS create_table_use_created_policy
    (
    k1 BIGINT,
    k2 LARGEINT,
    v1 VARCHAR(2048)
    )
    UNIQUE KEY(k1)
    DISTRIBUTED BY HASH (k1) BUCKETS 3
    PROPERTIES(
    "storage_policy" = "test_create_table_use_policy",
    "replication_num" = "1"
    );

    -- Partitioned table
    CREATE TABLE create_table_partion_use_created_policy
    (
    k1 DATE,
    k2 INT,
    V1 VARCHAR(2048) REPLACE
    ) PARTITION BY RANGE (k1) (
    PARTITION p1 VALUES LESS THAN ("2022-01-01") ("storage_policy" = "test_create_table_partition_use_policy_1" ,"replication_num"="1"),
    PARTITION p2 VALUES LESS THAN ("2022-02-01") ("storage_policy" = "test_create_table_partition_use_policy_2" ,"replication_num"="1")
    ) DISTRIBUTED BY HASH(k2) BUCKETS 1;

コロケーショングループ

CREATE TABLE t1 (
id int(11) COMMENT "",
value varchar(8) COMMENT ""
)
DUPLICATE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 10
PROPERTIES (
"colocate_with" = "group1"
);

CREATE TABLE t2 (
id int(11) COMMENT "",
value1 varchar(8) COMMENT "",
value2 varchar(8) COMMENT ""
)
DUPLICATE KEY(`id`)
DISTRIBUTED BY HASH(`id`) BUCKETS 10
PROPERTIES (
"colocate_with" = "group1"
);

索引

CREATE TABLE example_db.table_hash
(
k1 TINYINT,
k2 DECIMAL(10, 2) DEFAULT "10.5",
v1 CHAR(10) REPLACE,
v2 INT SUM,
INDEX k1_idx (k1) USING INVERTED COMMENT 'my first index'
)
AGGREGATE KEY(k1, k2)
DISTRIBUTED BY HASH(k1) BUCKETS 32
PROPERTIES (
"bloom_filter_columns" = "k2"
);

テーブルのレプリケーションプロパティの設定

CREATE TABLE example_db.table_hash
(
k1 TINYINT,
k2 DECIMAL(10, 2) DEFAULT "10.5"
)
DISTRIBUTED BY HASH(k1) BUCKETS 32
PROPERTIES (
"replication_allocation"="tag.location.group_a:1, tag.location.group_b:2"
);

動的パーティショニング

このテーブルは3日前にパーティションを作成し、3日前からパーティションを削除します。例えば、今日が2020-01-08の場合、p20200108p20200109p20200110p20200111という名前のパーティションが作成されます。パーティション範囲は以下の通りです:

[types: [DATE]; keys: [2020-01-08]; ‥types: [DATE]; keys: [2020-01-09]; )
[types: [DATE]; keys: [2020-01-09]; ‥types: [DATE]; keys: [2020-01-10]; )
[types: [DATE]; keys: [2020-01-10]; ‥types: [DATE]; keys: [2020-01-11]; )
[types: [DATE]; keys: [2020-01-11]; ‥types: [DATE]; keys: [2020-01-12]; )
CREATE TABLE example_db.dynamic_partition
(
k1 DATE,
k2 INT,
k3 SMALLINT,
v1 VARCHAR(2048),
v2 DATETIME DEFAULT "2014-02-04 15:36:00"
)
DUPLICATE KEY(k1, k2, k3)
PARTITION BY RANGE (k1) ()
DISTRIBUTED BY HASH(k2) BUCKETS 32
PROPERTIES(
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.start" = "-3",
"dynamic_partition.end" = "3",
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "32"
);

動的パーティションのレプリケーションプロパティの設定

CREATE TABLE example_db.dynamic_partition
(
k1 DATE,
k2 INT,
k3 SMALLINT,
v1 VARCHAR(2048),
v2 DATETIME DEFAULT "2014-02-04 15:36:00"
)
PARTITION BY RANGE (k1) ()
DISTRIBUTED BY HASH(k2) BUCKETS 32
PROPERTIES(
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.start" = "-3",
"dynamic_partition.end" = "3",
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "32",
"dynamic_partition.replication_allocation" = "tag.location.group_a:3"
);

CTAS の例

CREATE TABLE t10
PROPERTIES (
'replication_num' = '1'
)
AS SELECT * FROM t1;

CREATE TABLE ... LIKE の例

CREATE TABLE t11 LIKE t10;