Amazon Athena
ユーザーガイド

CREATE TABLE

指定した名前とパラメータでテーブルを作成します。

概要

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name [(col_name data_type [COMMENT col_comment] [, ...] )] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] [ROW FORMAT row_format] [STORED AS file_format] [WITH SERDEPROPERTIES (...)] ] [LOCATION 's3_loc'] [TBLPROPERTIES ( ['has_encrypted_data'='true | false',] ['classification'='aws_glue_classification',] property_name=property_value [, ...] ) ]

パラメータ

[EXTERNAL]

Amazon S3 内の基になるデータファイルに基づくテーブルを、指定した LOCATION に作成することを指定します。外部テーブルを作成する場合、参照先のデータはデフォルト形式に準拠しているか、ユーザーが ROW FORMATSTORED AS、および WITH SERDEPROPERTIES で指定する形式に準拠している必要があります。

[IF NOT EXISTS]

table_name という名前のテーブルが既に存在している場合は、エラーメッセージを抑制します。

[db_name.]table_name

作成するテーブルの名前を指定します。オプションの db_name パラメータは、テーブルを作成する先のデータベースを指定します。この引数を省略すると、現在のデータベースが使用されます。テーブル名に数字を含める場合は、table_name を引用符で囲みます (例: "table123")。table_name をアンダースコアで始める場合は、バックティックを使用します (例: `_mytable`)。特殊文字 (アンダースコア以外) はサポートされていません。

Athena のテーブル名では大文字と小文字が区別されます。ただし、Apache Spark を使用する場合は、テーブル名を小文字にする必要があります。

[ ( col_name data_type [COMMENT col_comment] [, ...] ) ]

作成する各列の名前とデータ型を指定します。列名に特殊文字 (アンダースコア (_) を除く) を使用することはできません。col_name をアンダースコアで始める場合は、列名をバックティックで囲みます (例: `_mycolumn`)。data_type 値には次のいずれかを指定できます。

  • primitive_type
    • TINYINT

    • SMALLINT

    • INT

    • BIGINT

    • BOOLEAN

    • DOUBLE

    • FLOAT

    • STRING

    • TIMESTAMP

    • DECIMAL [ (precision, scale) ]

    • DATE (Parquet データ型ではサポート外です)

    • CHAR. 固定長の文字データ。1〜255 の長さを指定できます (例: char(10))。詳細については、「CHAR Hive データ型」を参照してください。

    • VARCHAR. 可変長の文字データ。1〜65535 の長さを指定できます (例: varchar(10))。詳細については、「VARCHAR Hive データ型」を参照してください。

  • array_type
    • ARRAY < data_type >

  • map_type
    • MAP < primitive_type, data_type >

  • struct_type
    • STRUCT < col_name : data_type [COMMENT col_comment] [, ...] >

[COMMENT table_comment]

comment テーブルプロパティを作成し、指定した table_comment を追加します。

[PARTITIONED BY (col_name data_type [ COMMENT col_comment ], ... ) ]

col_namedata_type および col_comment が指定された 1 つ以上の列を持つ、パーティション分割されたテーブルを作成します。テーブルは、個別の列名と値の組み合わせで構成されるパーティションを 1 つ以上持つことができます。指定した組み合わせごとに別個のデータディレクトリが作成されます。これにより、クエリパフォーマンスが向上する場合があります。パーティション化された列はテーブルデータ内には存在しません。テーブル列と同じ col_name の値を使用する場合は、エラーになります。詳細については、「データのパーティション分割」を参照してください。

注記

パーティション分割されたテーブルを作成したら、MSCK REPAIR TABLE 句で構成されるクエリを続けて実行し、パーティションメタデータ (MSCK REPAIR TABLE cloudfront_logs; など) を更新します。

[ROW FORMAT row_format]

テーブルの行形式と基になるソースデータ (該当する場合) を指定します。row_format として、DELIMITED 句で 1 つ以上の区切り記号を指定できます。または、以下に説明するように、SERDE 句を使用できます。ROW FORMAT を省略するか、ROW FORMAT DELIMITED を指定すると、ネイティブ SerDe が使用されます。

  • [DELIMITED FIELDS TERMINATED BY char [ESCAPED BY char]]

  • [DELIMITED COLLECTION ITEMS TERMINATED BY char]

  • [MAP KEYS TERMINATED BY char]

  • [LINES TERMINATED BY char]

  • [NULL DEFINED AS char] -- (注: Hive 0.13 以降で使用可能)

--または--

  • SERDE 'serde_name' [WITH SERDEPROPERTIES ("property_name" = "property_value", "property_name" = "property_value" [, ...] )]

    serde_name は、使用する SerDe を示します。WITH SERDEPROPERTIES 句を使用すると、SerDe で許可される 1 つ以上のカスタムプロパティを指定できます。

[STORED AS file_format]

テーブルデータのファイル形式を指定します。省略すると、デフォルトの TEXTFILE が使用されます。file_format のオプションは以下のとおりです。

  • SEQUENCEFILE

  • TEXTFILE

  • RCFILE

  • ORC

  • PARQUET

  • AVRO

  • INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname

[LOCATION 'S3_loc']

テーブルを作成する基のデータがある Amazon S3 の場所を指定します (例: `s3://mystorage/`)。データ形式やアクセス許可などの考慮事項の詳細については、「Athena のテーブルと Amazon S3 のデータに関する要件」を参照してください。

フォルダやバケットの後にはスラッシュを使用します。ファイル名や glob 文字を使用しないでください。

使用する: s3://mybucket/myfolder/

使用しない: s3://path_to_bucket s3://path_to_bucket/* s3://path_to-bucket/mydatafile.dat

[TBLPROPERTIES ( ['has_encrypted_data'='true | false',] ['classification'='aws_glue_classification',] property_name=property_value [, ...] ) ]

定義済みのテーブルプロパティ ("comment" など) に加えて、テーブル定義のカスタムメタデータとしてキーと値のペアを指定します。

Athena には、組み込みプロパティとして has_encrypted_data があります。このプロパティを true に設定し、LOCATION で指定する基になるデータを暗号化することを指定します。省略すると、false が使用されます。省略するか、false に設定して基になるデータを暗号化すると、クエリはエラーになります。詳細については「暗号化オプションの設定」を参照してください。

ETL ジョブを実行する場合、AWS Glue はテーブルの作成時に classification プロパティを設定し、AWS Glue のデータ型を csvparquetorcavro、または json として指定することを要求します ("'classification'='csv'" など)。このプロパティを指定しないと、ETL ジョブは失敗します。AWS Glue コンソール、API、または CLI を使用して後で指定できます。詳細については、AWS Glue 開発者ガイドの「Athena における ETL 用の AWS Glue ジョブの使用」と「Glue でのジョブの作成」を参照してください。

CREATE EXTERNAL TABLE IF NOT EXISTS mydatabase.cloudfront_logs ( Date DATE, Time STRING, Location STRING, Bytes INT, RequestIP STRING, Method STRING, Host STRING, Uri STRING, Status INT, Referrer STRING, os STRING, Browser STRING, BrowserVersion STRING ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( "input.regex" = "^(?!#)([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+[^\(]+[\(]([^\;]+).*\%20([^\/]+)[\/](.*)$" ) LOCATION 's3://athena-examples/cloudfront/plaintext/';

このページの内容: