CREATE TABLE
StarRocks で新しいテーブルを作成します。
NOTE
この操作には、対象データベースに対する CREATE TABLE 権限が必要です。
Syntax
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [database.]table_name
(column_definition1[, column_definition2, ...]
[, index_definition1[, index_definition12,]])
[ENGINE = [olap|mysql|elasticsearch|hive|hudi|iceberg|jdbc]]
[key_desc]
[COMMENT "table comment"]
[partition_desc]
[distribution_desc]
[rollup_index]
[ORDER BY (column_name1,...)]
[PROPERTIES ("key"="value", ...)]
[BROKER PROPERTIES ("key"="value", ...)]
Parameters
column_definition
Syntax:
col_name col_type [agg_type] [NULL | NOT NULL] [DEFAULT "default_value"] [AUTO_INCREMENT] [AS generation_expr]
col_name: カラム名。
通常、__op または __row で始まるカラムを作成することはできません。これらの名前形式は StarRocks で特別な目的のために予約されており、そのようなカラムを作成すると未定義の動作を引き起こす可能性があります。もしそのようなカラムを作成する必要がある場合は、FE 動的パラメータ allow_system_reserved_names を TRUE に設定してください。
col_type: カラムタイプ。特定のカラム情報、タイプや範囲など:
-
TINYINT (1 バイト): -2^7 + 1 から 2^7 - 1 までの範囲。
-
SMALLINT (2 バイト): -2^15 + 1 から 2^15 - 1 までの範囲。
-
INT (4 バイト): -2^31 + 1 から 2^31 - 1 までの範囲。
-
BIGINT (8 バイト): -2^63 + 1 から 2^63 - 1 までの範囲。
-
LARGEINT (16 バイト): -2^127 + 1 から 2^127 - 1 までの範囲。
-
FLOAT (4 バイト): 科学的記数法をサポート。
-
DOUBLE (8 バイト): 科学的記数法をサポート。
-
DECIMAL[(precision, scale)] (16 バイト)
-
デフォルト値: DECIMAL(10, 0)
-
precision: 1 ~ 38
-
scale: 0 ~ precision
-
整数部: precision - scale
科学的 記数法はサポートされていません。
-
-
DATE (3 バイト): 0000-01-01 から 9999-12-31 までの範囲。
-
DATETIME (8 バイト): 0000-01-01 00:00:00 から 9999-12-31 23:59:59 までの範囲。
-
CHAR[(length)]: 固定長文字列。範囲: 1 ~ 255。デフォルト値: 1。
-
VARCHAR[(length)]: 可変長文字列。デフォルト値は 1。単位: バイト。StarRocks 2.1 より前のバージョンでは、
lengthの値の範囲は 1–65533 です。[プレビュー] StarRocks 2.1 以降のバージョンでは、lengthの値の範囲は 1–1048576 です。 -
HLL (1~16385 バイト): HLL タイプの場合、長さやデフォルト値を指定する必要はありません。長さはデータ集約に応じてシステム内で制御されます。HLL カラムは hll_union_agg、Hll_cardinality、および hll_hash のみでクエリまたは使用できます。
-
BITMAP: ビットマップタイプは、指定された長さやデフォルト値を必要としません。これは符号なしの bigint 数のセットを表します。最大の要素は 2^64 - 1 まで可能です。
agg_type: 集約タイプ。指定されていない場合、このカラムはキーカラムです。 指定されている場合、それは値カラムです。サポートされている集約タイプは以下の通りです:
- SUM, MAX, MIN, REPLACE
- HLL_UNION (HLL タイプのみ)
- BITMAP_UNION (BITMAP のみ)
- REPLACE_IF_NOT_NULL: インポートされたデータが非 NULL 値の場合にのみ置き換えられることを意味します。NULL 値の場合、StarRocks は元の値を保持します。
NOTE
- 集約タイプ BITMAP_UNION のカラムがインポートされるとき、その元のデータタイプは TINYINT、SMALLINT、INT、および BIGINT でなければなりません。
- テーブル作成時に REPLACE_IF_NOT_NULL カラムで NOT NULL が指定されている場合、StarRocks はデータを NULL に変換してもユーザーにエラーレポートを送信しません。これにより、ユーザーは選択したカラムをインポートできます。
この集約タイプは、キータイプが AGGREGATE KEY の集計テーブルにのみ適用されます。v3.1.9 以降、REPLACE_IF_NOT_NULL は BITMAP タイプのカラムを新たにサポートします。
NULL | NOT NULL: カラムが NULL を許可するかどうか。デフォルトでは、Duplicate Key、Aggregate、または Unique Key テーブルを使用するすべてのカラムに NULL が指定されます。Primary Key テーブルを使用するテーブルでは、デフォルトで値カラムには NULL が指定され、キーカラムには NOT NULL が指定されます。生データに NULL 値が含まれている場合、\N で表現してください。StarRocks はデータロード中に \N を NULL として扱います。
DEFAULT "default_value": カラムのデフォルト値。StarRocks にデータをロードする際、カラムにマッピングされたソースフィールドが空の場合、StarRocks は自動的にカラムにデフォルト値を埋めます。デフォルト値は次のいずれかの方法で指定できます:
- DEFAULT current_timestamp: 現在の時刻をデフォルト値として使用します。詳細は current_timestamp() を参照してください。
- DEFAULT
<default_value>: カラムデータタイプの指定された値をデフォルト値として使用します。例えば、カラムのデータタイプが VARCHAR の場合、DEFAULT "beijing"のように、beijing という VARCHAR 文字列をデフォルト値として指定できます。デフォルト値は次のタイプのいずれも指定できません: ARRAY、BITMAP、JSON、HLL、および BOOLEAN。 - DEFAULT (<expr>): 指定された関数の結果をデフォルト値として使用します。サポートされているのは uuid() および uuid_numeric() 式のみです。
AUTO_INCREMENT: AUTO_INCREMENT カラムを指定します。AUTO_INCREMENT カラムのデータタイプは BIGINT でなければなりません。自動インクリメント ID は 1 から始まり、1 ずつ増加します。AUTO_INCREMENT カラムの詳細については、AUTO_INCREMENT を参照してください。v3.0 以降、StarRocks は AUTO_INCREMENT カラムをサポートします。
AS generation_expr: 生成列とその式を指定します。生成列 は、同じ複雑な式を持つクエリを大幅に高速化するために、式の結果を事前に計算して保存するために使用できます。v3.1 以降、StarRocks は生成列をサポートします。
index_definition
テーブルを作成する際にビットマップインデックスのみを作成できます。パラメータの説明と使用上の注意については、ビットマップインデックス を参照してください。
INDEX index_name (col_name[, col_name, ...]) [USING BITMAP] COMMENT 'xxxxxx'
ENGINE type
デフォルト値: olap。このパラメータが指定されていない場合、デフォルトで OLAP テーブル (StarRocks 内部テーブル) が作成されます。
オプション値: mysql、elasticsearch、hive、jdbc (2.3 以降)、iceberg、および hudi (2.2 以降)。外部データソースをクエリするための外部テーブルを作成する場合は、CREATE EXTERNAL TABLE を指定し、ENGINE をこれらのいずれかの値に設定してください。詳細は External table を参照してください。
Hive、Iceberg、Hudi、および JDBC データソースからデータをクエリするには、catalogs を使用することをお勧めします。外部テーブルは非推奨です。
v3.1 以降、StarRocks は Iceberg catalogs で Parquet 形式のテーブルを作成することをサポートし、INSERT INTO を使用してこれらの Parquet 形式の Iceberg テーブルにデータを挿入できます。
-
MySQL の場合、次のプロパティを指定します:
PROPERTIES (
"host" = "mysql_server_host",
"port" = "mysql_server_port",
"user" = "your_user_name",
"password" = "your_password",
"database" = "database_name",
"table" = "table_name"
)注意:
MySQL の "table_name" は実際のテーブル名を示す必要があります。対照的に、CREATE TABLE 文の "table_name" は StarRocks 上のこの MySQL テーブルの名前を示します。これらは異なる場合も同じ場合もあります。
StarRocks で MySQL テーブルを作成する目的は、MySQL データベースにアクセスすることです。StarRocks 自体は MySQL データを維持または保存しません。
-
Elasticsearch の場合、次のプロパティを指定します:
PROPERTIES (
"hosts" = "http://192.168.0.1:8200,http://192.168.0.2:8200",
"user" = "root",
"password" = "root",
"index" = "tindex",
"type" = "doc"
)hosts: Elasticsearch クラスタに接続するために使用される URL。1 つ以上の URL を指定できます。user: 基本認証が有効な Elasticsearch クラスタにログインするために使用される root ユーザーのアカウント。password: 上記の root アカウントのパスワード。index: Elasticsearch クラスタ内の StarRocks テーブルのインデックス。インデックス名は StarRocks テーブル名と同じです。このパラメータを StarRocks テーブルのエイリアスに設定できます。type: インデックスタイプ。デフォルト値はdocです。
-
Hive の場合、次のプロパティを指定します:
PROPERTIES (
"database" = "hive_db_name",
"table" = "hive_table_name",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083"
)ここで、database は Hive テーブル内の対応するデータベースの名前です。table は Hive テーブルの名前です。
hive.metastore.urisはサーバーアドレスです。 -
JDBC の場合、次のプロパティを指定します:
PROPERTIES (
"resource"="jdbc0",
"table"="dest_tbl"
)resourceは JDBC リソース名で、tableは宛先テーブルです。 -
Iceberg の場合、次のプロパティを指定します:
PROPERTIES (
"resource" = "iceberg0",
"database" = "iceberg",
"table" = "iceberg_table"
)resourceは Iceberg リソース名です。databaseは Iceberg データベースです。tableは Iceberg テーブルです。 -
Hudi の場合、次のプロパティを指定します:
PROPERTIES (
"resource" = "hudi0",
"database" = "hudi",
"table" = "hudi_table"
)
key_desc
Syntax:
key_type(k1[,k2 ...])
データは指定されたキー列で順序付けされ、異なるキータイプに対して異なる属性を持ちます:
- AGGREGATE KEY: キー列の同一内容は、指定された集約タイプに従って値列に集約されます。通常、財務報告書や多次元分析などのビジネスシナリオに適用されます。
- UNIQUE KEY/PRIMARY KEY: キー列の同一内容は、インポート順に従って値列に置き換えられます。キー列の追加、削除、変更、クエリに適用できます。
- DUPLICATE KEY: キー列の同一内容は、StarRocks に同時に存在します。詳細データや集約属性のないデータを保存するために使用できます。DUPLICATE KEY はデフォルトタイプです。データはキー列に従って順序付けされます。
NOTE
値列は、AGGREGATE KEY を除く他の key_type を使用してテーブルを作成する場合、集約タイプを指定する必要はありません。
COMMENT
テーブル作成時にテーブルコメントを追加できます(オプション)。COMMENT は key_desc の後に配置する必要があります。それ以外の場合、テーブルは作成されません。
v3.1 以降、ALTER TABLE <table_name> COMMENT = "new table comment" を使用してテーブルコメントを変更できます。
partition_desc
パーティションの説明は次の方法で使用できます:
パーティションを動的に作成する
動的パーティション化 は、パーティションのタイムトゥリブ (TTL) 管理を提供します。StarRocks はデータの新鮮さを確保するために、新しいパーティションを事前に自動的に作成し、期限切れのパーティションを削除します。この機能を有効にするには、テーブル作成時に動的パーティション化関連のプロパティを設定します。
パーティションを一つずつ作成する
パーティションの上限のみを指定する
Syntax:
PARTITION BY RANGE ( <partitioning_column1> [, <partitioning_column2>, ... ] )
PARTITION <partition1_name> VALUES LESS THAN ("<upper_bound_for_partitioning_column1>" [ , "<upper_bound_for_partitioning_column2>", ... ] )
[ ,
PARTITION <partition2_name> VALUES LESS THAN ("<upper_bound_for_partitioning_column1>" [ , "<upper_bound_for_partitioning_column2>", ... ] )
, ... ]
)
注意:
指定されたキー列と指定された値範囲を使用してパーティション化してください。
-
パーティション名は [A-z0-9_] のみをサポートします
-
範囲パーティションの列は、次のタイプのみをサポートします: TINYINT、SMALLINT、INT、BIGINT、LARGEINT、DATE、および DATETIME。
-
パーティションは左閉右開です。最初のパーティションの左境界は最小値です。
-
NULL 値は最小値を含むパーティションにのみ保存されます。最小値を含むパーティションが削除されると、NULL 値はインポートできなくなります。
-
パーティション列は単一列または複数列のいずれかです。パーティション値はデフォルトの最小値です。
-
パーティション列として 1 つの列のみが指定されている場合、最新のパーテ ィションのパーティション列の上限として
MAXVALUEを設定できます。PARTITION BY RANGE (pay_dt) (
PARTITION p1 VALUES LESS THAN ("20210102"),
PARTITION p2 VALUES LESS THAN ("20210103"),
PARTITION p3 VALUES LESS THAN MAXVALUE
)
注意してください:
- パーティションは通常、時間に関連するデータを管理するために使用されます。
- データのバックトラッキングが必要な場合、後でパーティションを追加するために最初のパーティションを空にすることを検討するかもしれません。
パーティションの下限と上限の両方を指定する
Syntax:
PARTITION BY RANGE ( <partitioning_column1> [, <partitioning_column2>, ... ] )
(
PARTITION <partition_name1> VALUES [( "<lower_bound_for_partitioning_column1>" [ , "<lower_bound_for_partitioning_column2>", ... ] ), ( "<upper_bound_for_partitioning_column1?" [ , "<upper_bound_for_partitioning_column2>", ... ] ) )
[,
PARTITION <partition_name2> VALUES [( "<lower_bound_for_partitioning_column1>" [ , "<lower_bound_for_partitioning_column2>", ... ] ), ( "<upper_bound_for_partitioning_column1>" [ , "<upper_bound_for_partitioning_column2>", ... ] ) )
, ...]
)
注意:
-
固定範囲は LESS THAN よりも柔軟です。左と右のパーティションをカスタマイズできます。
-
固定範囲は他の点では LESS THAN と同じです。
-
パーティション列として 1 つの列のみが指定されている場合、最新のパーティションのパーティション列の上限として
MAXVALUEを設定できます。PARTITION BY RANGE (pay_dt) (
PARTITION p202101 VALUES [("20210101"), ("20210201")),
PARTITION p202102 VALUES [("20210201"), ("20210301")),
PARTITION p202103 VALUES [("20210301"), (MAXVALUE))
)