データのロードの概要¶
このトピックでは、Snowflakeにデータをロードするために使用できる、主なオプションの概要を説明します。
このトピックの内容:
サポートされているファイルの場所¶
Snowflakeでは、クラウドストレージ内のデータファイルの場所を ステージ と呼びます。一括データロードと継続的データロードの両方に使用される COPY INTO <テーブル> コマンド(つまり、Snowpipe)は、ビジネスエンティティによって管理されるクラウドストレージアカウント(つまり、 外部ステージ)と、Snowflakeアカウントに含まれるクラウドストレージ(つまり、 内部ステージ)をサポートします。
外部ステージ¶
Snowflakeアカウントをホストする クラウドプラットフォーム に関係なく、次に挙げるクラウドストレージサービスからのデータのロードがサポートされています。
Amazon S3
Google Cloud Storage
Microsoft Azure
取得する前に復元が必要な、アーカイブクラウドストレージクラスに保持されているデータにアクセスすることはできません。これらのアーカイブストレージクラスには、たとえば、Amazon S3 Glacier Flexible RetrievalまたはGlacier Deep Archiveストレージクラス、またはMicrosoft Azure Archive Storageが含まれます。
クラウドストレージサービスが提供するツールを使用して、ファイルをクラウドストレージアカウントにアップロード(つまり、 ステージ)します。
名前付き外部ステージは、スキーマで作成されたデータベースオブジェクトです。このオブジェクトは、クラウドストレージのファイルへの URL、クラウドストレージアカウントへのアクセスに使用される設定、およびステージングされたファイルの形式を説明するオプションなどの便利な設定を格納します。 CREATE STAGE コマンドを使用してステージを作成します。
注釈
Snowflakeアカウントとは異なる地域、またはクラウドプラットフォームにあるクラウドストレージサービスのファイルからデータをロードする場合は、一部のデータ転送に請求料金が適用される場合があります。詳細については、 データ転送のコストについて をご参照ください。
内部ステージ¶
Snowflakeは、アカウントで次のステージ型を維持します。
- ユーザー:
ユーザーステージは、ファイルを保存するために各ユーザーに割り当てられます。このステージ型は、単一のユーザーによってステージングおよび管理されるが、複数のテーブルにロードできるファイルを保存するように設計されています。ユーザーステージは、変更またはドロップできません。
- テーブル:
Snowflakeで作成されたテーブルごとに、テーブルステージを使用できます。このステージ型は、1人以上のユーザーによってステージングおよび管理されるが、単一のテーブルのみにロードされるファイルを保存するように設計されています。テーブルステージは、変更またはドロップできません。
テーブルステージは独立したデータベースオブジェクトではなく、テーブル自体に結び付けられた暗黙的なステージです。テーブルステージには、独自の付与可能な権限はありません。ファイルをテーブルステージにステージングする、ファイルを一覧表示する、ステージ上でクエリを実行する、またはドロップするには、テーブル所有者(テーブルに対する OWNERSHIP 権限を持つロール)である必要があります。
- 名前付き:
名前付き内部ステージは、スキーマで作成されたデータベースオブジェクトです。このステージ型は、1人以上のユーザーによってステージングおよび管理され、1つ以上のテーブルにロードされるファイルを保存できます。名前付きステージはデータベースオブジェクトであるため、それらを作成、変更、使用、またはドロップする機能は、セキュリティのアクセス制御権限を使用して制御できます。 CREATE STAGE コマンドを使用してステージを作成します。
PUT コマンドを使用して、ローカルファイルシステムから任意の内部ステージ型にファイルをアップロードします。
一括ロード対連続ロード¶
Snowflakeは、データをロードするための以下の主要なソリューションを提供します。最適なソリューションは、ロードするデータの量とロードの頻度に依存する場合があります。
COPY コマンドを使用した一括ロード¶
このオプションを使用すると、クラウドストレージで既に使用可能なファイルからデータのバッチをロードしたり、ローカルマシンから内部(つまり、Snowflake)クラウドストレージの場所にデータファイルをコピー(つまり、 ステージング)したりすることが、データをテーブルにロードする前に COPY コマンドを使用してできるようになります。
コンピューティングリソース¶
一括ロードは、 COPY ステートメントで指定されたユーザー提供の仮想ウェアハウスに依存します。ユーザーは、予想されるロードに対応するために、ウェアハウスのサイズを適切に調整する必要があります。
ロード中の単純な変換¶
Snowflakeは、 COPY コマンドを使用してテーブルにデータをロードする際のデータの変換をサポートしています。オプションには次が含まれます。
列の並べ替え
列の省略
キャスト
ターゲット列の長さを超えるテキスト文字列の切り捨て
データファイルに、ターゲットテーブルと同じ数と列の順序を持たせる必要はありません。
Snowpipeを使用した連続ロード¶
このオプションは、少量のデータ(つまり、マイクロバッチ)をロードし、段階的に分析に使用できるように設計されています。Snowpipeは、ファイルがステージに追加され、インジェスションのために送信されてから数分以内にデータをロードします。これにより、生データが利用可能になり次第、ユーザーは最新の結果を得ることができます。
コンピューティングリソース¶
Snowpipeは、Snowflakeが提供するコンピューティングリソース(サーバーレスコンピューティングモデル)を使用します。これらのSnowflakeが提供するリソースは、必要に応じて自動的にサイズ変更および拡大/縮小され、1秒ごとの請求で課金および明細化します。データのインジェストは、実際のワークロードに基づいて課金されます。
ロード中の単純な変換¶
パイプ定義の COPY ステートメントは、データのバルクロード時と同じ COPY 変換オプションをサポートします。
さらに、データパイプラインはSnowpipeを活用して、データのマイクロバッチをステージングテーブルに継続的にロードし、自動タスクとストリーム内の変更データキャプチャ(CDC)情報を使用して変換と最適化を行います。
複雑な変換のためのデータパイプライン¶
データパイプライン により、ロードされたデータに複雑な変換を適用できます。このワークフローは通常、Snowpipeを活用して「生」データをステージングテーブルにロードし、一連のテーブルストリームとタスクを使用して分析用に新しいデータを変換および最適化します。
Snowpipe Streamingを使用した連続ロード¶
Snowpipe Streaming API は、ステージングファイルを必要とせずに、データ行をSnowflakeテーブルに直接書き込みます。このアーキテクチャにより、ロード遅延が短縮され、任意の量のデータをロードするためのコストが削減されます。これは、ほぼリアルタイムでデータストリームを処理するための強力なツールになります。
Snowpipe Streamingは、Kafka用Snowflakeコネクタでも利用できます。これにより、低遅延と低コストのロードを利用するための簡単なアップグレードパスが提供されます。
詳細については、 Snowpipe Streaming をご参照ください。
Apache Kafkaトピックからのデータのロード¶
Kafka用のSnowflakeコネクタ。 を使用すると、ユーザーは Apache Kafka サーバーに接続し、1つ以上のトピックからデータを読み取り、そのデータをSnowflakeテーブルにロードできるようになります。
ステージングされた半構造化データファイル内の列定義の検出¶
半構造化データには、数千の列が含まれる場合があります。Snowflakeは、このデータを処理するための堅牢なソリューションを提供します。オプションには、外部テーブルを使用してクラウドストレージ内のデータを直接参照する、データを型 VARIANT の単一の列にロードする、データを変換して標準のリレーショナルテーブルにある個別の列にロードするなどがあります。これらのオプションはすべて、データの列定義に関するある程度の知識を必要とします。
別のソリューションには、ステージングされた半構造化データファイルのセットでスキーマを自動的に検出し、列定義を取得することが含まれます。列の定義には、ファイル内の列の名前、データ型、および順序が含まれます。Snowflakeの標準テーブル、外部テーブル、またはビューの作成に適した形式で構文を生成します。
注釈
この機能は、Apache Parquet、Apache Avro、 ORC、 JSON、 CSV ファイルをサポートしています。
このサポートは、次の SQL 関数を介して実装されます。
- INFER_SCHEMA
ステージングされたデータファイルのセットで列定義を検出し、Snowflakeオブジェクトの作成に適した形式でメタデータを取得します。
- GENERATE_COLUMN_DESCRIPTION
INFER_SCHEMA 関数の出力を使用して、ステージングされたファイルのセットから列のリストを生成します。
これらの SQL 関数は、内部ステージと外部ステージの両方をサポートします。
CREATE TABLE ... USING TEMPLATE または CREATE EXTERNALTABLE ... USING TEMPLATE 構文を使用して、ステージングされたファイルのセットから派生した列定義でテーブルを作成します。USING TEMPLATE 句は、 INFER_SCHEMA SQL 関数を呼び出してファイル内の列定義を検出する式を受け入れます。テーブルが作成されたら、 COPY ステートメントで MATCH_BY_COLUMN_NAME
オプションを使用して、ファイルを構造化テーブルに直接ロードできます。
データのロードの代替¶
次のオプションを使用して、Snowflakeテーブルにデータをロードせずにクラウドストレージ内のデータをクエリできます。
外部テーブル(データレイク)¶
外部テーブル により、外部クラウドストレージに保存されている既存のデータをSnowflakeに最初にロードすることなく、分析のためにクエリできます。データの信頼できる情報源は、外部のクラウドストレージに残ります。マテリアライズドビューを介してSnowflakeでマテリアライズされたデータセットは、読み取り専用です。
このソリューションは、外部のクラウドストレージに大量のデータが保存されており、データの一部のみをクエリしたいアカウントに特に役立ちます。例:最新のデータ。ユーザーは、クエリのパフォーマンスを向上させるために、このデータのサブセットでマテリアライズドビューを作成できます。
Amazon S3互換ストレージの操作¶
Amazon S3 API に高度に準拠したオンプレミスまたはプライベートクラウドのソフトウェアおよびデバイス上に、外部ステージおよび外部テーブルを作成できます。この機能を使用すると、データが物理的に格納されている場所に関係なく、データをより簡単かつ効率的に管理して分析できます。詳細については、 Amazon S3互換ストレージの操作 をご参照ください。