Apache Iceberg™ テーブルにはカタログリンクデータベースを使用します¶
注釈
Update: We will start billing for catalog-linked databases sometime in December 2025.
カタログリンクデータベースを使用すると、個別の 外部管理テーブル を作成することなく、Snowflakeから複数のリモートIcebergテーブルにアクセスできます。
カタログリンクデータベースは、外部Iceberg REST カタログに接続されたSnowflakeデータベースです。Snowflakeは外部カタログと自動的に同期して名前空間とIcebergテーブルを検出し、リモートテーブルをカタログリンクデータベースに登録します。カタログリンクデータベースは、スキーマやIcebergテーブルの作成と削除もサポートしています。
カタログリンクデータベースの請求¶
When billing starts sometime in December 2025, Snowflake bills your account for the following usage:
テーブルの自動検出、スキーマの作成、スキーマの削除、テーブルの削除。Snowflakeは、これらの使用量について、CREDITS_USED_CLOUD_SERVICES 使用タイプでお客様のアカウントに請求します。クラウドサービスの使用量は、クラウドサービスの日次消費量が仮想ウェアハウスの日次使用量の10%を超えた場合にのみ請求されます。詳細については、 クラウドサービスの使用に対する請求について をご参照ください。
テーブルの作成。Snowflakeは、この使用量について、自動リフレッシュを通じて、CREDITS_USED_COMPUTE 使用タイプでお客様のアカウントに請求します。この使用量にかかるコストは、Snowflakeウェブサイトにある Snowflakeサービス利用表 のTable 5で説明されています。「Automated Refresh and Data Registration」行の、「Snowflake-managed compute」列をご参照ください。
Snowflakeでは、テーブル作成時に使用したクラウドサービスの料金は請求しません。
注釈
課金が開始されると、カタログリンクデータベースのクレジット使用状況を確認できる新しいビュー CATALOG_LINKED_DATABASE_USAGE_HISTORY がリリースされます。
外部カタログとテーブルストレージへのアクセスを構成するワークフロー¶
以下の手順では、カタログリンクデータベースを作成し、Snowflakeとカタログ間の同期ステータスを確認し、データベースにテーブルを作成またはクエリする方法について説明します。
外部カタログとテーブルストレージへのアクセスを構成する¶
カタログリンクデータベースを作成する前に、外部カタログとテーブルストレージへのアクセスを構成する必要があります。このアクセスを構成するため、ベンディングされた認証情報でカタログ統合を構成します。このオプションを使用する場合、リモートIcebergカタログで認証情報ベンディングがサポートされている必要があります。
手順については、 Apache Iceberg™ テーブルには、カタログ提供認証情報を使用します。 をご参照ください。
注釈
リモートのIcebergカタログが認証情報ベンディングをサポートしていない場合は、外部カタログとテーブルストレージへのアクセスを構成するために 外部ボリューム および カタログ統合 を構成する必要があります。まず、 クラウドストレージプロバイダーの外部ボリュームを構成します 。次に、 リモートのIcebergカタログについて、Apache Iceberg™ REST カタログ統合を構成します 。
カタログリンクデータベースの作成¶
CREATE DATABASE(カタログリンク) コマンドでカタログリンクデータベースを作成します。
次の例では、ベンディングされた認証情報を使用するカタログリンクデータベースを作成します。同期間隔は30秒で、これがデフォルトです。同期間隔は、リモートカタログをポーリングする頻度をSnowflakeに指示します。
CREATE DATABASE my_linked_db
LINKED_CATALOG = (
CATALOG = 'my_catalog_int'
);
注釈
外部ボリュームを使用するカタログリンクデータベースを作成するには、 例 を含む CREATE DATABASE(カタログリンク) をご参照ください。
カタログリンクデータベースには、リンクアイコンが含まれています。
カタログの同期ステータスを確認する¶
Snowflakeがリモートカタログをデータベースに正常にリンクしたかどうかを確認するには SYSTEM$CATALOG_LINK_STATUS 関数を使用します。
この関数は、同期に失敗したリモートカタログ内のテーブルを特定するのに役立つ情報も提供します。
SELECT SYSTEM$CATALOG_LINK_STATUS('my_linked_db');
作成されたが初期化できなかったテーブルを特定する¶
同期には成功したが、自動リフレッシュに失敗したリモートカタログのテーブルを特定するには、 SHOW ICEBERG TABLES コマンドを実行し、出力の auto_refresh_status 列を参照します。出力のこれらのテーブルには、 ICEBERG_TABLE_NOT_INITIALIZED の executionState があります。
たとえば、Snowflakeがあるテーブルをリモートカタログ内で正常に検出し、カタログリンクされたデータベースに作成するが、リモートカタログ内のテーブルでデータファイルが破損している場合です。その結果、エラーを解決するまで、Snowflakeはテーブルを自動リフレッシュできません。
この種のテーブルでは自動リフレッシュがオフになっているため、Snowflakeでテーブルにクエリを実行すると、テーブルが初期化されていないというエラーが返されます。テーブルをクエリするには、エラーを修正し、 テーブルの自動リフレッシュをオンにする 必要があります。
カタログリンクデータベース内のテーブルをクエリする¶
カタログリンクデータベースを作成すると、Snowflakeはテーブル検出プロセスを開始し、SYNC_INTERVAL_SECONDS パラメーターの値(デフォルトでは30秒間隔)を使用して、リンクされたカタログを自動的にポーリングし、変更を確認します。
データベース内では、リモートカタログからの許可された名前空間がスキーマとして表示され、Icebergテーブルがそれぞれのスキーマの下に表示されます。
SELECT ステートメントを使用してリモートテーブルをクエリできます。
注釈
カタログリンクデータベースでオブジェクトを識別するための要件については、 カタログリンクデータベースにおける識別子の解決の要件 をご参照ください。
オブジェクト識別子の詳細については、識別子の要件 をご参照ください。
例:
USE DATABASE my_linked_db;
SELECT * FROM my_namespace.my_iceberg_table
LIMIT 20;
リモートカタログへの書き込み¶
Snowflakeを使用して、リンクされたカタログに名前空間とIcebergテーブルを作成できます。詳細については、次のトピックをご参照ください。
カタログリンクデータベースにおける識別子の解決の要件¶
識別子を解決するための要件は以下に依存します。
カタログリンクデータベースの作成 時に CATALOG_CASE_SENSITIVITY パラメーターに指定した値。
外部Icebergカタログの使用する識別子が大文字と小文字を区別するか、区別しないか。
注釈
これらの要件は、既存のスキーマ、テーブル、テーブル列の識別に適用されます。また、オブジェクトを作成したり変更したりするための特殊なケースも含まれています。
AWS GlueやUnity Catalogなどの大文字と小文字を区別するカタログで新しいスキーマ、テーブル、列を作成する場合は、小文字を使用し、スキーマ名、テーブル名、列名を二重引用符で囲む必要があります。これは、小文字の識別子のみをサポートする他のIceberg REST カタログにも必要です。
以下の表は、各シナリオの要件を示しています。
CATALOG_CASE_SENSITIVITY 値 |
外部Icebergカタログが使用する識別子 |
要件 |
|---|---|---|
CASE_SENSITIVE |
大文字と小文字を区別する識別子 |
Snowflakeは、大文字小文字を含め、識別子の表示を正確に照合します。Snowflakeは引用符で囲まれていない識別子を自動的に大文字に変換しますが、引用符で囲まれている識別子は外部カタログの大文字と正確に一致する必要があります。 次の例は、テーブルを作成するための有効なクエリを示しています。 CREATE TABLE "Table1" (id INT, name STRING);
Snowflakeは、外部カタログに 次の例は、 SELECT * FROM "Table1";
前の例では、大文字と小文字を正確に一致させるために二重引用符が必要です。 次の例は、 SELECT * FROM table1;
前の例では、識別子が二重引用符で囲まれていないため、 次の例は、すべて大文字の SELECT * FROM TABLE1;
|
CASE_SENSITIVE |
大文字と小文字を区別しない識別子 |
外部Icebergカタログで実際に大文字と小文字が区別されず、小文字に正規化される場合は、識別子を二重引用符で囲む必要があります。 次の例は、有効なクエリを示しています。 SELECT * from "s1";
SELECT * from "lowercasetablename";
|
CASE_INSENSITIVE |
大文字と小文字を区別しない識別子 |
|
CASE_INSENSITIVE |
大文字と小文字を区別する識別子 |
外部Icebergカタログが実際に大文字と小文字を区別する場合、Snowflakeは引用符で囲まれていない識別子は大文字と小文字を区別しないものとして扱い、引用符で囲まれていない識別子を自動的に大文字に変換します。オブジェクトを作成またはクエリするとき、Snowflakeは、識別子が引用符で囲まれていない限り、大文字と小文字の区別なく照合します。 Snowflakeは大文字小文字の区別が異なる2つの別の識別子を解決できないため、このパターンの使用は推奨されません。このパターンは、大文字小文字が違うだけの識別子がない場合にのみ機能します。 リモートカタログに SELECT * from table1;
SELECT * from TABLE1;
SELECT * from Table1;
SELECT * from "Table1";
引用符で囲まれた識別子は大文字と小文字の区別を維持し、正確に照合されます。ただし、CASE_INSENSITIVE モードでは、引用符で囲まれない形式と引用符で囲まれる形式の両方がサポートされます。 |
Icebergテーブルにカタログリンクデータベースを使用する際の考慮事項¶
カタログリンクデータベースを使用する場合は、次の項目を考慮してください。
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 に設定します。