Snowflake から BigQuery への移行

このドキュメントでは、Snowflake から BigQuery にデータを移行する方法に関する技術的背景をご紹介します。Snowflake と BigQuery の基本的な違いについて説明します。また、次のような移行を成功させるためのガイダンスも提供します。

  • どのようなスキーマ変更が必要か
  • 利用可能な移行ツールとオプション
  • データを移行する方法(サンプル エクスポート プロセスを使用)

用語

このドキュメントでは、Snowflake と BigQuery の用語を使用して、各プロダクトが提供する機能について説明します。次の表は、Snowflake の用語とそれに対応する BigQuery の用語を示しています。

Snowflake BigQuery
データベース データセット
スキーマ スキーマ
セッション固有の一時的なテーブル 匿名テーブルまたは一時的なテーブル
表示 表示
安全なビュー 承認済みビュー
仮想ウェアハウス 予約
マテリアライズド ビュー マテリアライズド ビュー
パーティショニングと同等のものはなし(micro-partitioning が使用されているため) パーティショニング
クラスタリング クラスタリング
セキュリティが強化されたユーザー定義関数(UDF) 認可済みの UDF

アーキテクチャの比較

Snowflake と BigQuery はどちらも分析データ ウェアハウスですが、アーキテクチャにはいくつかの違いがあります。

Snowflake のアーキテクチャは、従来の共有ディスク データベース アーキテクチャとシェアードナッシング データベース アーキテクチャのハイブリッドです。シェアードナッシング アーキテクチャの場合と同様に、Snowflake のデータは独立したクラウド オブジェクト ストレージ サービスで管理されます。共有ディスク アーキテクチャの場合と同様に、Snowflake のクエリでは専用のコンピューティング クラスタが使用されます。Snowflake では各クラスタがデータセット全体のキャッシュ部分を管理し、クエリのパフォーマンスを高速化します。 詳細については、Snowflake アーキテクチャをご覧ください。

BigQuery のアーキテクチャは、従来のノードベースのクラウド データ ウェアハウス ソリューションや MPP システムと大きく異なります。ストレージとコンピューティングが分離しているので、それぞれオンデマンドでスケーリングできます。詳細については、BigQuery の仕組みをご覧ください。

ユーザー インターフェースの比較

Snowflake ウェブ インターフェースは、Snowflake コマンドライン インターフェース(CLI)をミラーリングしています。どちらのインターフェースでも、次のことができます。

  • データベースを管理する
  • ウェアハウスを管理する
  • クエリとワークシートを管理する
  • クエリ履歴を表示する

このウェブ インターフェースでは、Snowflake のパスワードとユーザー設定も管理できます。

Snowflake CLI クライアントは SnowSQL を使用して Snowflake に接続し、SQL クエリなどのオペレーションを実行します。

BigQuery インターフェースは Google Cloud Console に組み込まれ、表示可能な BigQuery リソースのリストが含まれています。

  • [SQL ワークスペース] セクションには、データセット、テーブル、ビュー、その他の BigQuery リソースが表示されます。ここで、クエリの作成と実行、テーブルとビューの操作、BigQuery ジョブ履歴の確認、その他の一般的な BigQuery タスクを行うことができます。
  • [データ転送] セクションには、BigQuery Data Transfer Service のページが表示されます。
  • [スケジュールされたクエリ] セクションには、スケジュールされたクエリが表示されます。
  • [容量管理] セクションには、スロットのコミットメント、予約、予約割り当てが表示されます。
  • [BI Engine] セクションには、BigQuery BI Engine ページが表示されます。

BigQuery には、Python ベースのコマンドライン ツールもあります。詳細については、bq コマンドライン ツールの使用をご覧ください。

セキュリティ

Snowflake から BigQuery に移行する場合、セキュリティの扱いについて、Google Cloud(特に BigQuery)が一般的に Snowflake とどのように違うかを考慮する必要があります。

Snowflake には、次のようなさまざまなセキュリティ関連の機能があります。

  • ネットワークとサイトへのアクセス
  • アカウントとユーザーの認証
  • オブジェクトのセキュリティ
  • データ セキュリティ
  • セキュリティ検証

