Help us understand the problem. What is going on with this article?

Glueの使い方的な⑳(クローラーオプション_Grouping behavior for S3 data)

More than 1 year has passed since last update.

クローラーオプション Grouping behavior for S3 data

クローラー作成画面にこんなオプションが追加されました。

スクリーンショット 0030-08-12 14.32.07.png

これはクローラー実行時のオプションで以下のような効果がります。

オプションなし(デフォルト)

クローラが S3 に格納されたデータのテーブルを定義するとき、データの互換性とスキーマの類似性の両方を考慮します。
データの互換性の考慮事項には、データが同じ形式(JSONなど)、同じ圧縮形式(GZIPなど)、S3 パスの構造、およびその他のデータ属性であるかどうかが含まれます。
スキーマの類似度は、別々の S3 オブジェクトのスキーマがどれほど似ているかを示す指標です。

オプションあり

可能であれば、CombineCompatibleSchemasを共通テーブル定義に設定することができます。このオプションを使用すると、クローラは引き続きデータの互換性を考慮しますが、指定されたインクルードパスで S3 オブジェクトを評価する際の特定のスキーマの類似性は無視されます。

今回使うGlueのリソース名

クローラー名

se2_in9

データ

入力:in9

全体の流れ

  • 前準備
  • オプションなしでクローリング
  • オプションありでクローリング
  • まとめ

前準備

今回使うサンプルログファイル

2つのcsvファイルを使う

①csvファイル
deviceid,uuid,appid
iphone,11111,001
android,11112,001
iphone,11113,009
iphone,11114,007

②csvファイル(①と異なるスキーマ)
aaid,bbid,ccid
ueue,11115,002
piopio,11116,002
hoge,11113,004
hoge,11112,007

ディレクトリ構成

スキーマのことなるデータ①②を以下のように配置

$ aws s3 ls s3://test-glue00/se2/in9/
                           PRE year=2017/
                           PRE year=2018/
2018-08-12 13:13:01          0 
$ aws s3 ls s3://test-glue00/se2/in9/year=2017/
2018-08-12 13:52:15          0 
2018-08-12 13:57:22         89 cvlog1.csv
$ aws s3 ls s3://test-glue00/se2/in9/year=2018/
2018-08-12 13:52:24          0 
2018-08-12 13:57:36        136 cvlog2.csv

オプションなしでクローリング(デフォルト)

それぞれ別々のスキーマを作りたいならデフォルト

2つのデータのスキーマの類似度が低いため、"se2_year_2017"と"se2_year_2018"の2つのテーブルが作成されている

スクリーンショット 0030-08-12 14.27.18.png

①のデータの"se2_year_2017"テーブル

スクリーンショット 0030-08-12 14.29.11.png

②のデータの"se2_year_2018"テーブル

スクリーンショット 0030-08-12 14.29.23.png

オプションありでクローリング

オプション有効にする

スクリーンショット 0030-08-12 14.42.26.png

クローリングを実行

スキーマの類似性を無視してスキーマが1つとしてテーブルが作成される

スクリーンショット 0030-08-12 14.19.20.png

  • ディレクトリの途中にデータが存在してたりするとパーティションが認識されず複数のテーブルができてしまいます(これは今まで通り)。
    例えば、se2/in9/xxx.csvが追加で存在すると、"se2_cvlog2_csv"、"se2_year_2017"、"se2_year_2018"の3つのテーブルが出来上がります

  • 形式の異なるデータが1つでもあると複数のテーブルができてしまいます。
    例えば、se2/in9/year=2019/test.json が追加で含まれていると、"se2_year_2017"、"se2_year_2018"、"se2_year_2019"の3つのテーブルが出来上がります。

まとめ

JSONなどのデータの形式やGZIPなどの圧縮形式が同じであれば、あるS3パス配下のデータは多少異なるカラムがあってもスキーマを結合してしまいたい場合にいいのかも。

こちらも是非

AWS Glue コンソールでのクローラの設定
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/crawler-configuration.html

Glueの使い方まとめ
https://qiita.com/pioho07/items/32f76a16cbf49f9f712f

pioho07
こちらに記載の内容は所属会社とは関係ありませぬ。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした