Apache Iceberg™ テーブルへのデータのロード¶
Snowflakeは、Snowflake管理Icebergテーブルにデータをロードする以下のオプションをサポートしています。
ファイル形式¶
標準のSnowflakeテーブルへのロードでサポートされている形式のファイルから、Icebergテーブルにデータをロードできます。
CSV、 JSON、Avro、 ORC の場合、SnowflakeはParquet以外のファイル形式のデータをIceberg Parquetファイルに変換し、Icebergテーブルのベーステーブルに格納します。タイプ変換を必要とするこれらのファイル形式でのロードシナリオでは、デフォルトの LOAD_MODE = FULL_INGEST オプションのみがサポートされています。
Apache Parquetファイルの場合、Snowflakeはデータをテーブル列に直接ロードして、以下の LOAD_MODE オプションから選択できるようになっています。
FULL_INGEST: ファイルをスキャンし、IcebergテーブルのベーステーブルにあるParquetデータを書き換えます。ADD_FILES_COPY: バイナリは、Icebergカタログに登録されていないIceberg互換のApache ParquetファイルをIcebergテーブルのベーステーブルにコピーし、Icebergテーブルにファイルを登録します。
詳細については、 COPY INTO <テーブル> をご参照ください。
重要
を使用したParquetファイルの登録ADD_FILES_COPYこれらのファイルがすでに別のIcebergテーブルの一部になっている場合は、の使用が推奨されません。
ファイルを書き換えずに、外部管理のIcebergテーブルをSnowflake管理のIcebergテーブルに変換するためのベストプラクティスは、:doc:`/sql-reference/sql/alter-iceberg-table-convert-to-managed`コマンドを使用することです。
Icebergテーブルにデータをロードする際の考慮事項と制限¶
:code:`_row_id`および:code:`_last_updated_sequence_number`であるParquetファイルの行系統メタデータ列をロードするには、FULL_INGESTオプションを使用する必要があります。他のLOAD_MODEオプションはサポートされていません。ただし、行系統を含むParquetファイルは、既にIceberg v3テーブルの一部である可能性があります。すでに別のIcebergテーブルの一部であるParquetファイルの処理方法のベストプラクティスについて詳しくは、:ref:`上記の注意事項<label-tables_iceberg_load_mode>`を参照してください。
例:Iceberg互換Parquetファイルのロード¶
この例では、Icebergテーブルを作成し、外部ステージにあるIceberg互換のParquetデータファイルからデータをロードする方法を示しています。
重要
を使用したParquetファイルの登録ADD_FILES_COPYこれらのファイルがすでに別のIcebergテーブルの一部になっている場合は、の使用が推奨されません。ファイルを書き換えずに、外部管理のIcebergテーブルをSnowflake管理のIcebergテーブルに変換するためのベストプラクティスは、:doc:`/sql-reference/sql/alter-iceberg-table-convert-to-managed`コマンドを使用することです。
デモのため、この例では以下のリソースを使用します。
iceberg_ingest_volという名前の外部ボリューム。外部ボリュームを作成するには、 外部ボリュームの構成 をご参照ください。Iceberg互換のParquetファイルが置かれた
my_parquet_stageという外部ステージ。外部ステージを作成するには、 CREATE STAGE をご参照ください。
Iceberg互換のParquetデータ(
TYPE = PARQUET USE_VECTORIZED_SCANNER = TRUE)をコピーするために必要な構成を使用して、ステージングされたParquetファイルを説明するファイル形式オブジェクトを作成します。ソースParquetファイルのデータ型と互換性のあるデータ型の列を定義して、Snowflake管理のIcebergテーブルを作成します。
この例では、大文字と小文字を区別する列名を使用しています。Icebergテーブルを作成する際には、列名を二重引用符で囲む必要があり、Parquetフッターに表示されるとおりに列名を指定する必要があります。
注釈
このステートメント例では、Snowflakeデータ型にマップするIcebergデータ型を指定します。詳細については、 Apache Iceberg™ テーブルのデータ型 をご参照ください。
ステージの URL パスの直下にあるステージングされたParquetファイルのデータをIcebergテーブルにロードするには、 COPY INTO ステートメントを使用します。
LOAD_MODE = ADD_FILES_COPYを使用する COPY INTO <table> ステートメント内では、MATCH_BY_COLUMN_NAME = CASE_SENSITIVEのみがサポートされています。注釈
この例では、
LOAD_MODE = ADD_FILES_COPYを指定しています。これは、Snowflakeにファイルを外部ボリュームの場所にコピーし、そのファイルをテーブルに登録するように指示します。SnowflakeはソースParquetファイルをスキャンしてデータを新しいParquetファイルに書き換えないため、このオプションを使用するとファイル課金が発生しません。
出力:
テーブルをクエリします。
出力:
例: INFER_SCHEMA 関数で作成したテーブルに Iceberg 互換の Parquet ファイルをロードします。¶
この例では、以下の方法を説明します。
INFER_SCHEMA 関数を使用して Apache Iceberg™ テーブルを作成します。
外部ステージにあるIceberg互換のParquetデータファイルからデータを読み込みます。
デモのため、この例では以下のリソースを使用します。
iceberg_ingest_volという名前の外部ボリューム。外部ボリュームを作成するには、 外部ボリュームの構成 をご参照ください。Iceberg互換のParquetファイルが置かれた
my_parquet_stageという外部ステージ。外部ステージを作成するには、 CREATE STAGE をご参照ください。
Iceberg互換のParquetデータ(
TYPE = PARQUET USE_VECTORIZED_SCANNER = TRUE)をコピーするために必要な構成を使用して、ステージングされたParquetファイルを説明するファイル形式オブジェクトを作成します。my_parquet_stageステージでParquetファイルの列定義を取得します。出力:
検出されたスキーマを使用してIcebergテーブルを作成します。
注釈
ARRAY_AGG(OBJECT_CONSTRUCT())に対して*を使用すると、返される結果が 16MB より大きいとエラーになる場合があります。大きなクエリ結果セットでは*の使用を避け、必要な列、COLUMN NAME、TYPE、NULLABLEのみをクエリに使用することをお勧めします。WITHIN GROUP (ORDER BY order_id)を使用する場合は、オプションの列ORDER_IDを含めることができます。COPY INTO ステートメントを使用して、ステージングされた Parquet ファイルから Iceberg テーブルにデータを読み込みます。
注釈
この例では、
LOAD_MODE = ADD_FILES_COPYを指定しています。これは、Snowflakeにファイルを外部ボリュームの場所にコピーし、そのファイルをテーブルに登録するように指示します。SnowflakeはソースParquetファイルをスキャンしてデータを新しいParquetファイルに書き換えないため、このオプションを使用するとファイル課金が発生しません。
出力:
データの読み込み中、テーブルにクエリを実行します。
出力: