CREATE TABLE AS SELECT
説明
CREATE TABLE AS SELECT (CTAS) ステートメントを使用して、同期または非同期でテーブルをクエリし、クエリ結果に基づいて新しいテーブルを作成し、その後クエリ結果を新しいテーブルに挿入できます。
非同期 CTAS タスクを SUBMIT TASK を使用して送信できます。
構文
-
テーブルを同期的にクエリし、クエリ結果に基づいて新しいテーブルを作成し、その後クエリ結果を新しいテーブルに挿入します。
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] [database.]table_name
[column_name1 [, column_name2, ...]]
[index_definition1 [, index_definition2, ...]]
[key_desc]
[COMMENT "table comment"]
[partition_desc]
[distribution_desc]
[ORDER BY (column_name1 [, column_name2, ...])]
[PROPERTIES ("key"="value", ...)]
AS SELECT query
[ ... ] -
テーブルを非同期でクエリし、クエリ結果に基づいて新しいテーブルを作成し、その後クエリ結果を新しいテーブルに挿入します。
SUBMIT [/*+ SET_VAR(key=value) */] TASK [[database.]<task_name>]AS
CREATE TABLE [IF NOT EXISTS] [database.]table_name
[column_name1 [, column_name2, ...]]
[index_definition1 [, index_definition2, ...]]
[key_desc]
[COMMENT "table comment"]
[partition_desc]
[distribution_desc]
[ORDER BY (column_name1 [, column_name2, ...])]
[PROPERTIES ("key"="value", ...)] AS SELECT query
[ ... ]
パラメータ
パラメータ | 必須 | 説明 |
---|---|---|
TEMPORARY | いいえ | 一時テーブルを作成します。v3.3.1 から、StarRocks は Default Catalog での一時テーブルの作成をサポートしています。詳細は Temporary Table を参照してください。現在、StarRocks は SUBMIT TASK を使用して非同期タスクでの一時テーブルの作成をサポートしていません。 |
column_name | いいえ | 新しいテーブルの列名です。列のデータ型を指定する必要はありません。StarRocks は自動的に適切なデータ型を指定します。StarRocks は FLOAT および DOUBLE データを DECIMAL(38,9) データに変換します。また、CHAR、VARCHAR、および STRING データを VARCHAR(65533) データに変換します。 |
index_definition | いいえ | v3.1.8 以降、新しいテーブルにビットマップインデックスを作成できます。構文は INDEX index_name (col_name[, col_name, ...]) [USING BITMAP] COMMENT 'xxxxxx' です。パラメータの説明と使用上の注意については Bitmap indexes を参照してください。 |
key_desc | いいえ | 構文は key_type ( <col_name1> [, <col_name2> , ...]) です。パラメータ:
|
COMMENT | いいえ | 新しいテーブルのコメント。 |
partition_desc | いいえ | 新しいテーブルのパーティション化の手法。デフォルトでは、このパラメータを指定しない場合、新しいテーブルにはパーティションがありません。パーティション化の詳細については CREATE TABLE を参照してください。 |
distribution_desc | いいえ | 新しいテーブルのバケット化の手法。このパラメータを指定しない場合、バケット列はコストベースオプティマイザ (CBO) によって収集された最も高いカーディナリティを持つ列にデフォルト設定されます。バケット数はデフォルトで 10 です。CBO がカーディナリティに関する情報を収集しない場合、バケット列は新しいテーブルの最初の列にデフォルト設定されます。バケット化の詳細については CREATE TABLE を参照してください。 |
ORDER BY | いいえ | v3.1.8 以降、新しいテーブルが主キーテーブルである場合、ソートキーを指定できます。ソートキーは任意の列の組み合わせにすることができます。主キーテーブルは、テーブル作成時に PRIMARY KEY (xxx) が指定されたテーブルです。 |
Properties | いいえ | 新しいテーブルのプ ロパティ。 |
AS SELECT query | はい | クエリ結果。... AS SELECT query で列を指定できます。例えば、... AS SELECT a, b, c FROM table_a; のように指定します。この例では、a 、b 、c はクエリされたテーブルの列名を示します。新しいテーブルの列名を指定しない場合、新しいテーブルの列名も a 、b 、c になります。... AS SELECT query で式を指定することもできます。例えば、... AS SELECT a+1 AS x, b+2 AS y, c*c AS z FROM table_a; のように指定します。この例では、a+1 、b+2 、c*c はクエリされたテーブルの列名を示し、x 、y 、z は新しいテーブルの列名を示します。注意: 新しいテーブルの列数は、SELECT ステートメントで指定された列数と同じである必要があります。識別しやすい列名を使用することをお勧めします。 |
使用上の注意
-
CTAS ステートメントは、次の要件を満たす新しいテーブルのみを作成できます:
-
ENGINE
はOLAP
です。 -
テーブルはデフォルトで重複キーテーブルです。
key_desc
で主キーテーブルとして指定することもできます。 -
ソートキーは最初の 3 列であり、これらの 3 列のデータ型のストレージスペースは 36 バイトを超えません。
-
-
CTAS ステートメントは、新しく作成された テーブルにインデックスを設定することをサポートしていません。
-
CTAS ステートメントが FE の再起動などの理由で実行に失敗した場合、次のいずれかの問題が発生する可能性があります:
-
新しいテーブルが正常に作成されますが、データが含まれていません。
-
新しいテーブルの作成に失敗します。
-
-
新しいテーブルが作成された後、複数の方法(INSERT INTO など)を使用して新しいテーブルにデータを挿入する場合、INSERT 操作を最初に完了した方法がそのデータを新しいテーブルに挿入します。
-
新しいテーブルが作成された後、このテーブルに対する権限を手動でユーザーに付与する必要があります。
-
テーブルを非同期でクエリし、クエリ結果に基づいて新しいテーブルを作成する際にタスクの名前を指定しない場合、StarRocks はタスクの名前を自動的に生成します。
例
例 1: テーブル order
を同期的にクエリし、クエリ結果に基づいて新しいテーブル order_new
を作成し、その後クエリ結果を新しいテーブルに挿入します。
CREATE TABLE order_new
AS SELECT * FROM order;
例 2: テーブル order
の k1
、k2
、k3
列を同期的にクエリし、クエリ結果に基づいて新しいテーブル order_new
を作成し、その後クエリ結果を新しいテーブルに挿入します。さらに、新しいテーブルの列名を a
、b
、c
に設定します。
CREATE TABLE order_new (a, b, c)
AS SELECT k1, k2, k3 FROM order;
または
CREATE TABLE order_new
AS SELECT k1 AS a, k2 AS b, k3 AS c FROM order;
例 3: テーブル employee
の salary
列の最大値を同期的にクエリし、クエリ結果に基づいて新しいテーブル employee_new
を作成し、その後クエリ結果を新しいテーブルに挿入します。さらに、新しいテーブルの列名を salary_max
に設定します。
CREATE TABLE employee_new
AS SELECT MAX(salary) AS salary_max FROM employee;