1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

HULFT Squareを使用してSnowflakeにデータをロードしてみた(Snowpipe編)

Last updated at Posted at 2024-05-23

はじめに

こんにちは、すぎもんです:smile:

企業内に点在する大量のデータを集約・蓄積し、データの統合と分析を可能にするため、データウェアハウス(DWH)の必要性が高まっています。
DWHを活用すれば、必要なデータを統合して分析を行えるため、業務の効率化に繋げられます。

Snowflakeとは

Snowflake はクラウド上に展開で実行されるDWHです。
Amazon Web Services、Microsoft Azure、Google Cloud Storage といったクラウドサービスで使用の基盤上に構築できます。

データレイクとして想定するAWS S3等クラウドサービスのストレージにあるファイルをロード(読み込み)、およびアンロード(書き出し)を行うことができます。

Snowpipeとは

SnowpipeはSnowflakeの継続的なデータロードの仕組みです。COPYコマンドを利用した一括ロードとは異なり、外部ステージに置かれたファイルを自動的、継続的にロードすることができます。

今回やること

HULFT Squareを利用してAWS S3へファイル送信し、Snowpipeを用いて自動的にS3→Snowflakeへデータがロードされる確認します。

image.png
①HULFT Squareのスクリプトにより、ファイルをS3上に転送します。
②S3バケットのイベント通知機能によりファイルの存在が通知され、通知後SnowflakeからCOPYコマンドが自動実行されます。

実行環境準備

ここからは下記のイメージ図に従って、SnouwflakeとAWSの設定を進めていきます。

Snowpipeの処理とデータの流れ

image.png

AWS S3に置かれたファイルをSnowpipeでロードするためには外部ステージ設定が必要です。
外部ステージの設定方法については以前に記述した下記記事をご参照下さい。
HULFT Squareを使用してSnowflakeにデータをロードしてみた
今回の検証では上記ブログで作成した外部ステージ 「HSQ_EXT_STAGE」 を使用します。

1.Snowflake側設定

まずはSnowpipeを作成していきます。

1-1.「外部ステージ」名の確認

SnowflakeのWebコンソールSnowsightで以下のSQLを実行して、Snowpipeで指定する「外部ステージ」の名称を確認します。

select stage_schema,
       stage_name,
       stage_url,
       stage_type
  from TEST.information_schema.stages;

image.png

確認した外部ステージ名は「1-2.Snowpipe作成」で使用します。

1-2.Snowpipe作成

以下のSQLを実行して、Snowpipeを作成します。

create pipe <作成するSnowpipe名称> auto_ingest=true as
  copy into <ロード先となるテーブル>
  from @<外部ステージ名>;

image.png

1-3.SQS情報の取得

S3バケットのイベント通知の設定に必要なSQSのarnレコードを下記 show pipes コマンドで取得します。

show pipes;

image.png

取得したarnレコードは「2-2.イベント通知作成」で使用します。

2.AWS S3設定

AWS S3がファイル受信した際にSnowflake側へデータを自動的に連携するための設定をしていきます。

2-1.S3 URLを取得

AWSのS3コンソールを開き、「外部ステージ」の参照先フォルダのS3 URIを取得します。

以下の赤字のプレフィックスレコードのみを「2-2.イベント通知作成」で使います。

image.png

2-2.イベント通知作成

S3バケットへイベント通知を作成します。「プロパティ」を開き、「イベント通知」を作成していきます。

image.png

image.png

image.png

image.png

image.png

検証手順

1.実行前準備

1-1.実行前テーブル確認

書き込み対象テーブルの定義は下記の通りです

create or replace TABLE TEST.PUBLIC.CUSTOMER_SP (
	C_CUSTKEY NUMBER(38,0),
	C_NAME VARCHAR(25),
	C_ADDRESS VARCHAR(40),
	C_NATIONKEY NUMBER(3,0),
	C_PHONE VARCHAR(18),
	C_ACCTBAL NUMBER(6,2),
	C_MKTSEGMENT VARCHAR(25),
	C_COMMENT VARCHAR(400)
);

1-2.読み込みファイル配置

HULFT Squareのストレージ上に 「data_0_0_0.csv」 を用意しました。

[配置ディレクトリ] 「Personal/demo/Snowpipe」
[レコード数] 30000
[データサイズ] 4.64 MB

image.png

1-3.AWSコネクション準備

HULFT SquareからAWS s3へ接続用のコネクションを用意します。

今回は作成済みの下記コネクションを使用します。

image.png

今回の検証ではHULFT SquareからSnowflakeへの接続設定は必要ありません。

image.png

2.検証実施

2-1.スクリプト作成

HULFT Squareのプロジェクトは下記ブログで作成したものを使用します。
HULFT Squareを使用してSnowflakeにデータをロードしてみた
[プロジェクト] Snowflakeload

[スクリプト名] 任意の名前、今回はSnowpipe連携を入力して作成していきます。

image.png

[ツールパレット] より [クラウド>Amazon S3>ファイル/フォルダ書き込み] アイコンを選択しドラッグ&ドロップしてスクリプトキャンバスへ配置します。

image.png

image.png

[名前] 任意の名前、今回はSnowpipe連携を入力
[接続先] 今回は用意したAmazon S3接続コネクションを選択
[ローカルディレクトリ] 1-2.読み込みファイル配置でファイルを格納したフォルダPersonal/demo/
[ローカルファイル/ディレクトリ名] 1-2.読み込みファイル配置でファイルを格納したフォルダSnowpipe
[バケット名]  Snouwflake「外部ステージ」の参照先S3バケット名称 今回は hsq-snowflaketest
[フォルダパス] 連携先S3バケット配下のフォルダ名 今回は /data

同一ファイル名での連続的な連携が想定される場合は [ファイルが存在する場合は上書きする] にチェックが必要です。

下記のように [start] から [END] までドラッグ&ドロップでプロセスフローの矢印を繋ぐとAWS S3へのファイルアップロード用スクリプトの完成です。

image.png

2-2.検証結果確認

HULFT Squareデザイナ画面からスクリプトを実行すると正常終了が確認できます。

image.png

また、SnowsightからもHSQパイプで正常にデータがロードできたことが確認できます。

image.png

おわりに

いかがだったでしょうか。
HULFT Squareを利用してAWS S3へファイル送信し、Snowpipeを用いてSnowflakeへのデータロードを実施できることが確認できました。

HULFT SquareはHULFTと連携してのファイル受信が可能なため、オンプレミス環境からHULFTにて集信したファイルをHULFT SquareのETL機能でSnowflakeのテーブルに合わせた形へ加工した後に、Snowpipeで自動的にデータロードするという処理も実現可能です。

当ブログが下記ブログと合わせて、SnowflakeとHULFT Squareとの連携構築の一助にもなれば幸いです。

HULFT Squareを使用してSnowflakeにデータをロードしてみた

ここまで読んでいただきありがとうございました。それでは、また!

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?