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>' , ... ] ) ]
条件:
catalogParams ::= CATALOG = '<catalog_int>', [ ALLOWED_NAMESPACES = ('<namespace1>', '<namespace2>', ... ) ] [ BLOCKED_NAMESPACES = ('<namespace1>', '<namespace2>', ... ) ] [ 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'
データベースのコメントを指定します。
デフォルト: 値なし
TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )
タグ の名前とタグ文字列の値を指定します。
タグ値は常に文字列であり、タグ値の最大文字数は256です。
ステートメントでのタグの指定に関する情報については、 オブジェクトのタグクォータ をご参照ください。
カタログパラメーター(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
を同期しません。NAMESPACE_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_NAMESPACE
NAMESPACE_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)を使用する場合にのみサポートされます。
請求:プレビュー期間中、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 の使用はサポートされていません。
外部ボリュームを使用するテーブルでは、リストとの共有がサポートされます。直接共有は現在サポートされていません。
カタログリンクデータベース内のテーブルへの書き込みの場合:
ベンディングされた認証情報はサポートされていません。
ネストされた名前空間内のテーブルへの書き込みは、現在サポートされていません。
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')
);