AWS Athena で JSON ファイルを取り扱ってみたまとめ
AWS Athena は AWS 上のリソースを Database のように扱えるサービスです。
主な用途としてはログファイルの解析とかになるかと思いますが、
S3 上に JSON ファイルをボスボス配置して 簡易 CMS 的な使い方もできたりします。
データの準備
まずは S3 のバケットを作成します。
Athena のリージョンと S3 のリージョンはあわせたほうがいいんでしょうか…?
作成したバケットの中にフォルダを作成し、中に JSON ファイルを配置します。
JSON ファイルは 1ファイルが1レコードという扱いになるので、{
から書き始める形になります。ファイル名は無視されます。
以下のような形式の JSON ファイルはNGです。
{
"title":"hgoe",
"url": "piyo"
}
必ず以下のような形でアップロードします。
{"title":"hoge","url": "piyo"}
以下のように意図しない空行が末尾にあるとnullレコードが出来たりします。
{"title":"hoge","url": "piyo"}
位置ファイル内に複数レコード必要な際には、以下のように記述します。
{ ... },
{ ... }
ファイル名は日本語でもOKです。
中にフォルダを作って深い階層においてもOK
データ内に日本語が入っていてもOKです。
テーブルの作成
Athena の管理コンソールのadd table
からテーブルを作成します。
テーブルの作成時のLocationにはs3://bucket/folder/
の形式でフォルダを選択します。
指定されたフォルダの中のデータ全てが読み取り対象となり、異常なオブジェクトが1つでもあるとクエリを実行出来ません。
無精して手作業でオブジェクトを運用とかはちょっと無理っぽい気がします。gulp-yaml
とかを使用してJSONファイルを自動生成するのをおすすめします。
クエリの発行
テーブルを作成するとクエリを発行出来ます。
列に指定したプロパティが存在しない場合 null
で扱われます。
int 型は 3
でも "3"
でも正常に認識されますが、 3hoge
のように文字列を混入させると、 クエリの発行自体ができなくなります。
タイムスタンプは UnixTimestamp を使用するようです。
ダッシュボードのバグなのか何なのか知らないですが、オブジェクトを追加削除した瞬間のクエリ結果は一瞬おかしくなります。
現場からは以上です。
Author And Source
この問題について(AWS Athena で JSON ファイルを取り扱ってみたまとめ), 我々は、より多くの情報をここで見つけました https://qiita.com/mikakane/items/9239d5640e7699b4b069著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .