CREATE TABLE文は、Treasure Data CDPのデータベースに、指定したスキーマで新しいテーブルを定義します。データエンジニアは、Trinoに切り替えることなくHiveQLから直接テーブルを作成するために使用します(例: データ取り込みワークフローやスケジュールクエリの実行前)。
このページでは、HiveクエリエンジンでサポートされるCREATE TABLEの構文について説明します。TrinoクエリエンジンでもCREATE TABLEはサポートされていますが、構文や機能は異なります。
CREATE TABLE [IF NOT EXISTS] [<database_name>.]<table_name> (
<column_name> <data_type> [COMMENT '<column_comment>'],
...
)
[COMMENT '<table_comment>']
[TBLPROPERTIES ('<key>' = '<value>', ...)]各項目について:
- <table_name> は作成するテーブルの名前です。
- <data_type> はカラムのデータ型です。サポートされるデータ型を参照してください。
IF NOT EXISTSは、同名のテーブルが既に存在する場合に発生するエラーを抑制します。COMMENTは、カラムまたはテーブルの任意の説明を設定します。TBLPROPERTIESは、任意のテーブルプロパティを設定します。サポートされるテーブルプロパティを参照してください。
基本的なテーブルを作成する例:
CREATE TABLE my_database.users (
user_id BIGINT,
name STRING,
score DOUBLE
);テーブルが存在しない場合のみ、カラムおよびテーブルのコメント付きで作成する例:
CREATE TABLE IF NOT EXISTS users (
user_id BIGINT COMMENT 'Unique identifier',
email STRING COMMENT 'User email address'
)
COMMENT 'User master table';expire_daysでデータ保持期間を設定する例:
CREATE TABLE user_events (
user_id BIGINT,
event_type STRING,
created_at BIGINT
)
TBLPROPERTIES (
'comment' = 'User event tracking table',
'expire_days' = '90'
);ユーザー定義パーティショニング(UDP)でデータを分散する例:
CREATE TABLE user_events (
user_id BIGINT,
session_id STRING,
event_type STRING
)
TBLPROPERTIES (
'udp.bucket_count' = '128',
'udp.bucketed_on' = 'user_id,session_id'
);LIKE句を使用すると、既存テーブルのスキーマをコピーした新しいテーブルを作成できます。コピーされるのはテーブル構造のみで、データはコピーされません。
CREATE TABLE [IF NOT EXISTS] <new_table_name> LIKE <source_table_name>;元テーブルのカラム定義に加え、expire_daysやユーザー定義パーティショニング(UDP)設定などのテーブルプロパティが新しいテーブルにコピーされます。元テーブルは事前に存在している必要があり、存在しない場合はエラーになります。
Hiveのデータ型は、以下のようにTreasure Data CDPのカラム型にマッピングされます。記載されていない型はサポートされません。
| Hive型 | CDPカラム型 | 備考 |
|---|---|---|
STRING, VARCHAR(n), CHAR(n) | string | 長さの制約は無視されます。 |
BIGINT | long | |
INT, INTEGER, SMALLINT, TINYINT | long | |
DOUBLE, FLOAT | double | |
ARRAY<type> | array |
以下のプロパティのみが処理されます。それ以外のプロパティは通知なく無視されます。
| プロパティ | 型 | 説明 |
|---|---|---|
comment | String | テーブルの説明です。テーブルレベルのCOMMENT句と同等です。 |
expire_days | Integer | この日数を経過したデータが自動的に削除されます。正の整数である必要があります。 |
udp.bucket_count | Integer | ユーザー定義パーティショニングのバケット数です。4から4096までの2のべき乗である必要があります。 |
udp.bucketed_on | String | バケット対象カラムのカンマ区切りリストです。最大3カラムまで指定でき、テーブルスキーマに存在し、かつtimeカラムを含めることはできません。 |
udp.bucket_countとudp.bucketed_onは、両方を指定するか、どちらも指定しないかのいずれかである必要があります。ユーザー定義パーティショニングの詳細については、ユーザー定義パーティショニング(UDP)ページを参照してください。
CREATE TABLEはマネージドテーブルを作成します。EXTERNAL句による外部テーブルの作成はサポートされません。
以下の句はサポートされておらず、エラーとして拒否されます:
TEMPORARYEXTERNALPARTITIONED BYCLUSTERED BY/SORTED BY/INTO ... BUCKETSROW FORMATSTORED ASLOCATION
クエリ結果からテーブルを作成するCREATE TABLE AS SELECTはサポートされません。CTAS のサポートは今後のリリースで予定されています。