Apache Iceberg™ テーブルにはカタログリンクデータベースを使用します¶
カタログリンクデータベースを使用すると、個別の 外部管理テーブル を作成することなく、Snowflakeから複数のリモートIcebergテーブルにアクセスできます。
カタログリンクデータベースは、外部Iceberg REST カタログに接続されたSnowflakeデータベースです。Snowflakeは外部カタログと自動的に同期して名前空間とIcebergテーブルを検出し、リモートテーブルをカタログリンクデータベースに登録します。カタログリンクデータベースは、スキーマやIcebergテーブルの作成と削除もサポートしています。
Icebergテーブルにカタログリンクデータベースを使用する際の考慮事項¶
重要
プレビュー期間中は、カタログリンクデータベースは読み取り専用モードをサポートしていません。テーブルを削除したりデータを書き込んだりすると、それらの変更はリモートカタログにも反映されます。
カタログリンクデータベースを使用する場合は、次の点を考慮してください。
Iceberg REST のカタログ統合(例: Snowflake Open Catalog)を使用する場合にのみサポートされます。
請求:プレビュー期間中、Snowflakeはカタログリンクデータベースに対して課金しません。課金は、Apache Iceberg™ カタログリンクデータベースが一般提供開始された時点で開始されます。
自動テーブル検出を特定の名前空間のセットに制限するには、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 の使用はサポートされていません。
外部ボリュームを使用するテーブルでは、リストとの共有がサポートされます。直接共有は現在サポートされていません。
カタログリンクデータベース内のテーブルへの書き込みの場合:
ベンディングされた認証情報はサポートされていません。
ネストされた名前空間内のテーブルへの書き込みは、現在サポートされていません。
外部カタログとテーブルストレージへのアクセスを構成するワークフロー¶
以下の手順では、カタログリンクデータベースを作成し、Snowflakeとカタログ間の同期ステータスを確認し、データベースにテーブルを作成またはクエリする方法について説明します。
外部カタログとテーブルストレージへのアクセスを構成する¶
カタログリンクデータベースを作成する前に、次のオプションのいずれかを選択して、外部カタログとテーブルストレージへのアクセスを構成します。
オプション1:外部ボリュームとカタログ統合を構成する¶
このオプションを使用すると、外部ボリューム と、カタログ統合 を構成できます。リモートIcebergカタログが認証情報ベンディングをサポートしていない場合や、リモートカタログ内のIcebergテーブルに書き込む場合は、このオプションを選択します。
まず、リモートIcebergテーブルのデータとメタデータを保存するクラウドストレージサービス用の外部ボリュームを構成します。
次に、リモートIcebergカタログのカタログ統合を構成します。
オプション2:ベンディングされた認証情報を使用してカタログ統合を構成する¶
注釈
この機能は、Amazon S3にデータとメタデータを保存するテーブルでのみサポートされます。このオプションは現在、外部書き込みではサポートされていません。
このオプションを使用する場合、リモートIcebergカタログで認証情報ベンディングがサポートされている必要があります。
手順については、 Apache Iceberg™ テーブルには、カタログ提供認証情報を使用します。 をご参照ください。
カタログリンクデータベースの作成¶
CREATE DATABASE(カタログリンク) コマンドでカタログリンクデータベースを作成します。
次の例では、外部ボリュームを使用するカタログリンクデータベースを作成します。同期間隔を60秒に指定します(デフォルトは30秒)。同期間隔は、リモートカタログをポーリングする頻度をSnowflakeに指示します。
CREATE DATABASE my_linked_db
LINKED_CATALOG = (
CATALOG = 'my_catalog_int',
BLOCKED_NAMESPACES = ('my_blocked_namespace'),
NAMESPACE_MODE = FLATTEN_NESTED_NAMESPACE,
NAMESPACE_FLATTEN_DELIMITER = '-'
SYNC_INTERVAL_SECONDS = 60
)
EXTERNAL_VOLUME = 'my_external_vol';
注釈
この例では、NAMESPACE_MODE = FLATTEN_NESTED_NAMESPACE
を指定しています。これは、カタログの*すべての*名前空間レベルのテーブルをリンクするようにSnowflakeに指示しています。ネストされた名前空間内のテーブルの場合、Snowflakeは NAMESPACE_FLATTEN_DELIMITER パラメーターを使用して、フラット化された名前空間を構築します。
詳細については、 CREATE DATABASE(カタログリンク) をご参照ください。
あるいは、ベンディングされた認証情報を使用するカタログリンクデータベースを作成します。この例では、許可される名前空間も1つ指定します。
CREATE DATABASE my_linked_db
LINKED_CATALOG = (
CATALOG = 'my_catalog_int_vended_creds',
ALLOWED_NAMESPACES = ('my_namespace')
);
カタログの同期ステータスを確認する¶
Snowflakeがリモートカタログをデータベースに正常にリンクしたかどうかを確認するには SYSTEM$CATALOG_LINK_STATUS 関数を使用します。
この関数は、同期に失敗したリモートカタログ内のテーブルを特定するのに役立つ情報も提供します。
SELECT SYSTEM$CATALOG_LINK_STATUS('my_linked_db');
カタログリンクデータベース内のテーブルをクエリする¶
カタログリンクデータベースを作成すると、Snowflakeはテーブル検出プロセスを開始し、SYNC_INTERVAL_SECONDS パラメーターの値(デフォルトでは30秒間隔)を使用して、リンクされたカタログを自動的にポーリングし、変更を確認します。
データベース内では、リモートカタログからの許可された名前空間がスキーマとして表示され、Icebergテーブルがそれぞれのスキーマの下に表示されます。
SELECT ステートメントを使用してリモートテーブルをクエリできます。
注釈
Snowflakeは、引用符で囲まれていない識別子(テーブル名と列名)を自動的に大文字に変換します。外部Icebergカタログで大文字と小文字を区別する識別子を使用する場合は、テーブル名と列名を二重引用符で囲む必要があります。
オブジェクト識別子の詳細については、識別子の要件 をご参照ください。
例:
USE DATABASE my_linked_db;
SELECT * FROM my_namespace.my_iceberg_table
LIMIT 20;
リモートカタログへの書き込み¶
Snowflakeを使用して、リンクされたカタログに名前空間とIcebergテーブルを作成できます。詳細については、次のトピックをご参照ください。