11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DynamoDBにAthenaでSQL!

Last updated at Posted at 2017-03-14

最近EMRからDynamoDBを操作することにハマっているDynamoおじさんです。

この記事の内容

DynamoDBのデータはDataPiplineを使用してS3にエクスポートができます。
このデータは1行1JSONの構造になっているので、Athenaからクエリーが投げられると思いつき、実際に試してみた結果です。

所感

最初に結論を言ってしまうと、現状では使用は限られるんじゃないかなと思います。
CLIやSDKからレポートを出力出来るようになったら、使えるところが広がりそう・・・と言ったところです。

前提条件

  • DynamoDBからエクスポートしたデータがS3上に保管されていること

エクスポートができているJSONデータを操作します。

事前準備(エクスポート)

エクスポートについて簡単に手順を確認します。

1.DynamoDBテーブルを選択し、エクスポートを選択する

スクリーンショット 2017-03-14 11.10.52.png

テーブルを選択した状態でエクスポートを選択します。

2.DataPiplineの設定

スクリーンショット_2017-03-14_11_13_13.jpg

スクリーンショット 2017-03-14 11.13.25.png

だいじと書いたrateに関して
これはDynamoDBテーブルが確保したRCUの内、今回の処理でDataPiplineが使用する割合を記載します。
注意としてはアクセル踏みすぎたりすることは多分にあります。

設定が終わったらActivateしましょう。起動します。
詳細設定は可能なので環境に応じてカスタマイズしてください。

Athenaの設定

S3にデータが出力されたあとの話に移ります。
実際にAthenaを使用してDynamoDBのデータにSQLを投げてみます
Athenaは現在東京リージョンでは使用できないのでバージニアで使用します(一番上だったし)

スクリーンショット 2017-03-14 11.21.27.png

お約束の画面
スクリーンショット 2017-03-14 11.23.30.png

Catalog Manager -> Add table

と選択して上記の画面へ遷移する

適当にDB、テーブルを指定・作成します
中ほどにあるS3パスが大事です。

東京リージョンのバケットだろうと関係ないので

s3://オブジェクトまでのパス/

を書いて次へ

スクリーンショット 2017-03-14 11.26.28.png

Importするデータ形式を選ぶのでJSONを選択

スクリーンショット 2017-03-14 11.27.27.png

カラム名と形式を指定します。
その次のところはまあ、デフォルトでいいので指定するとAthenaはテーブルを作ってくれます。

かんたんでしょ?

ただし、こうやって作成すると

json
{"name":{"s":"mnono-morikubo"},"type":{"s":"cool"},"comment":{"s":"murii"}}

みたいなのが元になっているJSONだとすると、これで読み込むと各カラムがこんな感じになります

name
{"s":"mnono-morikubo"}
type
{"s":"cool"}
comment
{"s":"murii"}

selectで出てきた結果がこれじゃ困りますね?
JSONに対応させましょう

JSONに対応したテーブルの作成

スクリーンショット 2017-03-14 11.35.10.png

この画面の右側にコマンドを書いてきます

テーブル定義
CREATE EXTERNAL TABLE sampledb.test_tb (
   name struct <s:string>,
   type struct <s:string>,
   comment struct <s:string>
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://オブジェクトまでのパス/';

こんな感じに定義することでJSONに対応させることができます。
この辺の詳しい説明はおなじみの大御所、以下の記事を参考にしました。

Amazon Athenaを使ってJSONファイルを検索してみる

クエリ

ここまで来てしまえば完成ですが最後にクエリだけ

クエリ
SELECT
  name.s as name,
  type.s as type,
  comment.s as comment
FROM
  test_tb

limit 100;

スクリーンショット_2017-03-13_19_27_54.jpg

まとめ

EMRでhive使ってDynamoDB操作していたのでそういえばAthenaもなんか似た感じだったな・・・と思い試してみましたが、裏側は多分同じなんでしょうね。
いちいちクラスターを準備せず、クエリー単位での課金なので、日次でデータをdumpしたりしている場合はテーブルさえ作っておけばキャパシティを消費せずにSQLがかけるので便利なこともあるかもしれません。

まあ、CLIが出てこないとなんとも言えませんがね。
アップデートに期待です。

11
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?