Snowflake のセキュリティは、クラウド プロバイダの機能に基づいています。オブジェクトへのアクセス、オブジェクト操作、アクセス制御ポリシーを作成または変更できるユーザーをきめ細かく制御できます。

BigQuery で Snowflake のアクセス制御権限に相当するものは、Google Cloud の Identity and Access Management(IAM)ロールです。これらの権限により、リソースに対して許可されている操作が決まります。権限は Google Cloud レベルで適用されます。

暗号化

Snowflake では列レベルのセキュリティが Enterprise エディションでサポートされ、顧客管理の暗号鍵が Business Critical エディションでサポートされます。エディションによって料金が異なります。BigQuery では、すべての機能と高度なセキュリティ対策が追加費用なしで標準機能として提供されています。

Snowflake では、エンドツーエンドの暗号化が自動的に実行され、保存されているすべてのデータが暗号化されます。Google Cloud でも、保存時転送時にすべてのデータがデフォルトで暗号化されるため、同じ機能が提供されます。

Snowflake Business Critical エディションと同様に、BigQuery は、Cloud Key Management Service で鍵暗号鍵を制御および管理するユーザー向けの顧客管理の暗号鍵をサポートしています。BigQuery では列レベルの暗号化も使用できます。Google Cloud での暗号化の詳細については、Google Cloud での保存時の暗号化Google Cloud での転送データの暗号化をご覧ください。

ロール

ロールは、保護可能なオブジェクトに対する権限の付与や取り消しができるエンティティです。

Snowflake では次の 2 種類のロールがサポートされます。

  • システム定義のロール: これらのロールはシステムとセキュリティに関する権限で構成され、アカウント管理に関連する権限を使用して作成されます。
  • カスタムロール:これらのロールは、SECURITYADMIN ロールまたは CREATE ROLE 権限を持つ任意のロールを使用して作成できます。Snowflake の各カスタムロールは権限で構成されています。

IAM では、権限はロールにグループ化されます。IAM には次の 3 種類のロールがあります。

  • 基本ロール: オーナー、編集者、閲覧者のロールが含まれます。Google Cloud コンソール、Identity and Access Management API、または gcloud CLI を使用して、これらのロールをプロジェクトまたはサービスのリソースレベルで適用できます。一般に、セキュリティを最も強力にするために、BigQuery 固有のロールを使用して最小権限の原則に従うことをおすすめします。
  • 事前定義ロール: プロダクト(BigQuery など)内の機能に対するよりきめ細かなアクセス権を提供し、一般的なユースケースとアクセス制御パターンをサポートすることを目的としています。
  • カスタムロール: ユーザー指定の権限で構成されます。

アクセス制御

Snowflake を使用すると、ロールを別のロールに付与して、ロールの階層を作成できます。IAM はロール階層をサポートしませんが、リソース階層を実装します。IAM 階層には、組織レベル、フォルダレベル、プロジェクト レベル、リソースレベルが含まれます。IAM ロールは階層の任意のレベルで設定でき、リソースは親リソースのすべてのポリシーを継承します。

Snowflake と BigQuery はどちらもテーブルレベルのアクセス制御をサポートしています。テーブルレベルの権限により、データまたはビューにアクセスできるユーザー、グループ、サービス アカウントが決まります。ユーザーに完全なデータセットへのアクセス権を与えることなく、特定のテーブルまたはビューへのアクセス権を付与できます。

Snowflake は、行レベルのセキュリティ列レベルのセキュリティも使用します。

BigQuery では、IAM によってテーブルレベルのアクセス制御が行われます。よりきめ細かなアクセスを行うには、列レベルのアクセス制御または行レベルのセキュリティを使用します。このタイプの制御では、ポリシータグまたは型ベースのデータ分類を使用して、機密性の高い列に対してきめ細かいアクセスを行います。

承認済みビューを作成して、基になるテーブルに対する読み取りアクセス権がないユーザーでもビューに対するクエリを実行できるように、きめ細かいアクセス制御を行うことができます。

移行時に考慮すべき事項

