CREATE DATABASE(カタログリンク)¶
Iceberg REST カタログを使用する Apache Iceberg™ テーブル用の新しい カタログリンクデータベース を作成します。
構文¶
CREATE DATABASE <name>
LINKED_CATALOG = ( catalogParams ),
[ EXTERNAL_VOLUME = '<external_vol>' ]
[ COMMENT = '<string_literal>' ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
[ CATALOG_CASE_SENSITIVITY = { CASE_SENSITIVE | CASE_INSENSITIVE } ]
[ WITH CONTACT ( <purpose> = <contact_name> [ , <purpose> = <contact_name> ... ] ) ]
条件:
catalogParams ::= CATALOG = '<catalog_int>', [ ALLOWED_NAMESPACES = ('<namespace1>', '<namespace2>', ... ) ] [ BLOCKED_NAMESPACES = ('<namespace1>', '<namespace2>', ... ) ] [ ALLOWED_WRITE_OPERATIONS = { NONE | ALL } ] [ NAMESPACE_MODE = { IGNORE_NESTED_NAMESPACE | FLATTEN_NESTED_NAMESPACE } ] [ NAMESPACE_FLATTEN_DELIMITER = '<string_literal>' ] [ SYNC_INTERVAL_SECONDS = <value> ]
必須パラメーター¶
nameカタログリンクデータベースの識別子を指定します。アカウントに対して一意である必要があります。
また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例:
"My object")。二重引用符で囲まれた識別子も大文字と小文字が区別されます。詳細については、 識別子の要件 をご参照ください。
オプションのパラメーター¶
EXTERNAL_VOLUME = my_external_volリモートIcebergテーブルのデータとメタデータへのアクセスを提供する 外部ボリューム を指定します。
ベンディングされた認証情報 を使用する場合は必要ありません。
COMMENT = 'string_literal'データベースのコメントを指定します。
デフォルト: 値なし
CATALOG_CASE_SENSITIVITY = { CASE_SENSITIVE | CASE_INSENSITIVE }外部Icebergカタログが識別子に使用する大文字と小文字の区別を指定します。
CASE_SENSITIVE:外部Icebergカタログでは、大文字と小文字を区別する識別子が使用されます。たとえば、Snowflake Open Catalogは大文字と小文字を区別するカタログです。Snowflakeは、大文字小文字を含め、識別子の表示を正確に照合します。Snowflakeは引用符で囲まれていない識別子を自動的に大文字に変換しますが、引用符で囲まれている識別子は外部カタログの大文字と正確に一致する必要があります。
ただし、外部Icebergカタログで実際に大文字と小文字が区別されず、小文字に正規化される場合は、識別子を二重引用符で囲む必要があります。
これらの要件は、既存のスキーマ、テーブル、テーブル列の識別にのみ適用されます。
CASE_INSENSITIVE:外部Icebergカタログでは、大文字と小文字を区別しない識別子が使用されます。たとえば、Unity Catalogと AWS Glueは大文字と小文字を区別しないカタログです。外部Icebergカタログで大文字と小文字が区別されず、以下のコマンドを実行する場合、識別子を二重引用符で囲む必要があります。
CREATE ICEBERG TABLE
CREATE SCHEMA
ALTER ICEBERG TABLE ADD COLUMN
ALTER ICEBERG TABLE RENAME COLUMN
ただし、外部Icebergカタログが実際に大文字と小文字を区別する場合、Snowflakeは引用符で囲まれていない識別子は大文字と小文字を区別しないものとして扱い、引用符で囲まれていない識別子を自動的に大文字に変換します。オブジェクトを作成またはクエリするとき、Snowflakeは、識別子が引用符で囲まれていない限り、大文字と小文字の区別なく照合します。
Snowflakeは大文字小文字の区別が異なる2つの別の識別子を解決できないため、このパターンの使用は推奨されません。このパターンは、大文字小文字が違うだけの識別子がない場合にのみ機能します。
特に断りのない限り、これらの要件は、既存のスキーマ、テーブル、テーブル列の識別にのみ適用されます。
デフォルト:
CASE_INSENSITIVE識別子の解決に必要な要件(例を含む)については、 カタログリンクデータベースにおける識別子の解決の要件 をご参照ください。
TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )タグ の名前とタグ文字列の値を指定します。
タグ値は常に文字列であり、タグ値の最大文字数は256です。
ステートメントでのタグの指定に関する情報については、 タグの割り当て をご参照ください。
WITH CONTACT ( purpose = contact [ , purpose = contact ...] )新しいオブジェクトを1つ以上の 連絡先 に関連付けます。
カタログパラメーター(catalogParams)¶
CATALOG = catalog_intカタログ統合の名前を指定します。
ALLOWED_NAMESPACES = ('namespace1', 'namespace2', ... )オプションで、自動テーブル検出の範囲を制限するために、リモートカタログで1つ以上の名前空間を指定します。Snowflakeは、指定された名前空間と、それらの下にネストされているすべての名前空間とテーブルを同期します。ネストされた名前空間が ALLOWED_NAMESPACES リストにあっても、NAMESPACE_MODE パラメーターを IGNORE_NESTED_NAMESPACE に設定している場合、Snowflakeはネストされた名前空間またはそのスキーマとテーブルを同期しません。
BLOCKED_NAMESPACES = ('namespace1', 'namespace2', ... )オプションで、自動テーブル検出をブロックするために、リモートカタログで1つ以上の名前空間を指定します。
Snowflakeは、指定された名前空間と、それらの下にネストされているすべての名前空間とテーブルをブロックします。
ALLOWED_NAMESPACES と BLOCKED_NAMESPACES 両方を指定した場合、BLOCKED_NAMESPACES リストが優先されます。たとえば、
ns1.ns2が許可されていても、ns1がブロックされている場合、Snowflakeはns1.ns2を同期しません。ALLOWED_WRITE_OPERATIONS = { NONE | ALL }カタログリンクデータベースが読み取り専用か書き込み可能かを指定します。
NONE:カタログリンクデータベースは読み取り専用です。カタログリンクデータベースが読み取り専用である場合、カタログへのコミットを必要とする操作を実行すると、すべて失敗します。たとえば、 DROP ICEBERG TABLE などです。
ALL:カタログリンクデータベースは書き込み可能です。警告
カタログリンクデータベースの書き込み権限が有効になっている場合、Snowflakeはテーブルの削除をリモートカタログに伝播し、両方のシステムからテーブルとデータが削除されます。
デフォルト:
ALLNAMESPACE_MODE = { IGNORE_NESTED_NAMESPACE | FLATTEN_NESTED_NAMESPACE }Snowflakeがカタログリンクデータベース内のIcebergテーブルの名前空間を処理する方法を指定します。
IGNORE_NESTED_NAMESPACE:Snowflakeは、カタログの最初の名前空間レベルにあるテーブルのみをリンクします。FLATTEN_NESTED_NAMESPACE:Snowflakeは、カタログのすべての名前空間レベルにあるテーブルをリンクします。ネストされた名前空間のテーブルの場合、Snowflakeは NAMESPACE_FLATTEN_DELIMITER パラメーターを使用してフラット化された名前空間を構築します。このオプションでは、NAMESPACE_FLATTEN_DELIMITER パラメーターを設定する必要があります。たとえば、
namespace3aa名前空間にあるiceberg_table_5というテーブルについて考えてみましょう。my_catalog_linked_db |-- namespace3 | |-- namespace3a | |-- namespace3aa | |-- iceberg_table_5
NAMESPACE_FLATTEN_DELIMITER = "/"を設定した場合は、"my_catalog_linked_db"."namespace3/namespace3a/namespace3aa"."iceberg_table_5"を指定してテーブルを参照できます。
デフォルト:
IGNORE_NESTED_NAMESPACENAMESPACE_FLATTEN_DELIMITER = 'string_literal'NAMESPACE_MODE = FLATTEN_NESTED_NAMESPACE に設定した場合に必要です。Snowflakeがカタログ内のテーブルのフラット化された名前空間を構築するために使用する区切り文字を指定します。
重要
区切り文字に選択した文字は、リモート名前空間に表示できません。自動検出プロセス中、Snowflakeは区切り文字を含む名前空間をスキップし、カタログリンクデータベース内に対応するスキーマを作成しません。
有効な文字:Snowflake識別子 で許可される文字。
SYNC_INTERVAL_SECONDS = valueリモートカタログ内のスキーマとテーブルを自動的に検出するためにSnowflakeが使用する時間間隔を秒単位で指定します。
値:30から86400(1日)まで
デフォルト:30秒
アクセス制御の要件¶
この操作の実行に使用される ロール には、少なくとも次の 権限 が必要です。
権限 |
オブジェクト |
メモ |
|---|---|---|
CREATE DATABASE |
アカウント |
新しいデータベースを作成するために必要です。 Only the SYSADMIN role, or a higher role, has this privilege by default. The privilege can be granted to additional roles as needed. |
USAGE |
外部ボリューム |
既存の外部ボリュームを参照するために必要です。 |
USAGE |
カタログ統合 |
既存のカタログ統合を参照するために必要です。 |
指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。
セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。
使用上の注意¶
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 に設定します。
ALLOWED_NAMESPACES と BLOCKED_NAMESPACES の場合、そのセットにすでに親名前空間が含まれていたら、Snowflakeはネストされた名前空間を保存しません。たとえば、データベースを作成し、
ALLOWED_NAMESPACES = ('ns1', 'ns1.ns2', 'ns1.ns3')を指定した場合、Snowflakeは他の2つが自動的に含まれるため、ns1のみを保存します。例のデータベースで GET_DDL を使用すると、SnowflakeはALLOWED_NAMESPACES = ('ns1')を返します。BLOCKED_NAMESPACES にも同じことが当てはまります。カタログリンクデータベース内のテーブルをクエリする場合:
Snowflakeは、引用符で囲まれていない識別子(テーブル名と列名)を自動的に大文字に変換します。外部Icebergカタログで大文字と小文字を区別する識別子を使用する場合は、テーブル名と列名を二重引用符で囲む必要があります。
オブジェクト識別子の詳細については、識別子の要件 をご参照ください。
メタデータについて:
注意
Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。
例¶
外部ボリュームを使用する、フラット化されネスト化された名前空間を持つカタログリンクデータベースを作成します。
CREATE DATABASE my_linked_db
LINKED_CATALOG = (
CATALOG = 'my_catalog_int',
NAMESPACE_MODE = FLATTEN_NESTED_NAMESPACE,
NAMESPACE_FLATTEN_DELIMITER = '-'
)
EXTERNAL_VOLUME = 'my_external_vol';
ベンディングされた認証情報を使用し、許可された名前空間を指定するカタログリンクデータベースを作成します。
CREATE DATABASE my_linked_db
LINKED_CATALOG = (
CATALOG = 'my_catalog_int_vended_creds',
ALLOWED_NAMESPACES = ('my_namespace')
);