Icebergテーブルのカタログ統合を構成する¶
このトピックでは、Icebergテーブルの カタログ統合 を作成および構成するのに役立つ情報を提供します。外部Icebergカタログを使用する、またはカタログを一切使用しないIcebergテーブルを作成するには、カタログ統合を指定する必要があります。
注釈
カタログ統合が必要なのは、外部Icebergカタログを使用して読み取り専用のIcebergテーブルを作成する場合のみです。SnowflakeをIcebergカタログとして使用するIcebergテーブルを作成するには、カタログ統合は必要ありません。カタログとしてSnowflakeを使用するには、 CREATE ICEBERG TABLE コマンドで CATALOG
パラメーターを SNOWFLAKE
に設定します。
カタログ統合を使用する¶
CREATE CATALOG INTEGRATION コマンドを使用すると、Icebergテーブルのカタログ統合を作成できます。
例: オブジェクトストレージ内でIcebergファイルのカタログ統合を作成する¶
次の例のステートメントは、 OBJECT_STORE
を CATALOG_SOURCE
値として設定することで、外部クラウドストレージの場所にあるIcebergメタデータのカタログ統合を作成します。
CREATE OR REPLACE CATALOG INTEGRATION icebergCatalogInt
CATALOG_SOURCE=OBJECT_STORE
TABLE_FORMAT=ICEBERG
ENABLED=TRUE;
カタログ統合を作成したら、 Icebergテーブルを作成 できます。
AWS Glueのカタログ統合を設定する¶
このセクションでは AWS Glueのカタログ統合を作成し、SnowflakeにAmazon Glueデータカタログへの制限付きアクセス権を付与する方法について説明します。
注釈
このセクションの手順を完了するには、 IAM ポリシーとロールを作成および管理するためにAmazon Web Services(AWS)での権限が必要です。AWS 管理者でない場合は、 AWS 管理者にこれらのタスクを実行するように依頼します。
ステップ1: AWS Glueデータカタログのアクセス許可を構成する¶
ベストプラクティスとして、SnowflakeがGlueデータカタログにアクセスするための新しい IAM ポリシーを作成します。その後、ポリシーを IAM ロールに添付し、ロールのために AWS が生成するセキュリティ認証情報を使用して、カタログ内のファイルにアクセスできます。手順については、 AWS IDおよびアクセス管理ユーザーガイドの IAM ポリシーの作成 と ロール権限ポリシーの変更 をご参照ください。
少なくとも、Snowflakeはテーブルに関する情報にアクセスするために、Glueデータカタログに対して次の権限が必要とします。
glue:GetTable
glue:GetTables
次のポリシー例(JSON 形式)は、指定したデータベース内のすべてのテーブルにアクセスするために必要な権限を提供します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowGlueCatalogTableAccess",
"Effect": "Allow",
"Action": [
"glue:GetTable",
"glue:GetTables"
],
"Resource": [
"arn:aws:glue:*:<accountid>:table/*/*",
"arn:aws:glue:*:<accountid>:catalog",
"arn:aws:glue:*:<accountid>:database/<database-name>"
]
}
]
}
注釈
このポリシーの
Resource
要素を変更して、許可されるリソース(カタログ、データベース、テーブルなど)をさらに制限することができます。詳細については、 AWS Glueで定義されたリソースタイプ をご参照ください。AWS Glueに暗号化を使用する場合、ポリシーを変更して AWS キー管理サービス(AWS KMS)権限を追加する必要があります。詳細については、 AWS Glueでの暗号化の設定 をご参照ください。
ステップ2: Snowflakeでカタログ統合を作成する¶
CREATE CATALOG INTEGRATION コマンドを使用して、Glueデータカタログのカタログ統合を作成します。
次の例は AWS Glueカタログソースを使用するカタログ統合を作成します。この例では、オプションの GLUE_REGION
パラメーターの値を指定しています。
CREATE CATALOG INTEGRATION glueCatalogInt
CATALOG_SOURCE=GLUE
CATALOG_NAMESPACE='my.catalogdb'
TABLE_FORMAT=ICEBERG
GLUE_AWS_ROLE_ARN='arn:aws:iam::123456789012:role/myGlueRole'
GLUE_CATALOG_ID='123456789012'
GLUE_REGION='us-east-2'
ENABLED=TRUE;
ステップ3: Snowflakeアカウントの AWS IAM ユーザーと外部 ID を取得する¶
カタログ統合を作成したときにSnowflakeアカウントに作成された AWS IAM ユーザーと外部 ID に関する情報を取得するには、 DESCRIBE CATALOG INTEGRATION コマンドを実行します。この情報を次のセクションで AWS に提供して、信頼関係を確立します。
次のコマンド例は、前のステップで作成したカタログ統合について説明します。
DESCRIBE CATALOG INTEGRATION glueCatalogInt;
次の値を記録します。
値
説明
GLUE_AWS_IAM_USER_ARN
Snowflakeアカウント用に作成された AWS IAM ユーザー。例えば、
arn:aws:iam::123456789001:user/abc1-b-self1234
。Snowflakeは、Snowflakeアカウント全体用に単一の IAM ユーザーをプロビジョニングします。アカウント内のすべてのGlueカタログ統合は、その IAM ユーザーを使用します。
GLUE_AWS_EXTERNAL_ID
信頼関係を確立するために必要な外部 ID 。
これらの値は次のセクションで提供します。
ステップ4: AWS Glueデータカタログにアクセスするために IAM ユーザー権限を付与する¶
カタログ統合の作成時に ARN で指定したのと 同じ IAM ロールの信頼ポリシーを更新します(GLUE_AWS_ROLE_ARN
)。信頼ポリシーに ステップ3: Snowflakeアカウントの AWS IAM ユーザーと外部 ID を取得する で記録した値を追加します。
手順については、 信頼ポリシーの変更 をご参照ください。
次の例の信頼ポリシーは、 GLUE_AWS_IAM_USER_ARN
と GLUE_AWS_EXTERNAL_ID
の値をどこで指定するのかを示しています。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": "<glue_iam_user_arn>"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "<glue_aws_external_id>"
}
}
}
]
}
条件:
glue_iam_user_arn
は記録したGLUE_IAM_USER_ARN
の値です。
glue_aws_external_id
は記録したGLUE_AWS_EXTERNAL_ID
の値です。
注釈
セキュリティ上の理由から、新しいカタログ統合を作成する場合(または CREATE OR REPLACE CATALOG INTEGRATION 構文を使用して既存のカタログ統合を再作成する場合)、新しいカタログ統合には異なる外部 ID があり、新しい外部 ID で信頼ポリシーを変更しない限り、信頼関係を解決できません。
権限が正しく設定されていることを確認するには、このカタログ統合を使用して Icebergテーブルを作成 します。このカタログ統合を参照するIcebergテーブルを作成するまで、Snowflakeは権限が正しく設定されているかどうかを確認しません。
次のステップ¶
AWS Glueのカタログ統合を構成したら、 AWS GlueをカタログとしてIcebergテーブルを作成する を実行できます。
テーブルを更新し、AWS Glueの変更との同期を保つには、 ALTER ICEBERG TABLE ... REFRESH ステートメントを使用します。詳細については、 AWS Glueをカタログとして使用しているIcebergテーブルのメタデータを更新します。 をご参照ください。
アカウント、データベース、スキーマレベルでのカタログ統合の設定¶
Icebergテーブルに使用する既存のカタログ統合を定義するには、 CATALOG パラメーターを次のレベルで設定します。
- アカウント:
アカウント管理者は ALTER ACCOUNT コマンドを使用して、アカウントのパラメーターを設定できます。アカウントに値が設定されている場合、外部カタログを使用するアカウントで作成されたすべてのIcebergテーブルは、デフォルトでこのカタログ統合を使用します。
- オブジェクト:
ユーザーは適切な CREATE <オブジェクト> または ALTER <オブジェクト> コマンドを実行して、データベースまたはスキーマレベルで CATALOG パラメーター値を上書きできます。宣言の有効範囲が最も低いもの(スキーマ > データベース > アカウント)が使用されます。
適切な ALTER <object_type> コマンドを使用してオブジェクトを変更するために必要な最小権限に加えて、ロールにはカタログ統合に対して USAGE 権限が必要です。
例¶
次のステートメントは、 my_database_1
という名前のデータベースに対してカタログ統合(shared_catalog_integration
)を設定します。
ALTER DATABASE my_database_1
SET CATALOG = 'shared_catalog_integration';
データベースレベルでカタログ統合を設定すると、カタログ統合を指定せずにそのデータベースにIcebergテーブルを作成できます。次のステートメントは、データベースに設定されたデフォルトのカタログ統合(shared_catalog_integration
)を使用する my_database_1
のオブジェクトストレージ内のメタデータからIcebergテーブルを作成します。
CREATE ICEBERG TABLE my_iceberg_table
EXTERNAL_VOLUME='my_external_volume'
METADATA_FILE_PATH='path/to/metadata/v1.metadata.json';