BigQuery に直接移植できない Snowflake の機能があります。たとえば、BigQuery では次のシナリオに対する組み込みサポートは提供されていません。これらのシナリオでは、Google Cloud で他のサービスを使用する必要があります。

  • タイムトラベル: BigQuery では、タイムトラベルを使用して過去 7 日以内の任意の時点のデータにアクセスできます。7 日を超えるデータを使用する必要がある場合は、定期的にスケジュール設定されたスナップショットのエクスポートを検討してください。Snowflake では、事前定義された期間内の任意の時点の履歴データ(変更または削除されたデータ)にアクセスできます。この期間は 0 から 90 日の任意の値に設定できます。

  • ストリーム:BigQuery は Datastream変更データ キャプチャ(CDC)をサポートします。Debezium などの CDC ソフトウェアを使用して、Dataflow で BigQuery にレコードを書き込むこともできます。BigQuery を使用して CDC パイプラインを手動で設計する方法の詳細については、データ ウェアハウスの BigQuery への移行: データ キャプチャ(CDC)の変更をご覧ください。Snowflake では、ストリーム オブジェクトが、テーブルに対して行われたデータ操作言語の変更と、各変更に関するメタデータを記録して、変更されたデータに対してアクションを実行できるようにします。

  • タスク: BigQuery では、クエリとストリームのスケジュール設定、または Datastream を使用したクエリへのストリーム統合が可能です。Snowflake はタスクとテーブル ストリームを組み合わせて、継続的な抽出、読み込み、転送のワークフローを実行し、最近変更されたテーブルの行を処理します。

  • 外部関数: BigQuery では、Cloud Functions を介した外部関数呼び出しがサポートされています。ただし、SQL UDF などのユーザー定義関数(UDF)を使用できますが、これらの関数は BigQuery の外部では実行されません。Snowflake では、外部関数が Snowflake の外部で実行されるコードを呼び出します。たとえば、リモート サービスに送信された情報は、通常はプロキシ サービスを介してリレーされます。

Snowflake から BigQuery にデータを移行する

このセクションでは、データ ウェアハウスの BigQuery への移行: 移行の対象と方法で概説されているフレームワークに基づいて、Snowflake から BigQuery への移行を構成して開始する方法について説明します。

アーキテクチャ

移行を開始するには、Snowflake と BigQuery の両方を実行します。次の図は、既存のオペレーションへの影響が最小限になるアーキテクチャを示しています。品質管理されたクリーンなデータを転送することで、ワークロードを BigQuery にオフロードするとともに、既存のツールとプロセスを再利用できます。古いバージョンに対してレポートとダッシュボードを検証することもできます。ただ、OLAP データは冗長な場所に保持されているため、この運用は費用対効果が高くありません。また、処理時間が長くなります。

  • ポイント 1 は、Snowflake から Cloud Storage へのデータ移動を示しています。
  • ポイント 2 は、BigQuery へのデータの永続性を示しています。
  • ポイント 3 は、エンドユーザーへのデータの送信方法を示しています。

古いイテレーションに対してレポートとダッシュボードを検証できます。詳細は、データ ウェアハウスの BigQuery への移行: 確認と検証をご覧ください。

Snowflake から BigQuery への継続的な移行。

データ ウェアハウス移行の最終アーキテクチャでは、ソースシステムのすべてのデータが Google Cloud に直接保持されます。ソースシステムの数と複雑さに応じて、優先度、相互依存関係、統合のリスク、またはその他のビジネス要因に基づいてソースシステムを 1 つずつ処理することで、このアーキテクチャの導入をさらに細かく分割できます。

次の図は、データ パイプラインの移行と Google Cloud への取り込みを前提としています。

  • ポイント 1 は、同期統合ポイントと非同期統合ポイントの両方を示しています。同期統合は、たとえば、フローの一部として明示的なユーザー アクションを必要とするユースケースに対応する場合に、データソースと App Engine 間で行われます。
  • ポイント 2 は、大量の同時イベントデータに対する Pub/Sub の使用を示しています。
  • ポイント 3 は、データの性質に応じて、1 つ以上の Google Cloud プロダクトを使用するデータの永続性を示しています。
  • ポイント 4 は、BigQuery に対する抽出、変換、読み込み(ETL)プロセスを示しています。

