ゼファーネットのロゴ

AWSGlueMarketplaceコネクタを使用してSnowflakeからAmazonS3にデータを取り込みます

日付:

今日の複雑なビジネス環境では、組織はさまざまなソースから消費し、XNUMX日を通して流れ込むデータに追いつくことが課題となっています。 データをクラウドプラットフォーム間で移植可能にし、XNUMXつ以上のデータソースから洞察を引き出して競争力を維持できるようにするアプリケーションを設計することが求められています。 この投稿では、その方法を示します AWSグルー Snowflakeとの統合により、コードをXNUMX行も記述せずに、Snowflakeに接続してデータ変換を適用するプロセスが簡素化されました。 と AWS グルースタジオ、シンプルなビジュアルインターフェイスを使用して、データを移動および統合する移行用のジョブを作成できるようになりました。 これにより、でスノーフレークコネクタをサブスクライブできます。 AWS Marketplace、スノーフレークテーブルをクエリし、データをに保存します Amazon Simple Storage Service(Amazon S3) 寄木細工の形式として。

独自のカスタムコネクタを持参するか、AWS Marketplaceとは別のコネクタを使用する場合は、このブログの手順に従ってください SnowflakeとAWSGlueを使用したデータ変換の実行。 この投稿では、新しいものを使用します スノーフレーク用AWSGlueコネクタ JDBCドライバーをインストールせずにSnowflakeとシームレスに接続します。 取り込んだデータを検証するために、Amazon Redshift Spectrumを使用して外部テーブルを作成し、AmazonS3でデータをクエリします。 Amazon Redshift Spectrumを使用すると、データをAmazon Redshiftテーブルにロードしなくても、AmazonS3のファイルからデータを効率的にクエリおよび取得できます。

ソリューションの概要

AWSGlueがデータを取り込むためにSnowflakeに接続する方法のアーキテクチャ図を見てみましょう。

前提条件

始める前に、次のものがあることを確認してください。

  1. Snowflakeのアカウント、具体的には、照会するテーブルへのアクセス許可を持つサービスアカウント。
  2. AWS IDおよびアクセス管理 (IAM)AWSGlueおよびAmazonRedshiftサービスのロールとポリシーを作成するための権限。 構成するには、の手順に従ってください AWSGlueのIAM権限の設定 & AmazonRedshiftのIAMロールを作成します.
  3. AmazonRedshiftサーバーレスエンドポイント。 構成していない場合は、次の手順に従ってください。 AmazonRedshiftサーバーレス分析.

AmazonS3VPCエンドポイントを設定する

最初のステップとして、 AmazonS3VPCエンドポイント AWS GlueがプライベートIPアドレスを使用して、パブリックインターネットにアクセスすることなくAmazonS3にアクセスできるようにします。 次の手順を実行します。

  1. AmazonVPCコンソールを開きます。
  2. 左側のナビゲーションペインで、[エンドポイント]を選択します。
  3. [エンドポイントの作成]を選択し、手順に従ってゲートウェイタイプのAmazonS3VPCエンドポイントを作成します。

