Apache Iceberg™ テーブルにはカタログリンクデータベースを使用します¶
注釈
We will start billing for catalog-linked databases on November 17, 2025.
カタログリンクデータベースを使用すると、個別の 外部管理テーブル を作成することなく、Snowflakeから複数のリモートIcebergテーブルにアクセスできます。
カタログリンクデータベースは、外部Iceberg REST カタログに接続されたSnowflakeデータベースです。Snowflakeは外部カタログと自動的に同期して名前空間とIcebergテーブルを検出し、リモートテーブルをカタログリンクデータベースに登録します。カタログリンクデータベースは、スキーマやIcebergテーブルの作成と削除もサポートしています。
Billing for catalog-linked databases¶
2025年11月17日に請求が開始したら、Snowflakeはお客様のアカウントの以下の使用について課金します。
テーブルの自動検出、スキーマの作成、スキーマの削除、テーブルの削除。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(カタログリンク) コマンドでカタログリンクデータベースを作成します。
The following example creates a catalog-linked database that uses vended credentials. The sync interval is 30 seconds, which is the default. The sync interval tells Snowflake how often to poll your remote catalog.
CREATE DATABASE my_linked_db
LINKED_CATALOG = (
CATALOG = 'my_catalog_int'
);
注釈
To create a catalog-linked database that uses an external volume, see CREATE DATABASE(カタログリンク), including the example.
Your catalog-linked database includes a link icon.
カタログの同期ステータスを確認する¶
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 ステートメントを使用してリモートテーブルをクエリできます。
注釈
カタログリンクデータベースでオブジェクトを識別するための要件については、 Requirements for identifier resolution in a catalog-linked database をご参照ください。
オブジェクト識別子の詳細については、識別子の要件 をご参照ください。
例:
USE DATABASE my_linked_db;
SELECT * FROM my_namespace.my_iceberg_table
LIMIT 20;
リモートカタログへの書き込み¶
Snowflakeを使用して、リンクされたカタログに名前空間とIcebergテーブルを作成できます。詳細については、次のトピックをご参照ください。
Requirements for identifier resolution in a catalog-linked database¶
識別子を解決するための要件は以下に依存します。
カタログリンクデータベースの作成 時に CATALOG_CASE_SENSITIVITY パラメーターに指定した値。
外部Icebergカタログの使用する識別子が大文字と小文字を区別するか、区別しないか。
注釈
これらの要件は、既存のスキーマ、テーブル、テーブル列の識別に適用されます。また、オブジェクトを作成したり変更したりするための特殊なケースも含まれています。
When you create a new schema, table, or column in a case-sensitive catalog such as AWS Glue or Unity Catalog, you must use lowercase letters and surround the schema, table, and column names in double quotes. This is also required for other Iceberg REST catalogs that only support lowercase identifiers.
以下の表は、各シナリオの要件を示しています。
CATALOG_CASE_SENSITIVITY 値 |
外部Icebergカタログが使用する識別子 |
要件 |
|---|---|---|
CASE_SENSITIVE |
大文字と小文字を区別する識別子 |
Snowflakeは、大文字小文字を含め、識別子の表示を正確に照合します。Snowflakeは引用符で囲まれていない識別子を自動的に大文字に変換しますが、引用符で囲まれている識別子は外部カタログの大文字と正確に一致する必要があります。 The following example shows a valid query for creating a table: CREATE TABLE "Table1" (id INT, name STRING);
Snowflakeは、外部カタログに The following example shows a valid query for selecting the SELECT * FROM "Table1";
前の例では、大文字と小文字を正確に一致させるために二重引用符が必要です。 The following example shows an invalid query, unless a SELECT * FROM table1;
前の例では、識別子が二重引用符で囲まれていないため、 次の例は、すべて大文字の SELECT * FROM TABLE1;
|
CASE_SENSITIVE |
大文字と小文字を区別しない識別子 |
外部Icebergカタログで実際に大文字と小文字が区別されず、小文字に正規化される場合は、識別子を二重引用符で囲む必要があります。 The following example shows valid queries: 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テーブルにカタログリンクデータベースを使用する際の考慮事項¶
Consider the following items when you use a catalog-linked database:
Iceberg REST のカタログ統合(例: Snowflake Open Catalog)を使用する場合にのみサポートされます。
2025年11月17日より課金を開始いたします。
自動テーブル検出を特定の名前空間のセットに制限するには、ALLOWED_NAMESPACES パラメーターを使用します。また、BLOCKED_NAMESPACES パラメーターを使用して名前空間のセットをブロックすることができます。
Snowflake doesn't sync remote catalog access control for users or roles.
カタログリンクデータベースでは、スキーマまたは外部管理のIcebergテーブルを作成できます。その他のSnowflakeオブジェクトの作成は現在サポートされていません。
You can't create database roles in a catalog-linked database.
レイテンシ:
リモートカタログ内の7,500の名前空間にリンクされたデータベースの場合、名前空間とテーブルの検出には約1時間かかります。
500,000個のテーブルを含むリモートカタログの場合、自動更新処理の完了には約1時間かかります。レイテンシ要件が異なる名前空間については、個別のカタログリンクデータベースを作成することをお勧めします。各データベースは、適切な自動更新間隔(REFRESH_INTERVAL_SECONDS)を設定したカタログ統合を参照する必要があります。
カタログリンクデータベース内のIcebergテーブルの場合:
Snowflakeはリモートカタログテーブルのプロパティ(保持ポリシーやバッファなど)をコピーせず、テーブルプロパティの変更も現在サポートしていません。
自動更新 はデフォルトで有効になっています。外部テーブルとカタログリンクデータベーステーブルの
table-uuidが一致しない場合、更新は失敗し、Snowflakeはカタログリンクデータベースからテーブルを削除します。Snowflakeはリモートテーブルを変更しません。リモートカタログからテーブルを削除すると、Snowflakeはカタログリンクデータベースからテーブルを削除します。このアクションは非同期であるため、リモートカタログに変更がすぐに表示されない可能性があります。
リモートカタログのテーブルの名前を変更すると、Snowflakeはカタログリンクデータベースから既存のテーブルを削除し、新しい名前のテーブルを作成します。
Masking policies and tags are supported. Other Snowflake-specific features, including replication and cloning, aren't supported.
The character that you choose for the NAMESPACE_FLATTEN_DELIMITER parameter can't appear in your remote namespaces. During the auto discovery process, Snowflake skips any namespace that contains the delimiter, and doesn't create a corresponding schema in your catalog-linked database.
If you specify anything other than
_,$, or numbers for the NAMESPACE_FLATTEN_DELIMITER parameter, you must put the schema name in quotes when you query the table.AWS Glue にリンクされたデータベースの場合は、小文字を使用し、スキーマ名、テーブル名、列名を二重引用符で囲む必要があります。これは、小文字の識別子のみをサポートする他のIceberg REST カタログにも必要です。
次の例は、有効なクエリを示しています。
CREATE SCHEMA "s1";
次のステートメントは、大文字を使用しているか、二重引用符を省略しているため、有効ではありません。
CREATE SCHEMA s1; CREATE SCHEMA "Schema1";
UNDROP ICEBERG TABLE の使用はサポートされていません。
共有:
リスティングとの共有は現在サポートされていません
直接共有はサポートされています
カタログリンクデータベース内のテーブルへの書き込みの場合:
Creating tables in nested namespaces isn't currently supported.
ネストされた名前空間内のテーブルへの書き込みは、現在サポートされていません。
ポジション 行レベルの削除 はAmazon S3、Azure、またはGoogle Cloudに保存されているテーブルでサポートされます。等価削除ファイルを使用した行レベルの削除はサポートされていません。行レベルの削除の詳細については、 label-tables_iceberg_row_level_deletes`をご参照ください。データ操作言語の位置の削除をオフにするには、コピーオン書き込みモードでの操作(DML)を実行できるようにするため、テーブル、スキーマ、データベースレベルで:code:`ENABLE_ICEBERG_MERGE_ON_READ パラメーターを FALSE に設定します。