Snowflake から BigQuery への移行後。

Cloud Storage 環境を準備する

Google Cloud では、他の ETL ツールを使用して、いくつかの方法で BigQuery にデータを転送できます。たとえば、次の方法があります。

  1. ソースからデータを抽出する: ソースから抽出したファイルを、オンプレミス環境のステージング ストレージにコピーします。詳細は、データ ウェアハウスの BigQuery への移行: ソースデータの抽出をご覧ください。

  2. ステージング Cloud Storage バケットにデータを転送する: ソースからデータの抽出が完了したら、Cloud Storage の一時バケットに転送します。転送するデータの量と利用可能なネットワーク帯域幅に応じて、いくつかのオプションを使用できます

    BigQuery データセットと外部データソースまたは Cloud Storage バケットの場所を同じリージョンにする必要があります。Cloud Storage からデータを読み込む場合の地理的位置に関する注意事項について詳しくは、データのバッチ読み込みをご覧ください。

  3. Cloud Storage バケットから BigQuery へのデータの読み込み: データは、宛先に近い Cloud Storage バケットに配置されます。BigQuery にデータをアップロードする方法はいくつかあります。これらのオプションは、データを変換する必要がある量によって異なります。また、ETL の手法を使用して、BigQuery 内でデータを変換することもできます。

    JSON ファイル、Avro ファイル、CSV ファイルからデータを一括でインポートすると、BigQuery がスキーマを自動検出するため、事前に定義する必要はありません。EDW ワークロードのスキーマ移行プロセスの詳細については、スキーマとデータの移行プロセスをご覧ください。

サポートされるデータ型、プロパティ、ファイル形式

Snowflake と BigQuery ではほとんどの同じデータ型をサポートしていますが、別の名前を使用している場合があります。Snowflake と BigQuery でサポートされているデータ型の一覧については、Snowflake SQL 変換リファレンスの「データ型」セクションをご覧ください。バッチ SQL 変換機能を使用して変換することもできます。BigQuery でサポートされているデータ型については、標準 SQL のデータ型をご覧ください。

Snowflake では次のファイル形式でデータをエクスポートできます。形式は BigQuery に直接読み込むことができます。

スキーマの変更

BigQuery への移行のスキーマを計画している場合は、まずスキーマをそのまま移行することをおすすめします。BigQuery は、スタースキーマSnowflake スキーマなどの幅広いデータモデル デザイン パターンをサポートしています。このサポートのために、アップストリーム データ パイプラインを新しいスキーマ用に更新する必要はありません。また、自動移行ツールを使用してデータとスキーマを転送できます。

スキーマの更新

データを BigQuery に移動した後、スキーマ定義への列の追加や、列のモードの REQUIRED から NULLABLE への緩和など、いつでもスキーマを更新できます。

BigQuery ではテーブル名に大文字と小文字を区別する命名規則を使用しますが、Snowflake では大文字と小文字を区別しない命名規則を使用します。この規則により、Snowflake に存在するテーブル名の不整合を見直し、BigQuery への移行時に発生する不整合を修正する必要がある場合があります。スキーマの変更について詳しくは、テーブル スキーマの変更をご覧ください。

BigQuery では、一部のスキーマの変更が直接サポートされていないため、次のような手動の回避策が必要です。

  • 列の名前を変更する。
  • 列のデータ型を変更する。
  • 列のモードの変更(REQUIRED 列の NULLABLE への緩和の場合を除く)。

これらのスキーマ変更を手動で実装する方法について詳しくは、テーブル スキーマの手動変更をご覧ください。

最適化

スキーマ移行後は、パフォーマンスをテストし、その結果に基づいて最適化を行うことができます。たとえば、パーティショニングを導入して、データの管理とクエリを効率的に行うことができます。BigQuery のパーティショニングは、パーティションと呼ばれるセグメントに分割された特殊なテーブルを意味します。パーティショニングは、データの読み込み時に自動的に行われる Snowflake のマイクロ パーティショニングとは異なります。BigQuery のパーティショニングでは、取り込み時間、タイムスタンプ、整数の範囲でパーティショニングすることで、クエリのパフォーマンスとコストを制御できます。詳細については、パーティション分割テーブルの概要をご覧ください。

