Snowflake から BigQuery への移行
このドキュメントでは、Snowflake から BigQuery にデータを移行する方法に関する技術的背景について説明します。Snowflake と BigQuery の基本的な違いについて説明します。また、次のような移行を成功させるためのガイダンスも提供します。
- どのようなスキーマ変更が必要か
- 利用可能な移行ツールとオプション
- データを移行する方法(サンプル エクスポート プロセスを使用)
また、バッチ SQL 変換を使用して複数の SQL スクリプトを一括で移行することも、インタラクティブ SQL 変換を使用してアドホック クエリ変換することもできます。Snowflake SQL は、プレビューでは両方のツールでサポートされています。
用語
このドキュメントでは、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 コンソールに組み込まれており、表示可能な BigQuery リソースのリストが表示されます。
- [BigQuery Studio] セクションには、データセット、テーブル、ビューなどの 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 Run 関数を介した外部関数呼び出しをサポートしています。ただし、SQL UDF などのユーザー定義関数(UDF)を使用できますが、これらの関数は BigQuery の外部では実行されません。Snowflake では、外部関数が Snowflake の外部で実行されるコードを呼び出します。たとえば、リモート サービスに送信された情報は、通常はプロキシ サービスを介してリレーされます。
Snowflake から BigQuery にデータを移行する
このセクションでは、データ ウェアハウスの BigQuery への移行: 移行の対象と方法で概説されているフレームワークに基づいて、Snowflake から BigQuery への移行を構成して開始する方法について説明します。
アーキテクチャ
移行を開始するには、Snowflake と BigQuery の両方を実行します。次の図は、既存のオペレーションへの影響が最小限になるアーキテクチャを示しています。品質管理されたクリーンなデータを転送することで、ワークロードを BigQuery にオフロードするとともに、既存のツールとプロセスを再利用できます。以前のバージョンに対してレポートとダッシュボードを検証することもできます。ただ、OLAP データは冗長な場所に保持されているため、この運用は費用対効果が高くありません。また、処理時間が長くなります。
- ポイント 1 は、Snowflake から Cloud Storage へのデータ移動を示しています。
- ポイント 2 は、BigQuery へのデータの永続性を示しています。
- ポイント 3 は、エンドユーザーへのデータの送信方法を示しています。
古いイテレーションに対してレポートとダッシュボードを検証できます。詳細は、データ ウェアハウスの BigQuery への移行: 確認と検証をご覧ください。
データ ウェアハウス移行の最終アーキテクチャでは、ソースシステムのすべてのデータが Google Cloud に直接保持されます。ソースシステムの数と複雑さに応じて、優先度、相互依存関係、統合のリスク、またはその他のビジネス要因に基づいてソースシステムを 1 つずつ処理することで、このアーキテクチャの導入をさらに細かく分割できます。
次の図は、データ パイプラインの移行と Google Cloud への取り込みを前提としています。
- ポイント 1 は、同期統合ポイントと非同期統合ポイントの両方を示しています。同期統合は、たとえば、フローの一部として明示的なユーザー アクションを必要とするユースケースに対応する場合に、データソースと App Engine 間で行われます。
- ポイント 2 は、大量の同時イベントデータに対する Pub/Sub の使用を示しています。
- ポイント 3 は、データの性質に応じて、1 つ以上の Google Cloud プロダクトを使用するデータの永続性を示しています。
- ポイント 4 は、BigQuery に対する抽出、変換、読み込み(ETL)プロセスを示しています。
Cloud Storage 環境を準備する
Google Cloud では、他の ETL ツールを使用して、いくつかの方法で BigQuery にデータを転送できます。たとえば、次の方法があります。
ソースからデータを抽出する: ソースから抽出したファイルを、オンプレミス環境のステージング ストレージにコピーします。詳細は、データ ウェアハウスの BigQuery への移行: ソースデータの抽出をご覧ください。
ステージング Cloud Storage バケットにデータを転送する: ソースからデータの抽出が完了したら、Cloud Storage の一時バケットに転送します。転送するデータの量と利用可能なネットワーク帯域幅に応じて、いくつかのオプションを使用できます。
BigQuery データセットと外部データソースまたは Cloud Storage バケットの場所を同じリージョンにする必要があります。Cloud Storage からデータを読み込む場合の地理的位置に関する注意事項について詳しくは、データのバッチ読み込みをご覧ください。
Cloud Storage バケットから BigQuery へのデータの読み込み: データは、宛先に近い Cloud Storage バケットに配置されます。BigQuery にデータをアップロードする方法はいくつかあります。これらのオプションは、データを変換する必要がある量によって異なります。また、ETL の手法を使用して、BigQuery 内でデータを変換することもできます。
JSON ファイル、Avro ファイル、CSV ファイルからデータを一括でインポートすると、BigQuery がスキーマを自動検出するため、事前に定義する必要はありません。EDW ワークロードのスキーマ移行プロセスの詳細については、スキーマとデータの移行プロセスをご覧ください。
サポートされるデータ型、プロパティ、ファイル形式
Snowflake と BigQuery ではほとんどの同じデータ型をサポートしていますが、別の名前を使用している場合があります。Snowflake と BigQuery でサポートされているデータ型の一覧については、Snowflake SQL 変換リファレンスでデータ型のセクションをご覧ください。また、バッチ SQL トランスレータを使用して変換することもできます。BigQuery でサポートされているデータ型の詳細については、GoogleSQL のデータ型をご覧ください。
Snowflake では次のファイル形式でデータをエクスポートできます。形式は BigQuery に直接読み込むことができます。
- CSV: Cloud Storage からの CSV データの読み込みをご覧ください。
- Parquet: Cloud Storage からの Parquet データの読み込みをご覧ください。
- JSON(改行区切り): Cloud Storage からの JSON データの読み込みをご覧ください。
スキーマの変更
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 にエクスポートする必要があります。
- Google Cloud CLI: このコマンドライン ツールを使用して、ダウンロードした 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 からデータをアンロードする(推奨)か、gcloud CLI または Cloud Storage クライアント ライブラリを使用してデータをダウンロードして Cloud Storage にコピーするには、snowflake2bq ツールを使用し、Snowflake COPY INTO <location>
コマンドでデータを移行します。
その後、次のいずれかのツールを使用して Cloud Storage データを BigQuery に読み込みます。
- BigQuery Data Transfer Service
bq
コマンドライン ツール- BigQuery API クライアント ライブラリ
パイプラインと JDBC ドライバを使用して Snowflake からデータをエクスポートする
次のいずれかのプロダクトを使用して、JDBC ドライバで Snowflake から Snowflake データをエクスポートします。
- Dataflow
- Cloud Data Fusion
- Dataproc
- BigQuery と Apache Spark
- Spark 用の Snowflake コネクタ
- Spark と Hadoop 用の BigQuery コネクタ
- Snowflake と Sqoop の JDBC ドライバ。Snowflake から Cloud Storage にデータを抽出します。
抽出、変換、読み込み
BigQuery にデータを読み込む前にデータを変換する場合は、上記の「抽出と読み込み」セクションで説明したパイプラインに変換手順を追加できます。
Snowflake データを変換する
BigQuery にデータを読み込む前にデータを変換する場合は、Snowflake から Cloud Storage に直接データをアンロードするか、上記の「抽出と読み込み」セクションで説明したように、gcloud CLI を使用してデータをコピーします。
Snowflake データを読み込む
データを変換したら、次のいずれかの方法でデータを BigQuery に読み込みます。
- Dataproc
- Apache Spark を使用して Cloud Storage から読み取る
- Apache Spark を使用した BigQuery への書き込み
- Hadoop Cloud Storage コネクタ
- Hadoop BigQuery コネクタ
- Dataflow
- Cloud Storage からの読み取り
- BigQuery への書き込み
- Google 提供のテンプレート: Cloud Storage Text to BigQuery
- Cloud Data Fusion
- Dataprep by Trifacta
パイプラインと JDBC ドライバを使用してデータを変換し、Snowflake からエクスポートする
前の「抽出と読み込み」セクションで説明したように、次のパイプライン オプションで変換ステップを追加します。
- Dataflow
- Google 提供の JDBC-to-BigQuery テンプレート コードのクローンを作成し、テンプレートを変更して Apache Beam 変換を追加します。
- Cloud Data Fusion
- CDAP プラグインを使用してデータを変換します。
- Dataproc
- サポートされている Spark 言語(Scala、Java、Python、R)のいずれかで Spark SQL またはカスタムコードを使用してデータを変換します。
抽出、読み込み、変換のユースケースを使用して、Snowflake から BigQuery にデータを読み込み、変換する場合があります。このタスクを行うには、上記の「抽出と読み込み」のいずれかの方法で、Snowflake から BigQuery ステージング テーブルにデータを読み込みます。次に、ステージング テーブルで SQL クエリを実行し、BigQuery の最終的な本番環境テーブルに出力を書き込みます。
移行用のパートナー ツール
EDW 移行空間を専門とする複数のベンダーがあります。主要なパートナーと、パートナーが提供するソリューションの一覧については、BigQuery パートナーをご覧ください。
エクスポート プロセスの例
以降のセクションでは、COPY INTO <location>
Snowflake コマンドを使用して 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 にデータを移動する必要があります。この手順は、次のいずれかの方法で行います。
- Snowflake から Cloud Storage にデータを直接エクスポートする。
- Amazon Simple Storage Service(Amazon S3)バケットまたは Azure Blob Storage で Snowflake データをステージングする。
余分なデータホップを回避するには、データを直接エクスポートします。
Snowflake データを Cloud Storage に直接エクスポートする
次の手順では、Snowflake COPY
コマンドを使用して Snowflake から Cloud Storage にデータをアンロードします。
Snowflake で、ストレージ統合オブジェクトを構成して、外部の Cloud Storage ステージで参照される Cloud Storage バケットに Snowflake が書き込めるようにします。
このステップにはいくつかのサブステップが含まれます。
CREATE STORAGE INTEGRATION
コマンドで統合を作成します。create storage integration gcs_int type = external_stage storage_provider = gcs enabled = true storage_allowed_locations = ('gcs://mybucket/unload/')
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 | | +-----------------------------+---------------+--------------------------------------------------------- --------------------+------------------+
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;
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 バケットにデータをアンロードする方法を示しています。
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/')
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=
| | +---------------------------+---------------+================================================================================+------------------+ 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;
COPY INTO <location>
コマンドを使用し、以前に作成した外部ステージ オブジェクトを指定して、Snowflake データベースから Amazon S3 バケットにデータをコピーします。copy into @my_ext_unload_stage/d1 from mytable;
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 に転送します。
次のステップ
- 移行後のパフォーマンスと最適化。
- Google Cloud に関するリファレンス アーキテクチャ、図、ベスト プラクティスを確認する。Cloud アーキテクチャ センターをご覧ください。