CREATE TABLE
StarRocks で新しいテーブルを作成します。
この操作を行うには、対象データベースに対する CREATE TABLE 権限が必要です。
構文
CREATE [EXTERNAL] [TEMPORARY] 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", ...)]
キーワード
EXTERNAL
EXTERNAL
キーワードは非推奨です。
Hive、Iceberg、Hudi、JDBC データソースからデータをクエリするには、EXTERNAL
キーワードを使用して外部テーブルを作成するのではなく、external catalogs を使用することをお勧めします。
推奨事項
v3.1 以降、StarRocks は Iceberg カタログで Parquet 形式のテーブルを作成し、INSERT INTO を使用してこれらの Parquet 形式の Iceberg テーブルにデータをシンクすることをサポートしています。
v3.2 以降、StarRocks は Hive カタログで Parquet 形式のテーブルを作成し、INSERT INTO を使用してこれらの Parquet 形式の Hive テーブルにデータをシンクすることをサポートしています。v3.3 以降、StarRocks は Hive カタログで ORC および Textfile 形式のテーブルを作成し、INSERT INTO を使用してこれらの ORC および Textfile 形式の Hive テーブルにデータをシンクすることをサポートしています。
非推奨の EXTERNAL
キーワードを使用したい場合は、EXTERNAL
キーワードの詳細を展開してください。
EXTERNAL
キーワードの詳細
外部データソースをクエリするための外部テーブルを作成するには、CREATE EXTERNAL TABLE
を指定し、ENGINE
を次のいずれかの値に設定します。詳細については、External table を参照してください。
-
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.xx.xx:8200,http://192.168.xx0.xx: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"
)
TEMPORARY
一時テーブルを作成します。v3.3.1 から、StarRocks は Default Catalog での一時テーブルの作成をサポートしています。詳細については、Temporary Table を参照してください。
一時テーブルを作成する際には、ENGINE
を olap
に設定する必要があります。
列定義
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
: これは、インポートされたデータが非ヌル値の場合にのみ置き換えられることを意味します。ヌル値の場合、StarRocks は元の値を保持します。
- 集計タイプ BITMAP_UNION の列がインポートされるとき、その元のデータタイプは TINYINT、SMALLINT、INT、および BIGINT でなければなりません。
- テーブル作成時に REPLACE_IF_NOT_NULL 列で NOT NULL が指定されている場合、StarRocks はデータを NULL に変換し、ユーザーにエラーレポートを送信しません。これにより、ユーザーは選択した列をインポートできます。
この集計タイプは、key_desc タイプが AGGREGATE KEY の集計テーブルにのみ適用されます。v3.1.9 以降、REPLACE_IF_NOT_NULL
は BITMAP タイプの列を新たにサポートします。
NULL | NOT NULL: 列が NULL
を許可するかどうか。デフォルトでは、重複キーテーブル、集計テーブル、またはユニークキーテーブルを使用するテーブルのすべての列に対して NULL
が指定されます。主キーテーブルを使用するテーブルでは、デフォルトで値列には 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 index_name (col_name[, col_name, ...]) [USING BITMAP] COMMENT 'xxxxxx'
パラメータの説明と使用上の注意については、ビットマップインデックス を参照してください。
ENGINE
デフォルト値: olap
。このパラメータが指定されていない場合、デフォルトで OLAP テーブル (StarRocks 内部テーブル) が作成されます。
オプションの値: mysql
, elasticsearch
, hive
, jdbc
, iceberg
, および hudi
。
キー
構文:
key_type(k1[,k2 ...])
データは指定されたキー列で順序付けされ、異なるキータイプに対して異なる属性を持ちます:
-
AGGREGATE KEY: キー列の同一内容は、指定された集計タイプに従って値列に集約されます。通常、財務報告書や多次元分析などのビジネスシナリオに適用されます。
-
UNIQUE KEY/PRIMARY KEY: キー列の同一内容は、インポート順序に従って値列に置き換えられます。キー列の追加、削除、変更、クエリに適用できます。
-
DUPLICATE KEY: StarRocks に同時に存在するキー列の同一内容。詳細データや集計属性のないデータを保存するために使用できます。
注記DUPLICATE KEY はデフォルトのタイプです。データはキー列に従って順序付けされます。
AGGREGATE KEY を除く他の key_type を使用してテーブルを作成する場合、値列は集計タイプを指定する必要はありません。
COMMENT
テーブル作成時にテーブルコメントを追加できます(オプション)。COMMENT は key_desc
の後に配置する必要があることに注意してください。そうしないと、テーブルは作成されません。
v3.1 以降、ALTER TABLE <table_name> COMMENT = "new table comment"
を使用してテーブルコメントを変更できます。
パーティション
パーティションは次の方法で管理できます:
パーティションを動的に作成する
動的パーティション化 は、パーティションの有効期限管理 (TTL) を提供します。StarRocks はデータの新鮮さを確保するために、事前に新しいパーティションを自動的に作成し、期限切れのパーティションを削除します。この機能を有効にするには、テーブル作成時に動的パーティション化関連のプロパティを設定します。
パーティションを一つずつ作成する
パーティションの上限のみを指定する
構文:
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>", ... ] )
, ... ]
)
指定されたキー列と指定された値範囲を使用してパーティション化してください。
-
パーティションの命名規則については、システム制限 を参照してください。
-
v3.3.0 より前は、レンジパーティション化の列は TINYINT、SMALLINT、INT、BIGINT、LARGEINT、DATE、および DATETIME のみをサポートしています。v3.3.0 以降、3 つの特定の時間関数をレンジパーティション化の列として使用できます。詳細な使用法については、データ分布 を参照してください。
-
パーティションは左閉右開です。最初のパーティションの左境界は最小値です。
-
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
)
- パーティションは、時間に関連するデータを管理するためによく使用されます。
- データのバックトラッキングが必要な場合、必要に応じてパーティションを追加するために最初のパーティションを空にすることを検討するかもしれません。