Hive JSON SerDe
Hive JSON SerDe は通常、イベントなどの JSON データを処理するために使用されます。これらのイベントは、改行で区切られ JSON 形式でエンコードされたテキストの 1 行の文字列として表現されます。Hive JSON SerDe では、map
または struct
キー名に重複するキーを使用できません。
注記
SerDe では、各 JSON ドキュメントが、レコード内のフィールドを区切る行終端文字なしの、1 行のテキストに収まっていることを想定しています。JSON テキストがプリティプリント形式の場合、テーブルを作成した後にクエリを実行しようとすると、以下のようなエラーメッセージが表示される場合があります。「HIVE_CURSOR_ERROR: Row is not a valid JSON Object
」、または「HIVE_CURSOR_ERROR: JsonParseException: Unexpected end-of-input: expected close marker for OBJECT
」。詳細については、GitHub の OpenX SerDe のドキュメントで「JSON Data Files
次の DDL ステートメントの例では、Hive JSON SerDe を使用して、サンプルオンライン広告データに基づいてテーブルを作成します。LOCATION
句で、s3://amzn-s3-demo-bucket.elasticmapreduce/samples/hive-ads/tables/impressions
の myregion
を、Athena を実行するリージョンの識別子 (s3://us-west-2.elasticmapreduce/samples/hive-ads/tables/impressions
など) に置き換えます。
CREATE EXTERNAL TABLE impressions ( requestbegintime string, adid string, impressionid string, referrer string, useragent string, usercookie string, ip string, number string, processid string, browsercookie string, requestendtime string, timers struct < modellookup:string, requesttime:string >, threadid string, hostname string, sessionid string ) PARTITIONED BY (dt string) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' LOCATION 's3://amzn-s3-demo-bucket.elasticmapreduce/samples/hive-ads/tables/impressions';
Hive JSON SerDe でタイムスタンプ形式を指定する
文字列からタイムスタンプ値を解析するには、WITH
SERDEPROPERTIES
サブフィールドを ROW FORMAT SERDE
句に追加し、これを使用して、timestamp.formats
パラメータを指定します。パラメータで、次の例のように、1 つまたは複数のタイムスタンプパターンのコンマ区切りリストを指定します。
... ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' WITH SERDEPROPERTIES ("timestamp.formats"="yyyy-MM-dd'T'HH:mm:ss.SSS'Z',yyyy-MM-dd'T'HH:mm:ss") ...
詳細については、Apache Hive ドキュメントの「タイムスタンプ
クエリのためにテーブルをロードする
テーブルを作成したら、MSCK REPAIR TABLE を実行してテーブルをロードし、Athena からクエリできるようにします。
MSCK REPAIR TABLE impressions
CloudTrail ログをクエリする
Hive JSON SerDe を使って CloudTrail のログをクエリすることができます。詳細情報と例 CREATE TABLE
については、「AWS CloudTrail ログをクエリする」を参照してください。