Apache Iceberg™ テーブル¶
Snowflakeの Apache Iceberg™ テーブルは、一般的なSnowflakeテーブルのパフォーマンスとクエリセマンティクスに、管理する外部クラウドストレージを組み合わせたものです。Snowflakeに保存できない、または保存しないことを選択した既存のデータレイクに最適です。
Icebergテーブルは、 Apache Iceberg™ オープンテーブルフォーマット仕様を使用しています。これは、オープンフォーマットで保存されたデータファイルの抽象化レイヤーを提供し、以下のような機能をサポートしています。
ACID(原子性、一貫性、分離性、耐久性)トランザクション
スキーマの進化
隠しパーティション
テーブルスナップショット
Snowflakeは Apache Parquet™ ファイル形式を使用するIcebergテーブルをサポートしています。
はじめるにあたり¶
Icebergテーブルを使い始めるには、 チュートリアル: 初めてのApache Iceberg™テーブルを作成する をご参照ください。
仕組み¶
このセクションでは、 Snowflakeで Icebergテーブルを操作するための情報を提供します。Icebergテーブルフォーマット仕様の詳細については、公式の Apache Icebergドキュメント と Icebergテーブル仕様 をご参照ください。
データストレージ¶
Icebergテーブルはデータとメタデータファイルを外部クラウドストレージ(Amazon S3、Google Cloud Storage、またはAzure Storage)に保存します。外部ストレージがSnowflakeの一部ではありません。データ保護と回復の構成を含む、外部クラウドストレージの場所のすべての管理はお客様の責任となります。Snowflakeは、Icebergテーブルの Fail-safe ストレージを提供しません。
Snowflakeは、 外部ボリューム を使用してストレージロケーションに接続し、IcebergテーブルにはSnowflakeのストレージコストはかかりません。詳細については、 請求 をご参照ください。
Icebergテーブルのストレージに関する詳細については、 Apache Iceberg™ テーブルのストレージ をご参照ください。
外部ボリューム¶
外部ボリュームは名前付きのアカウントレベルのSnowflakeオブジェクトで、SnowflakeをIcebergテーブル用の外部クラウドストレージに接続するために使用します。外部ボリュームには、ストレージ場所のIDおよびアクセス管理(IAM)エンティティが格納されます。Snowflakeは IAM エンティティを使用して、テーブルデータ、Icebergメタデータ、およびテーブルスキーマ、パーティション、その他のメタデータを格納するマニフェストファイルにアクセスするために、ストレージにセキュアに接続します。
1つの外部ボリュームで1つまたは複数のIcebergテーブルをサポートできます。
Icebergテーブルの外部ボリュームを設定するには、 外部ボリュームの構成 をご参照ください。
カタログ¶
Icebergカタログは、コンピュートエンジンがIcebergテーブルを管理し、ロードできるようにします。カタログは Icebergテーブル仕様 の最初のアーキテクチャーレイヤーを形成し、次をサポートする必要があります。
1つ以上のIcebergテーブルの現在のメタデータポインターを格納する。メタデータポインターは、テーブル名とそのテーブルの現在のメタデータファイルの場所をマッピングします。
アトミック操作を実行することで、テーブルの現在のメタデータポインターを更新できる。
Icebergカタログについての詳細は Apache Icebergドキュメント をご参照ください。
Snowflakeは様々な カタログオプション をサポートしています。例えば、SnowflakeをIcebergカタログとして使用したり、 カタログ統合 を使用してSnowflakeをGlueのような外部のIcebergカタログに接続できます。
カタログ統合¶
カタログ統合は、名前付きのアカウントレベルのSnowflakeオブジェクトで、以下のシナリオのためにテーブルのメタデータがどのように整理されているかについての情報を格納します。
SnowflakeをIcebergカタログ として使用しない場合。例えば、テーブルがAWS Glue で管理されている場合、カタログ統合が必要です。
Snowflake Open Catalog と統合して、次のことを実現したい場合。
Snowflakeを使用して、 Snowflake Open Catalog でIcebergテーブルをクエリします。
サードパーティのコンピュートエンジンがテーブルをクエリできるように、Snowflakeが管理するIcebergテーブルを Snowflake Open Catalog と同期します。
1つのカタログ統合で1つまたは複数のIcebergテーブルをサポートできます。
カタログ統合を設定するには、 カタログ統合の構成 をご参照ください。
メタデータとスナップショット¶
Icebergはスナップショットベースのクエリモデルを使用しており、データファイルはマニフェストファイルとメタデータファイルを使用してマッピングされます。スナップショットは、ある時点におけるテーブルの状態を表し、テーブル内のデータファイル一式にアクセスするために使用されます。
テーブルのメタデータとTime Travelのサポートについては、 Apache Iceberg™ テーブルのメタデータと保持 をご参照ください。
クロスクラウド/クロスリージョンのサポート¶
Snowflakeは、Snowflakeアカウントをホストしているクラウドプロバイダーとは異なる(リージョンが異なる)外部ボリュームストレージの場所を使用することをサポートしています。
テーブルタイプ |
クロスクラウド/クロスリージョンのサポート |
注意 |
|---|---|---|
カタログ統合 で外部カタログを使用するテーブル |
✔ |
Snowflakeアカウントと外部ボリュームが異なるリージョンにある場合、外部クラウドストレージアカウントでテーブルをクエリする際にエグレスコストが発生します。 |
SnowflakeをIcebergカタログとして 使用するテーブル |
✔ |
Snowflakeアカウントと外部ボリュームが異なるリージョンにある場合、外部クラウドストレージアカウントでテーブルをクエリする際にエグレスコストが発生します。 これらのテーブルでは、リージョンをまたいだデータ転送の使用コストが発生します。詳細については、 請求 をご参照ください。 |
請求¶
Snowflake bills your account for virtual warehouse (compute) usage and cloud services when you work with Iceberg tables. Snowflake also bills your account if you use automated refresh or an external query engine through Snowflake Horizon Catalog.
Snowflake が管理する Iceberg テーブルがクロスクラウド/クロスリージョンの場合、Snowflake はクロスリージョンのデータ転送使用量を DATA_LAKE の TRANSFER_TYPE 下に請求します。詳細については、次をご参照ください。
ORGANIZATION_USAGE スキーマの DATA_TRANSFER_HISTORY ビュー
ACCOUNT_USAGE スキーマの DATA_TRANSFER_HISTORY ビュー
Snowflakeはお客様のアカウントに次について請求 しません。
Icetableテーブルのストレージコスト。クラウドストレージプロバイダーがデータストレージの使用料を直接請求します。
Icebergテーブルが使用するアクティブなバイト数。ただし、 INFORMATION_SCHEMA.TABLE_STORAGE_METRICS と ACCOUNT_USAGE.TABLE_STORAGE_METRICS ビューがIcebergテーブルの ACTIVE_BYTES を表示し、テーブルがどれだけのストレージを占有しているかを把握するのに役立ちます。表示例については、 ストレージメトリックの取得 をご参照ください。
注釈
Snowflakeアカウントと外部ボリュームが異なるリージョンにある場合、外部クラウドストレージアカウントでテーブルをクエリする際にエグレスコストが発生します。
カタログオプション¶
Snowflakeは以下のIcebergカタログオプションをサポートしています。
Snowflakeを Icebergカタログ として使用
外部Icebergカタログを使用
次のテーブルは、これらのオプションの相違点をまとめたものです。
読み取りアクセス |
✔ |
✔ |
書き込みアクセス |
✔ |
✔ |
カタログ提供の認証情報 |
✔ |
|
リージョンをまたいだ書き込みアクセス |
✔ |
✔ と 外部管理テーブル への書き込みサポート |
データとメタデータのストレージ |
外部ボリューム(クラウドストレージ) |
外部ボリューム(クラウドストレージ) |
Snowflakeプラットフォームのサポート |
✔ |
|
Snowflake Open Catalog との統合 |
✔ Snowflakeで管理されたテーブルを Open Catalog と同期して、他のコンピュートエンジンを使ってテーブルをクエリすることができます。 |
✔ Snowflakeを使用して、 Open Catalog で管理されているIcebergテーブルに対してクエリや書き込みを行うことができます。 |
✔ |
✔ |
|
Replication for tables |
✔ See Configure replication for Snowflake-managed Apache Iceberg™ tables. |
カタログとしてSnowflakeを使用¶
IcebergカタログとしてSnowflakeを使用するIcebergテーブル(Snowflake管理Icebergテーブル)は、読み取りおよび書き込みアクセスでSnowflakeプラットフォームを完全にサポートします。テーブルデータとメタデータは外部クラウドストレージに保存され、Snowflakeは 外部ボリューム を使用してアクセスします。Snowflakeは、テーブルのコンパクションなど、ライフサイクルのメンテナンスをすべて行います。ただし、必要に応じて、 テーブルの圧縮を無効にすることも可能です。
外部カタログの使用¶
外部カタログを使用するIcebergテーブルでは、限定的なSnowflakeプラットフォームサポートを提供します。
このテーブル型では、Snowflakeは カタログ統合 を使用してIcebergメタデータとスキーマに関する情報を取得します。
このオプションを使用して、以下のソースのIcebergテーブルを作成できます。
リモートIceberg REST カタログ と Snowflake Open Catalog を含む)。Snowflakeは、リモートIceberg REST カタログを使用する外部管理テーブルへの書き込みをサポートしています。
Snowflakeはテーブルのライフサイクル管理を行いません。
テーブルデータとメタデータは外部クラウドストレージに保存され、Snowflakeは 外部ボリューム を使用してアクセスします。
注釈
外部カタログを使用するIcebergテーブルでSnowflakeプラットフォームの完全サポートを希望する場合は、カタログとしてSnowflakeを使用するように変換できます。詳細については、 Snowflakeをカタログとして使用するように Apache Iceberg™ テーブルを変換する をご参照ください。
次の図は、Icebergテーブルが外部Icebergカタログとのカタログ統合をどのように使用するかを示しています。
考慮事項と制約¶
次の考慮事項と制限はIcebergテーブルに適用され、変更される場合があります。
クラウドとリージョン
Icebergテーブルは、すべてのSnowflakeアカウント、すべてのクラウドプラットフォーム、すべてのリージョンで利用可能です。
クロスクラウド/クロスリージョンのテーブルがサポートされています。詳細については、 クロスクラウド/クロスリージョンのサポート をご参照ください。
Iceberg
Apache Iceberg仕様のバージョン1と2は、次の 機能: を除いてサポートされています。
行レベルの等価削除。しかし、Snowflakeをカタログとして使用しているテーブルは、Snowflake DELETE ステートメントをサポートしています。
history.expire.min-snapshots-to-keepテーブルプロパティ を使用して、保持するデフォルトの最小スナップショット数を指定します。詳細については、 メタデータとスナップショット をご参照ください。
bucket変換関数を使用したIcebergパーティショニングは、条件句を使用して結果をフィルターするクエリのパフォーマンスに影響を与えます。Snowflakeで管理されていないIcebergテーブルについては、以下の点に注意してください:
スナップショットの有効期限が切れる前に定期的にテーブルをリフレッシュする限り、テーブル作成後に生成されたスナップショットへのTime Travelがサポートされます。
マテリアライズされていないIDパーティション列を持つテーブルの変換はサポートされていません。マテリアライズされていないIDパーティション列は、テーブルがParquetファイルに存在しないソース列を使用してID変換を定義する場合に作成されます。
行レベル削除 の場合:
Snowflake は 位置の削除 のみをサポートしています。
行レベル削除を使用する際に最高の読み取りパフォーマンスを得るには、定期的にコンパクションとテーブル・メンテナンスを行い、古い削除ファイルを削除してください。詳細については、 外部カタログを使用するテーブルの維持 をご参照ください。
ポジション削除が多すぎると、特に未処理のポジション削除は、テーブルの作成やリフレッシュ処理を妨げる可能性があります。この問題を回避するには、テーブルメンテナンスを実行して、余分なポジション削除を削除します。
使用するテーブルメンテナンスメソッドは、外部Icebergエンジンによって異なります。たとえば、Sparkでは
rewrite_data_filesメソッドをdelete-file-thresholdまたはrewrite-allオプションと共に使用できます。詳細については、Apache Iceberg™ ドキュメントの rewrite_data_files をご参照ください。
ファイル形式
IcebergテーブルはApache Parquetファイルをサポートしています。
符号なし整数論理型を使用するParquetファイルはサポートされていません。
LIST論理的タイプを使用する Parquet ファイルでは、以下の点に注意してください。
elementキーワードによる3レベルの注釈構造がサポートされています。詳細については、 Parquet理論型の定義 をご参照ください。Parquet ファイルがarrayキーワードで廃止された形式を使用している場合は、サポートされている形式に基づいてデータを再生成する必要があります。
外部ボリューム
ストレージ統合を使用して外部ボリュームのクラウドストレージの場所にアクセスすることはできません。
作成する外部ボリュームごとに個別の信頼関係を構成する必要があります。
アウトバウンドプライベート接続 を使用して、Snowflake管理Icebergテーブルおよびオブジェクトストレージにカタログ統合を使用するIcebergテーブルにアクセスできますが、他のカタログ統合を使用するIcebergテーブルにアクセスすることはできません。
Snowflake管理テーブルを作成した後、外部ストレージ内のファイルへのパスは、テーブル名を変更しても変更され ません。
Snowflakeは、ドットを含むS3バケット名を持つ外部ボリュームをサポートできません(例えば、
my.s3.bucket)。S3は、名前にドットが含まれる仮想ホスト形式のバケットの SSL をサポートしておらず、Snowflakeは仮想ホスト形式のパスと HTTPS を使用してS3のデータにアクセスします。
メタデータファイル
メタデータファイルはIcebergテーブルの最新のスナップショットを識別しません。
ALTER ICEBERG TABLE コマンドを使用してデータファイルやスナップショットの場所を変更することはできません。これらの設定を変更するには、テーブルを(CREATE OR REPLACE ICEBERG TABLE 構文を使用して)再作成する必要があります。
外部カタログを使用するテーブルの場合
マニフェストファイルに重複がないようにします。同じ スナップショットに重複ファイルが存在する場合、Snowflakeは重複ファイルのパスを含むエラーを返します。
Parquetメタデータに無効な UTF-8文字が含まれている場合は、テーブルを作成できません。Parquetメタデータが UTF-8に準拠していることを確認してください。
Snowflakeは、Snowflakeの外部で生成されたParquetメタデータの破損や不整合を検出し、エラーメッセージを通じて問題を表面化します。
テーブルのメタデータに一貫性がなくても、外部で管理された(または変換された)テーブルを作成、リフレッシュ、クエリすることができます。Icebergデータを書き込む場合は、テーブルのメタデータの統計情報(
RowCountやNullCountなど)がデータ内容と一致していることを確認してください。Snowflakeをカタログとして使用するテーブルの場合、Snowflakeは DDL ステートメントを個別に処理し、他のカタログとは異なる方法でメタデータを作成します。詳細については、 DDL ステートメント をご参照ください。
クラスタリング
クラスタリング のサポートはIcebergテーブルの型によって異なります。
テーブルタイプ
注意
SnowflakeをIcebergカタログとして使用するテーブル
CREATE ICEBERG TABLE または ALTER ICEBERG TABLE コマンドのいずれかを使用して、クラスタリングキーを設定します。クラスタリングキーを設定または管理するには、 CREATE ICEBERG TABLE (IcebergカタログとしてのSnowflake) と ALTER ICEBERG TABLE をご参照ください。
外部カタログを使用するテーブル
クラスタリングはサポートされていません。
変換されたテーブル
Snowflakeは、テーブルを変換した後にファイルが作成された場合、または DML ステートメントを使用してファイルが変更された場合にのみ、ファイルをクラスタリングします。
デルタ
SnowflakeはDeltaリーダーバージョン2をサポートしており、Delta Lakeバージョン2.2.0を使用しているエンジンによって書かれたすべてのテーブルを読み込むことができます。
Snowflake ストリームは、パーティション列を持つ Delta テーブル・ファイルから作成された Iceberg テーブルではサポートされません。ただし、パーティション列の ない Delta・ファイルから作成されたテーブルの挿入専用ストリームはサポートされています。
2024_04 リリースバンドルより前に作成されたDeltaファイルから作成されたIcebergテーブルは、動的テーブルではサポートされていません。
Snowflakeは、 AWS Glue Data CatalogのDeltaテーブル定義からIcebergテーブルを作成することをサポートしていません。
以下の機能やデータタイプを使用したParquetファイル(Delta テーブルのデータファイル)はサポートされていません。
フィールド IDs
INTERVAL データ型。
38以上の精度を持つ DECIMAL データ型。
LIST または MAP で、1レベルまたは2レベルの表現を持つタイプ。
符号なし整数型 (INT(signed = false))。
FLOAT16 データ型。
TIMESTAMP にParquet物理タイプ
int96を使用できますが、Snowflakeでは TIMESTAMP_NTZ にint96をサポートしていません。
Deltaデータ型とIcebergテーブルの詳細については、 デルタデータ型 をご参照ください。
Snowflakeは、 CREATE/ALTER ... REFRESH を使用してテーブルをリフレッシュするたびに、最大1000個のデルタコミットファイルを処理します。テーブルのコミットファイルが1000個を超える場合は、さらに手動でリフレッシュできます。毎回、リフレッシュ処理は前回の停止位置から続行されます。
注釈
SnowflakeはIcebergテーブルを作成する際にDeltaチェックポイントファイルを使用します。1,000コミットファイルの制限は、最新のチェックポイント以降のコミットにのみ適用されます。
既存のテーブルを更新する場合、Snowflakeはデルタコミットファイルを処理しますが、チェックポイントファイルは処理しません。テーブルメンテナンスでソースデルタテーブルの古いログとデータファイルが削除された場合、SnowflakeのデルタベースのIcebergテーブルをデルタログとデータファイルの保持期間よりも頻繁に更新する必要があります。
以下のDalta Lakeフィーチャーは現在サポートされていません。行追跡、削除ベクターファイル、変更データファイル、変更メタデータ、 DataChange 、 CDC 、プロトコル進化。
自動リフレッシュ
Snowflakeバージョン8.22(またはDeltaベースのテーブルの場合は9.2)より前に作成されたカタログ統合では、そのカタログ統合に依存するテーブルの自動リフレッシュを有効にする前に、
REFRESH_INTERVAL_SECONDSパラメーターを手動でセットする必要があります。手順については、 ALTER CATALOG INTEGRATION ... SET AUTO_REFRESH をご参照ください。オブジェクトストレージ用カタログ統合 の場合、自動リフレッシュは
TABLE_FORMAT = DELTAとの統合でのみサポートされます。更新頻度が高いテーブルでは、短いポーリング間隔 (
REFRESH_INTERVAL_SECONDS) を使用するとパフォーマンスが低下することがあります。
カタログリンクデータベースと自動テーブル検出
Iceberg REST のカタログ統合(例: Snowflake Open Catalog)を使用する場合にのみサポートされます。
Update: We will start billing sometime in December 2025.
自動テーブル検出を特定の名前空間のセットに制限するには、ALLOWED_NAMESPACES パラメーターを使用します。また、BLOCKED_NAMESPACES パラメーターを使用して名前空間のセットをブロックすることができます。
Snowflakeは、ユーザーまたはロールについて、リモートカタログアクセス制御を同期しません。
カタログリンクデータベースでは、スキーマまたは外部管理のIcebergテーブルを作成できます。その他のSnowflakeオブジェクトの作成は現在サポートされていません。
カタログリンクデータベースでは、データベースロールを作成できません。
レイテンシ:
リモートカタログ内の7,500の名前空間にリンクされたデータベースの場合、名前空間とテーブルの検出には約1時間かかります。
500,000個のテーブルを含むリモートカタログの場合、自動更新処理の完了には約1時間かかります。レイテンシ要件が異なる名前空間については、個別のカタログリンクデータベースを作成することをお勧めします。各データベースは、適切な自動更新間隔(REFRESH_INTERVAL_SECONDS)を設定したカタログ統合を参照する必要があります。
カタログリンクデータベース内のIcebergテーブルの場合:
Snowflakeはリモートカタログテーブルのプロパティ(保持ポリシーやバッファなど)をコピーせず、テーブルプロパティの変更も現在サポートしていません。
自動更新 はデフォルトで有効になっています。外部テーブルとカタログリンクデータベーステーブルの
table-uuidが一致しない場合、更新は失敗し、Snowflakeはカタログリンクデータベースからテーブルを削除します。Snowflakeはリモートテーブルを変更しません。リモートカタログからテーブルを削除すると、Snowflakeはカタログリンクデータベースからテーブルを削除します。このアクションは非同期であるため、リモートカタログに変更がすぐに表示されない可能性があります。
リモートカタログのテーブルの名前を変更すると、Snowflakeはカタログリンクデータベースから既存のテーブルを削除し、新しい名前のテーブルを作成します。
マスキングポリシーとタグはサポートされています。複製やクローン作成などのその他のSnowflake固有の機能はサポートされていません。
NAMESPACE_FLATTEN_DELIMITER パラメーターに選択した文字は、リモート名前空間に表示できません。自動検出プロセス中、Snowflakeは区切り文字を含む名前空間をスキップし、カタログリンクデータベース内に対応するスキーマを作成しません。
NAMESPACE_FLATTEN_DELIMITER パラメーターに
_、$、数字以外の文字を指定する場合、テーブルをクエリするときにスキーマ名を引用符で囲む必要があります。AWS Glueにリンクされたデータベースの場合は、小文字を使用し、スキーマ名、テーブル名、列名を二重引用符で囲む必要があります。これは、小文字の識別子のみをサポートする他のIceberg REST カタログにも必要です。
次の例は、有効なクエリを示しています。
CREATE SCHEMA "s1";次のステートメントは、大文字を使用しているか、二重引用符を省略しているため、有効ではありません。
CREATE SCHEMA s1; CREATE SCHEMA "Schema1";UNDROP ICEBERG TABLE の使用はサポートされていません。
共有:
リスティングとの共有は現在サポートされていません
直接共有はサポートされています
カタログリンクデータベース内のテーブルへの書き込みの場合:
ネストされた名前空間内のテーブルの作成は、現在サポートされていません。
ネストされた名前空間内のテーブルへの書き込みは、現在サポートされていません。
ポジション 行レベルの削除 は、Amazon S3、Azure、またはGoogle Cloudに保存されているテーブルでサポートされます。等価削除ファイルを使用した行レベルの削除はサポートされていません。行レベルの削除の詳細については、 label-tables_iceberg_row_level_deletes`をご参照ください。データ操作言語の位置の削除をオフにするには、コピーオン書き込みモードでの操作(DML)を実行できるようにするため、テーブル、スキーマ、データベースレベルで:code:`ENABLE_ICEBERG_MERGE_ON_READ パラメーターを FALSE に設定します。
外部管理書き込みのサポート
Snowflakeは、`Icebergテーブルの仕様 <https://iceberg.apache.org/spec/>`_のバージョン2を使用するIcebergテーブルの外部管理書き込みをサポートしています。
Snowflakeは外部管理テーブル用のデータ定義言語(DDL)コマンドとデータ操作言語(DML)コマンドを提供しています。ただし、メタデータとデータ保持は、外部カタログと外部ストレージプロバイダーが提供するツールを使用して構成します。詳細については、 外部カタログを使用するテーブル をご参照ください。
書き込みの場合、Snowflakeは、Snowflake内のテーブルを更新する前に、変更がリモートカタログにコミットされるようにします。
カタログリンクデータベースを使用する場合は、列定義を含む CREATE ICEBERG TABLE 構文を使用して、Snowflakeとリモートカタログの両方にテーブルを作成できます。標準のSnowflakeデータベース(カタログにリンクされていない)を使用する場合は、まずリモートカタログでテーブルを作成する必要があります。その後、CREATE ICEBERG TABLE (Iceberg REST カタログ) 構文を使用してSnowflakeにIcebergテーブルを作成し、そこに書き込むことができます。
AWS Glueデータカタログの場合:Snowflakeを通じて外部管理テーブルをドロップしても、基になるテーブルファイルは削除されません。この動作は AWS Glueデータカタログの実装に固有のものです。
ポジション 行レベルの削除 は、Amazon S3、Azure、またはGoogle Cloudに保存されているテーブルでサポートされます。等価削除ファイルを使用した行レベルの削除はサポートされていません。行レベルの削除の詳細については、 label-tables_iceberg_row_level_deletes`をご参照ください。位置の削除をオフにするには、コピーオン書き込みモードでの DML 操作の実行を有効にするため、テーブル、スキーマ、データベースレベルで :code:`ENABLE_ICEBERG_MERGE_ON_READ パラメーターを FALSE に設定します。
以下のIcebergデータ型を使用した外部管理テーブルへの書き込みはサポートされていません。
uuid
fixed(L)Snowflakeを使用して外部管理Icebergテーブルに書き込む場合、以下の機能は現在サポートされていません。
Azure外部ボリュームのサーバー側暗号化(SSE)。
複数ステートメントトランザクション。Snowflakeは自動コミットトランザクションのみをサポートしています。
Snowflake管理テーブルへの変換。
Iceberg REST プロトコルに準拠していない外部Icebergカタログ。
テーブル作成時に OR REPLACE オプションを使用する。
リモートカタログとして AWS Glueを使用する場合は、CREATE TABLE ... AS SELECT 構文を使用します。
カタログリンクデータベースにスキーマを作成する場合は、次の点に注意してください。
CREATESCHEMA コマンドは、カタログリンクデータベースを使用する場合にのみ、リモートカタログに対応する名前空間を作成します。
ALTER および CLONE オプションはサポートされていません。
区切り文字はスキーマ名ではサポートされていません。英数字のスキーマ名のみがサポートされています。
テーブルのParquetファイルのターゲットファイルサイズを設定できます。詳細については、 ターゲットファイルサイズの設定 をご参照ください。
Azureクラウドストレージサービスの場合:Snowflakeは、外部ストレージに以下のサービスを使用するIcebergテーブルに対してのみ、外部管理された書き込みをサポートします。
BLOBストレージ
Data Lake Storage Gen2
汎用v1
汎用v2
Microsoft Fabric OneLake
これらのサービスはblobエンドポイントを使用します。Azure Data Lake Storage Gen2(ADLS)などの分散ファイルシステム(DFS)エンドポイントを使用するサービスは、サポートされていません。外部Iceberg REST カタログを作成する際は、blobエンドポイントをサポートする外部ストレージのサービスを使用してください。
共有:
リスティングとの共有は現在サポートされていません。
直接共有は現在サポートされていません。
サードパーティクライアントによるIcebergのデータ、メタデータへのアクセス
サードパーティクライアントは、Snowflakeをカタログとして使用しているIcebergテーブルへのデータの追加、削除、アップサートはできません。
Table optimization
Snowflake doesn't support orphan file deletion for Snowflake-managed Iceberg tables. If you see a mismatch between storage usage for your external cloud storage and Snowflake, you might have orphan files in your external cloud storage. To see your storage usage for Snowflake, you can use the TABLE_STORAGE_METRICS ビュー or TABLE_STORAGE_METRICS ビュー. If you see a mismatch, contact Snowflake Support for assistance with determining whether you have orphan files and removing them.
For Snowflake-managed Iceberg tables, if a DML operation fails unexpectedly and rolls back, some Parquet files might get written to your external cloud storage but won't be tracked or referenced by your Iceberg table metadata. These Parquet files are orphan files.
External query engines through Snowflake Horizon Catalog
For tables in Snowflake:
Only Snowflake-managed Iceberg tables are supported.
Querying remote or externally managed Iceberg tables including Delta Direct and Parquet Direct tables and Snowflake native tables, aren't supported.
You can query but can't write to Iceberg tables.
The external reads are supported only on Iceberg version 2 or earlier.
This feature is only supported for Snowflake-managed Iceberg tables stored on Amazon S3, Google Cloud, or Azure for all public cloud regions. S3-compatible non-AWS storage is not yet supported.
You can't query an Iceberg table through the Horizon Iceberg REST API if the following fine-grained access control (FGAC) policies are defined on the table:
Row access policies
Column-level security
Snowflake roles that include the hyphen character (-) in the role name aren't supported when you access Iceberg tables through the Horizon Catalog endpoint.
Explicitly granting the Horizon Catalog endpoint access to your storage accounts isn't supported. We recommend that you use private connectivity for secure connectivity from external engines to Horizon Catalog and from Horizon Catalog to storage account.
サポート対象外機能
以下のSnowflake機能は、現在すべてのIcebergテーブルでサポートされていません。
Snowflakeの暗号化
ASSOCIATE_SEMANTIC_CATEGORY_TAGS ストアドプロシージャを使った タグ付け
以下の機能は、外部で管理されるIcebergテーブルではサポートされていません。