メニュー
Amazon Athena
ユーザーガイド

CSV を処理するための OpenCSVSerDe

Athena で CSV ファイルからテーブルを作成する場合、テーブルに含まれる値のタイプを判断します。

  • ファイルに含まれる値が引用符で囲まれている場合は、Athena で OpenCSV SerDe を使用して値を逆シリアル化します。

  • ファイルが含まれる値が引用符で囲まれていない場合は、どの SerDe も指定する必要がありません。この場合、Athena はデフォルトの LazySimpleSerDe を使用します。詳細については、「CSV、TSV、およびカスタム区切りファイルの LazySimpleSerDe」を参照してください。

CSV SerDe (OpenCSVSerde)

この OpenCSV SerDe は、以下のように動作します。

  • 区切り文字、引用符、およびエスケープ文字を指定できます (例: WITH SERDEPROPERTIES ("separatorChar" = ",", "quoteChar" = "`", "escapeChar" = "\\" ))。

  • CSV ファイルの埋め込み改行はサポートしません。

  • すべての列タイプ値を STRING に変換します。

  • STRING 以外のデータ型を認識する場合は、Presto パーサーに依存し、値を STRING からそれらのデータ型 (認識できる場合) に変換します。

特に、STRING 以外のデータ型の場合、この SerDe は以下のように動作します。

  • BOOLEANBIGINTINT、および DOUBLE の各データ型を認識し、これらを変更なしで解析します。

  • TIMESTAMP 型が yyyy-mm-dd hh:mm:ss[.f...] などの UNIX 形式で指定されている場合、これを LONG 型として認識します。

  • TIMESTAMP の JDBC 準拠の java.sql.Timestamp 形式 ("YYYY-MM-DD HH:MM:SS.fffffffff" などの小数点以下 9 桁の精度) はサポートされていません。Hive の CSV ファイルを処理する場合は、TIMESTAMP の UNIX 形式を使用します。

  • DATE 型が YYYY-MM-DD などの UNIX 形式で指定されている場合、これを LONG 型として認識します。

  • DATE の別の形式はサポートされていません。Hive の CSV ファイルを処理する場合は、DATE の UNIX 形式を使用します。

SerDe 名

CSV SerDe

ライブラリ名

この SerDe を使用するには、完全修飾クラス名を ROW FORMAT で指定します。また、次に示すように、SERDEPROPERTIES 内に区切り記号を指定します。

... ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ( "separatorChar" = ",", "quoteChar" = "`", "escapeChar" = "\\" )

次の例では、ソース CSV ファイルが s3://mybucket/mycsv/ に保存されており、データコンテンツが以下のとおりであるとします。

"a1","a2","a3","a4" "1","2","abc","def" "a","a1","abc3","ab4"

CREATE TABLE ステートメントを使用して、この CSV ファイルに基づく Athena テーブルを作成し、OpenCSVSerDe クラスを ROW FORMAT で参照します。また、文字の区切り記号、引用符文字、およびエスケープ文字の SerDe プロパティを指定します。

CREATE EXTERNAL TABLE myopencsvtable ( col1 string, col2 string, col3 string, col4 string ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ( 'separatorChar' = ',', 'quoteChar' = '\"', 'escapeChar' = '\\' ) STORED AS TEXTFILE LOCATION 's3://location/of/csv/';

テーブル内のすべての値に対してクエリを実行します。

SELECT * FROM myopencsvtable;

クエリは次の値を返します。

col1 col2 col3 col4 ----------------------------- a1 a2 a3 a4 1 2 abc def a a1 abc3 ab4

注記

フライトテーブルのデータは、米国 Department of Transportation、Bureau of Transportation Statistics が提供する Flights に基づいています。オリジナルからの不飽和。

このページの内容: