Skip to content

HiveのCREATE TABLE文の構文

CREATE TABLE文は、Treasure Data CDPのデータベースに、指定したスキーマで新しいテーブルを定義します。データエンジニアは、Trinoに切り替えることなくHiveQLから直接テーブルを作成するために使用します(例: データ取り込みワークフローやスケジュールクエリの実行前)。

Note

このページでは、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'
);

テーブルスキーマのコピー (CREATE TABLE LIKE)

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長さの制約は無視されます。
BIGINTlong
INT, INTEGER, SMALLINT, TINYINTlong
DOUBLE, FLOATdouble
ARRAY<type>array

サポートされるテーブルプロパティ

以下のプロパティのみが処理されます。それ以外のプロパティは通知なく無視されます。

プロパティ説明
commentStringテーブルの説明です。テーブルレベルのCOMMENT句と同等です。
expire_daysIntegerこの日数を経過したデータが自動的に削除されます。正の整数である必要があります。
udp.bucket_countIntegerユーザー定義パーティショニングのバケット数です。4から4096までの2のべき乗である必要があります。
udp.bucketed_onStringバケット対象カラムのカンマ区切りリストです。最大3カラムまで指定でき、テーブルスキーマに存在し、かつtimeカラムを含めることはできません。
Note

udp.bucket_countudp.bucketed_onは、両方を指定するか、どちらも指定しないかのいずれかである必要があります。ユーザー定義パーティショニングの詳細については、ユーザー定義パーティショニング(UDP)ページを参照してください。

制限事項

マネージドテーブルのみ

CREATE TABLEはマネージドテーブルを作成します。EXTERNAL句による外部テーブルの作成はサポートされません。

サポートされない句

以下の句はサポートされておらず、エラーとして拒否されます:

  • TEMPORARY
  • EXTERNAL
  • PARTITIONED BY
  • CLUSTERED BY / SORTED BY / INTO ... BUCKETS
  • ROW FORMAT
  • STORED AS
  • LOCATION

CREATE TABLE AS SELECT (CTAS)

クエリ結果からテーブルを作成するCREATE TABLE AS SELECTはサポートされません。CTAS のサポートは今後のリリースで予定されています。