クラスタ化テーブル

クラスタ化テーブルは、別のスキーマ最適化です。BigQuery では、Snowflake と同様にテーブルをクラスタ化し、テーブルのスキーマ内の 1 つ以上の列の内容に基づいてテーブルのデータを自動的に編成できます。BigQuery は指定した列を使用して、関連するデータを同じ場所に配置します。クラスタリングは、フィルタ句を使用するクエリやデータを集計するクエリなど、特定のタイプのクエリのパフォーマンスを向上させることができます。BigQuery のクラスタ化テーブルの動作について詳しくは、クラスタ化テーブルの概要をご覧ください。

移行ツール

次のリストは、Snowflake から BigQuery にデータを移行するために使用できるツールを示しています。これらのツールは、「パイプラインを使用した移行の例」セクションにまとめられており、エンドツーエンドの移行パイプラインをまとめることができます。

  • COPY INTO <location> コマンド: Snowflake のこのコマンドを使用して、Snowflake テーブルから指定の Cloud Storage バケットに直接データをアンロードします。エンドツーエンドの例については、GitHub の Snowflake から BigQuery(snowflake2bq)を参照してください。
  • Apache Sqoop: Snowflake から HDFS または Cloud Storage にデータを抽出するには、Sqoop と Snowflake の JDBC ドライバを使用して Hadoop ジョブを送信します。Sqoop は Dataproc 環境で動作します。
  • Snowflake JDBC: JDBC をサポートするほとんどのクライアント ツールやアプリケーションでこのドライバを使用します。

Snowflake から BigQuery にデータを移行するには、次の汎用ツールを使用できます。

  • BigQuery Data Transfer Service: このフルマネージド サービスを使用して、Cloud Storage データの BigQuery への自動バッチ転送を実行します。このツールでは、最初に Snowflake データを Cloud Storage にエクスポートする必要があります。
  • gsutil: このコマンドライン ツールを使用して、ダウンロードした Snowflake ファイルを Cloud Storage にコピーします。
  • bq コマンドライン ツール: このコマンドライン ツールを使用して、BigQuery を操作します。 一般的なユースケースには、BigQuery テーブル スキーマの作成、Cloud Storage データのテーブルへの読み込み、クエリの実行が含まれます。
  • Cloud Storage クライアント ライブラリ: Cloud Storage クライアント ライブラリを使用するカスタムツールを使用して、ダウンロードした Snowflake ファイルを Cloud Storage にコピーします。
  • BigQuery クライアント ライブラリ: BigQuery クライアント ライブラリの上に構築されたカスタムツールを使用して、BigQuery を操作します。
  • BigQuery クエリ スケジューラ: この BigQuery の組み込み機能を使用して、SQL クエリのスケジュールを設定します。
  • Cloud Composer: このフルマネージドの Apache Airflow 環境を使用して、BigQuery の読み込みジョブと変換をオーケストレートします。

BigQuery へのデータの読み込みの詳細については、BigQuery へのデータの読み込みをご覧ください。

パイプラインを使用した移行の例

以下のセクションでは、抽出と読み込み、ETL、パートナーのツールという 3 つの異なる手法を使用して、Snowflake から BigQuery にデータを移行する例を示します。

抽出と読み込み

抽出と読み込みの手法には、次の 2 つの方法があります。

  • パイプラインを使用して Snowflake からデータをアンロードする
  • パイプラインと JDBC ドライバを使用して Snowflake からデータをエクスポートする

パイプラインを使用して Snowflake からデータをアンロードする

Cloud Storage に直接、Snowflake からデータをアンロードする(推奨)か、gsutil または Cloud Storage クライアント ライブラリを使用してデータをダウンロードして Cloud Storage にコピーするには、snowflake2bq ツールを使用して、Snowflake COPY INTO <location> コマンドを使用してデータを移行します。

その後、次のいずれかのツールを使用して Cloud Storage データを BigQuery に読み込みます。

  • BigQuery Data Transfer Service
  • bq コマンドライン ツール
  • BigQuery API クライアント ライブラリ

