GlueはETLのフルマネージドサービスです。Glueを構成する一つの要素にクローラ(Crawler)があります。これまでよくわからないけど自動でデータカタログを作成してくれて便利そうという印象がありつつも、なかなか触れていせんでした。今回はGlueのクローラを使って、S3上のCSVデータをクロールし、検出したテーブルにAthenaでクエリを実行してみました。クローラクローラは指定したデータストアを調べて、データカタログに登録してくれます。定期実行をする事で、スキーマやパーティションの定期的な自動更新も可能です。クローラは分類子を用いてデータストアにあるデータのスキーマを推論/検出します。指定された順序でカスタム分類子を使用し、その後組み込みの分類子が使用されます。分類子が推論したスキーマが100%確実だと判定した場合は、次に使用されるはずだったカスタム分類子もしくは組み込みの分類子は使用されません。データのスキーマを推論もしくは検出します。そのスキーマがどれほど確実かを示す確信度数(certainty)も返します。Catalog)に書き込みます。メタデータはテーブル単位で保存され、テーブルはGlueのデータカタログ上の1つのデータベースに属します。メタデータにはテーブル定義に関するものだけでなく、分類子による情報なども含まれます。ServerMySQLOraclePostgreSQLやってみるクローラの理解を深めるため、次のことを実際にやってみます。S3にデータを入れるクローラを作成するクローラを走らせるAthenaでクエリを実行するS3にデータを入れるまずはクローラで検出させるCSVデータを作成します。PythonでIrisデータとランダムな数値データを作成し、それぞれCSV形式でS3にアップロードします。ランダムな数値データの方は0-9までのidでパーティション化します。lsで確認してみると、11個のオブジェクトが配置されているのがわかります。--recursiveクローラを作成するマネジメントコンソールに移り、クローラを作成します。引っかかりようがないところは飛ばしながら、作成の様子を見ていきます。Consoleクローラ作成の最初の画面では、オプションとしてタグや暗号化に関する設定、カスタム分類子の設定が可能です。カスタム分類子を事前に作成してある場合は左下に一覧として並び、クローラに使用する分類子を選択します。今回はカスタム分類子は使用しないので、そのまま進めます。クロール対象のデータストアを選択します。今回はS3なので、対象のS3パスを指定します。オプションとして、対象内のS3パスの中でもクロール対象外としたいパスの指定も可能です。クロール対象のデータストアを追加することができます。今回は1つのS3パスのみなので、追加しません。クロールに使用するIAMロールを選択もしくは作成します。そのまま進めていくと、クローラの実行頻度を選択する画面が出てきます。カスタムが選択できます。カスタムの場合だと、cron式で実行タイミングの設定が可能です。クローラで検出したテーブル情報を格納するデータベースやテーブル名の接頭辞を指定します。いくつかオプション設定があるため順に紹介します。クロール先として設定したS3パスごとに1つのテーブルしか検出しないかどうかを設定できます。デフォルトでは、S3パスごとにスキーマやファイルフォーマットなどいくつかの類似性を検証し、複数のテーブルを検出を行います。このオプションを有効化する事で、カラムなどスキーマに違いがあるけど同一テーブルとして扱いたいといった場合に便利です。インクルードパスの単一のスキーマを作成する方法クロールによってスキーマの変化を検出した場合の挙動を設定できます。設定内容は次の三種類です。スキーマの変化を検出した場合にデータカタログのメタ情報をどうするかテーブル定義を更新するカラムの追加時のみテーブル定義を更新するテーブル定義を更新しないパーティションを更新するかどうかテーブルのデータストアからオブジェクトが削除された場合にどうするかデータカタログからテーブルとパーティションを削除する削除されてもそのまま何もしないそのテーブルを廃止(deprecated)としてマークする廃止としてマークされると、そのテーブルを対象としたGlueのETLジョブは失敗する可能性があります最後にクローラの設定情報を確認して、クローラを作成します。クローラを走らせるクローラが作成できたら、クローラの一覧画面に移動して、作成したクローラを選択し走らせてみます。今回の場合だと、1分弱程度でクロールが完了しました。クロールによって意図した通り、2つのテーブルを検出できました。random_dataテーブルの情報を見てみます。カラムbだけdouble、それ以外のカラムはstringとして型が検出されています。Athenaでクエリを実行するS3をデータストアとしたテーブルはAthenaからも参照できます。Athenaでクエリを実行してみます。irisテーブルからselectしてみます。10random_dataテーブルからもselectしてみます。table.のチェックを外したままにした場合、random_tableテーブルでselectしてみるとHIVE_PARTITION_SCHEMA_MISMATCHエラーが発生しました。table.を有効化して、テーブルを削除してクロールし直す事で、エラーが発生しなくなりました。OverflowさいごにGluwのクローラについてとクローラでS3上のテーブルを検出する方法について紹介しました。型をcastする前提など型が基本stringとして格納されていれば問題ないケースでは非常に便利そうです。型がしっかり値にマッチしたスキーマが必要な場合でもカスタム分類子を定義する事で、クローラを用いることができそうです。リモート】クラスメソッドの会社説明会を開催しますクラスメソッドでは、AWS・AI・ビッグデータ・モバイルなどの技術職や営業のメンバーとして一緒にお仕事をする仲間を大募集しています。#cmdevio新型コロナウイルスの感染拡大を受け、本イベントを延期させていただくことになりました(開催時期未定)。お申し込みいただいた皆様には大変申し訳ございませんが、何卒ご理解いただけますようよろしくお願いいたします。AWSについてライトに色んな情報交換をしましょう。CAFEの他、NTTデータとセブンイレブンの取り組みや、サインポスト、Zippinなどの各社と流通・小売業との連携を業界マップに作成してみました。和樹26こんにちは植木和樹@上越オフィスです。Terminalの機能確定版がリリースされたので試してみました。PolicyのConditionにaws:CalledViaというキーが追加されました。いったキーなのかご説明します。夏目祐樹395こんにちは、CX事業本部の夏目です。MacのタッチバーのタッチIDが非常に便利なのですが、Terminalでsudoを叩かないと行けないときに使えたらなぁと思ったので、情報を共有します。臼田佳祐295ワークフロー自動化OSSのn8nをAWS環境で建てて検証してみました。非常に期待できるサービスです。Fargateの勉強をしています。使ってみたい方は参考にしてください。洋介255SnowflakeがAWSの東京リージョン上で稼働するようになりました。データを日本に置けます。芳賀健233こんにちは!猫様の忠実なるしもべ、芳賀健です。Tokyoで開催されました。クラスメソッド株式会社が運営するAWS・iOS・HTML5に関する技術情報サイトです。