LoginSignup
1
0

Snowflake→AWS Glue→SnowflakeのETL

Posted at

はじめに

AWS GlueをETLとしてGUI操作でSnowflake上にあるテーブルのデータを加工してSnowflakeの別のテーブルに反映できることを確認した記録です。

前提

検証の前提として以下を実施済みの状態にしています。

  • GlueからSnowflakeにアクセスできる(参考:Snowflake 接続
    • Snowflake上で以下を実施
      • ロール作成
      • ウェアハウスへのUSAGEアクセス権の付与
      • データベースへのUSAGEアクセス権の付与
      • スキーマへのアクセス権の付与
      • テーブルへの権限の付与
      • ユーザーの作成
      • ユーザーへのロールの付与
      • AWS Secrets Managerで、Snowflakeの認証情報(ユーザー名、パスワード)を使用してシークレットを作成

こちらの記事にGlueからSnowflakeに接続できるまでを記載しています。
 AWS GlueでSnowflakeと接続するために必要なこと

ゴール

image.png

やってみた

  • Snowflake上でテーブル・データを準備

    • テーブル「MYTABLE」を作成
      image.png

    • テーブル「MYTABLE」にデータを準備
      image.png

    • テーブル「MYTABLE2」を作成
      image.png
      (データは挿入せずレコードは空のまま)

  • AWS Glueでジョブ作成

    • ソースノードの作成
      image.png

    • 変換ノードの作成
      image.png
      SQL Queryノードを使用してWHERE条件で抽出対象レコードを絞っています。

    • ターゲットノードの作成
      image.png

  • AWS Glueでジョブの保存と実行

    • ジョブの保存
      image.png

    • ジョブの実行
      image.png

    • ジョブの実行結果の確認
      image.png

  • Snowflake上でテーブルの内容を確認
    image.png
    →できました!

注意点(つまづいたところ)

前述の例では変換ノードとして「SQL Query」を使用していますが、もともと「Filter」で実現しようとしていました。しかし、何度やっても同じ事象に阻まれて実現できませんでした。これがバグなのか、自分のミスなのかの判別がついていませんが、再現する事象を以下に記載しておきます。

  • AWS Glueでジョブ作成

    • ソースノードの作成
      image.png

    • 変換ノードの作成
      image.png
      ここでFilterノードを使用しています。「NO=1」というフィルター条件を設定しています。

    • ターゲットノードの作成
      image.png

  • AWS Glueでジョブの実行結果確認
    image.png

エラーメッセージ
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

何回試しても同じようにエラーになります。
スクリプトを見ると以下のようになっています。
image.png
image.png
45行目のところでNOがVARCHARになっており、この時点で値が数値であるのに対してNO列をGlueが文字列型と認識しているように見えます。
これが原因なのか、なぜこうなるのかはわかっていませんが、遭遇した事象として記録しておきます。

まとめ

AWS Glueを使用してSnowflakeにあるテーブルからデータを抽出・加工してSnowflake上のテーブルに反映することができました。

1
0
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
1
0