パイプラインと JDBC ドライバを使用して Snowflake からデータをエクスポートする

次のいずれかのプロダクトを使用して、Snowflake の JDBC ドライバで Snowflake データをエクスポートします。

抽出、変換、読み込み

BigQuery にデータを読み込む前にデータを変換する場合は、上記の「抽出と読み込み」セクションで説明したパイプラインに変換手順を追加できます。

Snowflake データを変換する

BigQuery にデータを読み込む前にデータを変換する場合は、Snowflake から Cloud Storage に直接データをアンロードするか、上記の「抽出と読み込み」セクションで説明したように、gsutil を使用してデータをコピーします。

Snowflake データを読み込む

データを変換したら、次のいずれかの方法でデータを BigQuery に読み込みます。

パイプラインと JDBC ドライバを使用してデータを変換し、Snowflake からエクスポートする

前の「抽出と読み込み」セクションで説明したように、次のパイプライン オプションで変換ステップを追加します。

抽出、読み込み、変換のユースケースを使用して、Snowflake から BigQuery にデータを読み込み、変換する場合があります。このタスクを行うには、上記の「抽出と読み込み」のいずれかの方法で、Snowflake から BigQuery ステージング テーブルにデータを読み込みます。次に、ステージング テーブルで SQL クエリを実行し、BigQuery の最終的な本番環境テーブルに出力を書き込みます。

移行用のパートナー ツール

EDW 移行空間を専門とする複数のベンダーがあります。主要なパートナーと、パートナーが提供するソリューションの一覧については、Google Cloud の BigQuery パートナー ウェブサイトをご覧ください。

エクスポート プロセスの例

以下のセクションでは、Snowflake の COPY INTO <location> コマンドを使用する Snowflake から BigQuery へのサンプルデータのエクスポートについて説明します。コードサンプルを含む詳細な手順については、Google Cloud プロフェッショナル サービスの Snowflake から BigQuery へのツールをご覧ください。

エクスポートの準備を行う

アンロードのために、Snowflake SQL ステートメントを使用して名前付きファイル形式の仕様を作成します。

このチュートリアルでは、ファイル形式に my_parquet_unload_format を使用しますが、別の名前を使用することもできます。

   create or replace file format my_parquet_unload_format
     type = 'PARQUET'
     field_delimiter = '|'

Snowflake データをエクスポートする

データを準備したら、Google Cloud にデータを移動する必要があります。この手順は、次のいずれかの方法で行います。

  1. Snowflake から Cloud Storage にデータを直接エクスポートする。
  2. Amazon Simple Storage Service(Amazon S3)バケットまたは Azure Blob Storage で Snowflake データをステージングする。

余分なデータホップを回避するには、データを直接エクスポートします。

Snowflake データを Cloud Storage に直接エクスポートする

次の手順では、Snowflake COPY コマンドを使用して Snowflake から Cloud Storage にデータをアンロードします。

  1. Snowflake で、ストレージ統合オブジェクトを構成して、外部の Cloud Storage ステージで参照される Cloud Storage バケットに Snowflake が書き込めるようにします。

    このステップにはいくつかのサブステップが含まれます。

    1. CREATE STORAGE INTEGRATION コマンドで統合を作成します。

      create storage integration gcs_int
        type = external_stage
        storage_provider = gcs
        enabled = true
        storage_allowed_locations = ('gcs://mybucket/unload/')
      
    2. DESCRIBE INTEGRATION コマンドを使用して、Snowflake の Cloud Storage サービス アカウントを取得し、ステージング領域として選択された Cloud Storage バケットへのアクセス権をサービス アカウントに付与します。

      desc storage integration gcs_int;
      
      +-----------------------------+---------------+-----------------------------------------------------------------------------+------------------+
      | property                    | property_type | property_value                                                              | property_default |
      +-----------------------------+---------------+-----------------------------------------------------------------------------+------------------|
      | ENABLED                     | Boolean       | true                                                                        | false            |
      | STORAGE_ALLOWED_LOCATIONS   | List          | gcs://mybucket1/path1/,gcs://mybucket2/path2/                               | []               |
      | STORAGE_BLOCKED_LOCATIONS   | List          | gcs://mybucket1/path1/sensitivedata/,gcs://mybucket2/path2/sensitivedata/   | []               |
      | STORAGE_GCP_SERVICE_ACCOUNT | String        | service-account-id@project1-123456.iam.gserviceaccount.com                  |                  |
      +-----------------------------+---------------+---------------------------------------------------------
      --------------------+------------------+
      
    3. CREATE STAGE コマンドで作成した統合を参照する外部 Cloud Storage ステージを作成します。

      create or replace stage my_ext_unload_stage
        url='gcs://mybucket/unload'
        storage_integration = gcs_int
        file_format = my_parquet_unload_format;
      
  2. COPY INTO <location> コマンドを使用して、前のステップで作成した外部ステージ オブジェクトを指定して、Snowflake データベース テーブルから Cloud Storage バケットにデータをコピーします。

    copy into @my_ext_unload_stage/d1
    from mytable;
    

Amazon S3 から Storage Transfer Service を使用して Snowflake データを Cloud Storage にエクスポートする

次の例は、COPY コマンドを使用して、Snowflake テーブルから Amazon S3 バケットにデータをアンロードする方法を示しています。

  1. Snowflake で、ストレージ統合オブジェクトを構成して、外部の Cloud Storage ステージで参照される Amazon S3 バケットに Snowflake が書き込めるようにします。

    この手順には、Amazon S3 バケットへのアクセス権限の構成AWS IAM ロールの作成CREATE STORAGE INTEGRATION コマンドによる Snowflake でのストレージ統合の作成が含まれます。

    create storage integration s3_int
      type = external_stage
      storage_provider = s3
      enabled = true
      storage_aws_role_arn = 'arn:aws:iam::001234567890:role/myrole'
      storage_allowed_locations = ('s3://unload/files/')
    
  2. DESCRIBE INTEGRATION コマンドを使用して、AWS IAM ユーザーを取得します。

    desc integration s3_int;
    
    +---------------------------+---------------+================================================================================+------------------+
    | property                  | property_type | property_value                                                                 | property_default |
    +---------------------------+---------------+================================================================================+------------------|
    | ENABLED                   | Boolean       | true                                                                           | false            |
    | STORAGE_ALLOWED_LOCATIONS | List          | s3://mybucket1/mypath1/,s3://mybucket2/mypath2/                                | []               |
    | STORAGE_BLOCKED_LOCATIONS | List          | s3://mybucket1/mypath1/sensitivedata/,s3://mybucket2/mypath2/sensitivedata/    | []               |
    | STORAGE_AWS_IAM_USER_ARN  | String        | arn:aws:iam::123456789001:user/abc1-b-self1234                                 |                  |
    | STORAGE_AWS_ROLE_ARN      | String        | arn:aws:iam::001234567890:role/myrole                                          |                  |
    | STORAGE_AWS_EXTERNAL_ID   | String        | MYACCOUNT_SFCRole=                                                   |                  |
    +---------------------------+---------------+================================================================================+------------------+
    
  3. AWS IAM ユーザーに Amazon S3 バケットにアクセスするための権限を付与し、CREATE STAGE コマンドを使用して外部ステージを作成します。

      create or replace stage my_ext_unload_stage url='s3://unload/files/'
        storage_integration = s3_int
        file_format = my_parquet_unload_format;
    
  4. COPY INTO <location> コマンドを使用して、以前に作成した外部ステージ オブジェクトを指定して、Snowflake データベースから Amazon S3 バケットにデータをコピーします。

      copy into @my_ext_unload_stage/d1 from mytable;
    
  5. Storage Transfer Service を使用して、エクスポートされたファイルを Cloud Storage に転送します。

他のクラウド プロバイダを介して Snowflake データを Cloud Storage にエクスポートします。

Azure Blob Storage: Microsoft Azure へのアンロードで説明されている手順に従います。次に、Storage Transfer Service を使用して、エクスポートされたファイルを Cloud Storage に転送します。

Amazon S3 バケット: Amazon S3 へのアンロードで説明されている手順に従います。次に、Storage Transfer Service を使用して、エクスポートされたファイルを Cloud Storage に転送します。

次のステップ