はじめに
AWS GlueをETLとしてGUI操作でSnowflake上にあるテーブルのデータを加工してSnowflakeの別のテーブルに反映できることを確認した記録です。
前提
検証の前提として以下を実施済みの状態にしています。
- GlueからSnowflakeにアクセスできる(参考:Snowflake 接続)
- Snowflake上で以下を実施
- ロール作成
- ウェアハウスへのUSAGEアクセス権の付与
- データベースへのUSAGEアクセス権の付与
- スキーマへのアクセス権の付与
- テーブルへの権限の付与
- ユーザーの作成
- ユーザーへのロールの付与
- AWS Secrets Managerで、Snowflakeの認証情報(ユーザー名、パスワード)を使用してシークレットを作成
- Snowflake上で以下を実施
こちらの記事にGlueからSnowflakeに接続できるまでを記載しています。
AWS GlueでSnowflakeと接続するために必要なこと
ゴール
やってみた
-
Snowflake上でテーブル・データを準備
-
AWS Glueでジョブ作成
-
AWS Glueでジョブの保存と実行
注意点(つまづいたところ)
前述の例では変換ノードとして「SQL Query」を使用していますが、もともと「Filter」で実現しようとしていました。しかし、何度やっても同じ事象に阻まれて実現できませんでした。これがバグなのか、自分のミスなのかの判別がついていませんが、再現する事象を以下に記載しておきます。
-
AWS Glueでジョブ作成
Error Category: UNCLASSIFIED_ERROR; An error occurred while calling o119.pyWriteDynamicFrame. Status of query associated with resultSet is FAILED_WITH_ERROR. Numeric value 'aaa' is not recognized
何回試しても同じようにエラーになります。
スクリプトを見ると以下のようになっています。
45行目のところでNOがVARCHARになっており、この時点で値が数値であるのに対してNO列をGlueが文字列型と認識しているように見えます。
これが原因なのか、なぜこうなるのかはわかっていませんが、遭遇した事象として記録しておきます。
まとめ
AWS Glueを使用してSnowflakeにあるテーブルからデータを抽出・加工してSnowflake上のテーブルに反映することができました。