次に、AWSSecretsManagerを使用してシークレットを作成します

  1. AWS Secrets Managerコンソールで、[ 新しい秘密を保存する.
  2. [シークレットタイプ]で、[その他のタイプのシークレット]を選択します。
  3. 次のようにキーを入力します sfUser Snowflakeユーザー名としての値。
  4. 次のようにキーを入力します sfPassword Snowflakeユーザーパスワードとしての値。
  5. 選択する Next.
  6. 秘密に名前を付ける snowflake_credentials 残りの手順に従って、秘密を保存します。

AWS MarketplaceSnowflakeConnectorをサブスクライブする

コネクタをサブスクライブするには、手順に従って、Snowflake Connector forAWSGlueをアクティブ化します。 このネイティブコネクタは、AWSGlueジョブを接続してSnowflakeからデータを抽出するプロセスを簡素化します

  1. に移動します AWSGlue用のSnowflakeコネクタ AWSマーケットプレイスで。
  2. 選択する 購読を続ける.
  3. 利用規約、価格、その他の詳細を確認してください。
  4. 選択する 構成に進む.
  5. 配送方法は、配送方法を選択してください。
  6. ソフトウェアバージョンについては、ソフトウェアバージョンを選択してください
  7. 選択する 起動を続行.
  8. [使用方法]で、[ AWSGlueStudioでGlueコネクタをアクティブ化する。 AWSGlueStudioにリダイレクトされます。
  9. [名前]に、接続の名前を入力します(たとえば、snowflake_s3_glue_connection)。
  10. 必要に応じて、VPC、サブネット、およびセキュリティグループを選択します。
  11. AWSシークレットの場合は、 snowflake_credentials.
  12. 選択する 接続を作成する.

接続が正常に作成されたことを示すメッセージが表示され、接続がAWSGlueStudioコンソールに表示されます。

SnowflakeJDBC接続用にAWSGlueを構成する

次に、以下の手順に従ってデータを抽出することにより、AWSGlueジョブを構成します。

  1. AWS Glueコンソールで、左側のナビゲーションペインで[AWSGlueStudio]を選択します。
  2. AWS Glue Studioコンソールで、左側のナビゲーションペインで[ジョブ]を選択します。
  3. ソースとターゲットを含むビジュアル」と選択してSnoを選択します
    ソースとして AWS Glue 3.0、ターゲットとして Amazon S3 用の wflake コネクタ。
  4. ジョブの名前を入力します。
  5. [ジョブの詳細]で、IAMロールを選択します。
  6. 必要なAWSGlueおよびAWSSecretsManagerポリシーをまだ持っていない場合は、新しいIAMロールを作成します。
  7. [ビジュアル]で、[ データソース–接続 ノードを選択し、作成した接続を選択します。
  8. 接続オプションで、以下に示すように、クエリを使用してキーと値のペアを作成します。 ご了承ください CUSTOMER のテーブル SNOWFLAKE_SAMPLE_DATA この移行ではデータベースが考慮されます。 Snowflake Schemaをインストールすると、このテーブルはプリロードされます(1.5万行)。

    キー
    クエリー SELECT
    C_CUSTKEY,
    C_NAME,
    C_ADDRESS,
    C_NATIONKEY,
    C_PHONE,
    C_ACCTBAL,
    C_MKTSEGMENT,
    C_COMMENT
    FROM
    SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.CUSTOMER
    sfURL MXA94638.us-east-1.snowflakecomputing.com
    sfデータベース SNOWFLAKE_SAMPLE_DATA
    sf倉庫 COMPUTE_WH

  9. 出力スキーマ セクションで、以下に示すように、ソーススキーマをキーと値のペアとして指定します。
  10. 選択する 変換-ApplyMapping 次の変換の詳細を表示するノード。

  11. 選択する データターゲットのプロパティ– S3 ノードを作成し、以下に示すようにS3バケットの詳細を入力します。
  12. 選択する Save.

ジョブを保存すると、次のスクリプトが生成されます。 前述のように、アカウント情報とクレデンシャルがAWSSecretsManagerに保存されていることを前提としています。

import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job args = getResolvedOptions(sys.argv, ["JOB_NAME"])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args["JOB_NAME"], args) # Script generated for node Snowflake Connector for AWS Glue 3.0
SnowflakeConnectorforAWSGlue30_node1 = glueContext.create_dynamic_frame.from_options( connection_type="marketplace.spark", connection_options={ "query": "SELECT C_CUSTKEY,C_NAME,C_ADDRESS,C_NATIONKEY,C_PHONE,C_ACCTBAL,C_MKTSEGMENT,C_COMMENT FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.CUSTOMER", "sfUrl": "MXA94638.us-east-1.snowflakecomputing.com", "sfDatabase": "SNOWFLAKE_SAMPLE_DATA", "sfWarehouse": "COMPUTE_WH", "connectionName": "snowflake_s3_glue_connection", }, transformation_ctx="SnowflakeConnectorforAWSGlue30_node1",
) # Script generated for node ApplyMapping
ApplyMapping_node2 = ApplyMapping.apply( frame=SnowflakeConnectorforAWSGlue30_node1, mappings=[ ("C_CUSTKEY", "decimal", "C_CUSTKEY", "decimal"), ("C_NAME", "string", "C_NAME", "string"), ("C_ADDRESS", "string", "C_ADDRESS", "string"), ("C_NATIONKEY", "decimal", "C_NATIONKEY", "decimal"), ("C_PHONE", "string", "C_PHONE", "string"), ("C_ACCTBAL", "decimal", "C_ACCTBAL", "decimal"), ("C_MKTSEGMENT", "string", "C_MKTSEGMENT", "string"), ("C_COMMENT", "string", "C_COMMENT", "string"), ], transformation_ctx="ApplyMapping_node2",
) # Script generated for node S3 bucket
S3bucket_node3 = glueContext.write_dynamic_frame.from_options( frame=ApplyMapping_node2, connection_type="s3", format="glueparquet", connection_options={"path": "s3://sf-redshift-po/test/", "partitionKeys": []}, format_options={"compression": "snappy"}, transformation_ctx="S3bucket_node3",
) job.commit()

  1. 選択する ラン ジョブを実行します。

ジョブが正常に完了すると、実行ステータスは次のように変更されます。 成功した.

次のスクリーンショットは、データがAmazonS3に書き込まれたことを示しています。

クエリアマAmazonRedshiftSpectrumを使用したゾーンS3データ

AmazonRedshiftSpectrumのデータをクエリしてみましょう

  1. Amazon Redshiftコンソールで、AWSリージョンを選択します。
  2. 左側のナビゲーションペインで、[クエリエディタ]を選択します。
  3. 以下に示すcreateexternaltableDDLを実行します。
    CREATE EXTERNAL TABLE "spectrum_schema"."customer"
    (c_custkey decimal(10,2),
    c_name varchar(256),
    c_address varchar(256),
    c_nationkey decimal(10,2),
    c_phone varchar(256),
    c_acctbal decimal(10,2),
    c_mktsegment varchar(256),
    c_comment varchar(256))
    stored as parquet
    location 's3://sf-redshift-po/test'; 

  1. で選択クエリを実行します CUSTOMER 列で番号の横にあるXをクリックします。
SELECT count(c_custkey), c_nationkey FROM "dev"."spectrum_schema"."customer" group by c_nationkey

考慮事項

AWSGlueクローラーはSnowflakeと直接連携しません。 これは、AWSGlueETLジョブに参加または接続されている他のAWSデータソースに使用できるネイティブ機能です。 代わりに、この投稿の前半で示したように、スクリプトで接続を定義できます。

この投稿で取り上げるSnowflakeソーステーブルは、構造化データ型にのみ焦点を当てているため、Snowflakeの半構造化または非構造化データ型(バイナリ、varbinary、およびバリアント)は範囲外です。 ただし、次のようなAWSGlue関数を使用できます。 関係化 ネストされたスキーマデータを半正規化された構造にフラット化する、または AmazonRedshiftスペクトラム これらのデータ型をサポートします。

まとめ

この投稿では、AWS GlueでSnowflake接続パラメーターを定義し、SnowflakeのAWSネイティブコネクターを使用してAWS GlueからSnowflakeに接続し、Amazon S3に移行し、RedshiftSpectrumを使用してAmazonS3のデータをクエリしてビジネスニーズを満たす方法を学びました。

以下のコメントセクションでのご意見やご質問をお待ちしております


著者について

シンドゥ・アチュタン アマゾンウェブサービスのグローバルファイナンシャルサービスのデータアーキテクトです。 彼女は顧客と協力して、Amazon Glue、Amazon Redshift、AWS Lambda、およびその他のサービスの分析ソリューションのアーキテクチャガイダンスを提供しています。 仕事以外では、彼女はDIY家で、長いトレイルに行き、ヨガをするのが好きです。

シャヨン・サニャル AWSのデータベースを専門とするシニアソリューションアーキテクトです。 彼の日々の仕事は、AWSのお客様がクラウド上でスケーラブルで安全でパフォーマンスが高く堅牢なデータベースアーキテクチャを設計するのを支援することを可能にします。 仕事以外では、彼が次のハーフマラソンに向けてハイキング、旅行、トレーニングをしているのを見つけることができます。

スポット画像

最新のインテリジェンス

スポット画像

私たちとチャット

やあ! どんな御用でしょうか?