Snowflakeで Snowflake Open Catalog を使用して Apache Iceberg™ テーブルを使用する際のトラブルシューティング

以下のシナリオは、Snowflakeで Snowflake Open Catalog を使用して Apache Iceberg™ テーブルを使用する際に発生する可能性のある問題のトラブルシューティングに役立ちます。

オープンカタログのカタログ統合が作成できない

このセクションでは、オープンカタログのカタログ統合を作成する際のトラブルシューティング方法について説明します。

トラブルシューティングを行うには、カタログ統合の作成に失敗したときに SQL の出力に表示されたエラーメッセージを特定します。

エラー

SQL Execution Error: Cannot create catalog integration <catalog_integration_name> due to error: Unable to process: Unable to find
warehouse <catalog_name>. Check the REST configuration and ensure the warehouse name '<catalog_name>' matches the Polaris catalog
name.

原因

カタログ統合の WAREHOUSE パラメーターに指定した <open_catalog_name> が、 CATALOG_URI パラメーターに指定した <polaris_account_url> にあるオープンカタログアカウントの外部カタログの名前と一致しません。

解決策

WAREHOUSE パラメーターの <open_catalog_name> を、オープンカタログの外部カタログの名前と正確に一致するように更新し、カタログ統合を再度作成してみてください。外部カタログをまだ作成していない場合は、 カタログの作成 の手順に従ってください。

重要

<open_catalog_name> は大文字と小文字を区別します。

エラー

SQL Execution Error: User provided authentication credentials are invalid for catalog integration <catalog_integration_name> due
to error: Malformed request: unauthorized_client: The client is not authorized.

原因

カタログ統合で指定した OAuth トークンが有効ではありません。

解決策

カタログ統合で OAUTH_CLIENT_IDOAUTH_CLIENT_SECRET に指定された値が、既存のサービス接続で有効な値であることを確認してください。検証するには、これらの値を、 サービス接続を構成した ときに保存したサービス認証情報値と比較します。一致しない場合は、値を更新して一致させます。

Snowflake管理テーブルが作成できない

このセクションでは、Snowflake管理テーブルを作成する際のトラブルシューティング方法について説明します。

トラブルシューティングを行うには、テーブルの作成に失敗したときに SQL の出力に表示されたエラーメッセージを確認してください。

エラー

SQL Execution Error: Failed to validate CATALOG_SYNC target '<catalog_integration_name>' due to error: The Snowflake service
connection associated with the Polaris catalog integration does not have the required privileges to send notifications. The
minimum required privileges are TABLE_CREATE, TABLE_WRITE_PROPERTIES, TABLE_DROP, NAMESPACE_CREATE, and NAMESPACE_DROP.

原因

接続先の外部カタログのカタログロールには、オープンカタログに通知を送信するのに必要な権限がありません。

解決策

外部カタログのカタログロールに以下のすべての権限を付与して、カタログロールを更新します。

  • TABLE_CREATE

  • TABLE_WRITE_PROPERTIES

  • TABLE_DROP

  • NAMESPACE_CREATE

  • NAMESPACE_DROP

カタログロールをどこで更新するかは、そのロールが持つ付与がカタログレベル、名前空間レベル、またはテーブルレベルのどれに適用されるかに依存します。カタログロールに該当する手順を参照してください。

エラー

SQL Execution Error: Failed to access the REST endpoint of catalog integration <catalog_integration_name> with error: Unable to
process: Failed to get subscoped credentials: Error assuming AWS_ROLE:
User: <IAM_user_arn> is not authorized to perform: sts:AssumeRole on resource: <S3_role_arn>. Check the accessibility of the REST
catalog URI or warehouse.

原因

外部カタログの AWS IAM ユーザーは、S3へのアクセス権限を持つロールを引き受けることができません。

解決策

AWS のポリシードキュメントを修正して、オープンカタログアカウントの IAM ユーザーに、S3バケットへのアクセス権限を持つロールを引き受ける権限を許可します。ポリシードキュメントを変更するには、 AWS の IAM ロールを更新する必要があります。詳細については、 Snowflake Open Catalogアカウントの AWS IAM ユーザーを取得 を参照してから、 バケットオブジェクトへのアクセス許可を IAM ユーザーに付与 を参照してください。

ポリシードキュメントには、オープンカタログの外部ボリュームと外部カタログの両方について、 IAM ユーザー ARN と外部 ID を含める必要があることに注意してください。以下のポリシードキュメントの例では、以下の値に注意してください。

  • arn:aws:iam::111111111111:user/----0000-s は外部ボリュームの STORAGE_AWS_IAM_USER_ARN です

  • arn:aws:iam::222222222222:user/----0000-s は、Snowflake Open Catalogの外部カタログの IAM ユーザー ARN です。

  • 外部ボリュームの Iceberg_table_external_id is the STORAGE_AWS_EXTERNAL_ID と、オープンカタログの外部カタログの外部 ID。

    {
         "Version": "2012-10-17",
         "Statement": [
           {
             "Sid": "",
             "Effect": "Allow",
             "Principal": {
               "AWS": [
                   "arn:aws:iam::111111111111:user/----0000-s",
                   "arn:aws:iam::222222222222:user/----0000-s"
                ]
             },
             "Action": "sts:AssumeRole",
             "Condition": {
               "StringEquals": {
                 "sts:ExternalId": "iceberg_table_external_id"
               }
             }
           }
         ]
       }
    
    Copy

エラー

SQL Execution Error: Failed to validate CATALOG_SYNC target '<catalog_integration_name>' due to error: The associated Polaris
catalog cannot be of type INTERNAL.

原因

Snowflakeで管理されたテーブルをオープンカタログの内部カタログに同期しようとしています。Snowflake管理テーブルを外部カタログに同期できるのは、オープンカタログのみです。

解決策

既存の内部カタログを外部カタログに更新することはできないので、新しい外部カタログを作成する必要があります。

  1. カタログを作成する の手順に従って、オープンカタログアカウントに外部カタログを作成します。カタログを作成する際、外部トグルが有効になっていることを確認します。

  2. カタログ統合の WAREHOUSE パラメーターの <open_catalog_name> を、作成した外部カタログ名に更新します。

エラー

SQL Execution Error: Failed to validate CATALOG_SYNC target '<catalog_integration_name>' due to error: SQL Execution Error:
Resource on the REST endpoint of catalog integration CATINT is forbidden due to error: Forbidden: Invalid locations '[<path to metadata file>]'
for identifier '<identifier>': <path to metadata file> is not in the list of allowed locations: [<list of allowed locations>].

原因

作成したいテーブルのメタデータファイルへのパスが、外部クラウドプロバイダーの許可された場所のリストに含まれていません。その結果、オープンカタログはそのテーブルのメタデータファイルにアクセスできません。

解決策

メタデータファイルの場所が、サービス管理者がオープンカタログで作成したカタログのデフォルトの基本場所のファイルパスの下にあるか、または該当する場合は追加の許可された場所のいずれかにあることを確認します。許可された場所のリストについては、オープンカタログでカタログを選択し、 場所 フィールドを参照してください。

CATALOG_SYNC パラメーターを指定した際、Icebergテーブルを変更することができない

このセクションでは、 CATALOG_SYNC パラメーターを変更した場合のトラブルシューティング方法について説明します。

トラブルシューティングを行うには、テーブルの変更に失敗したときに SQL の出力に表示されたエラーメッセージを確認してください。

エラー

SQL Execution Error: Failed to validate CATALOG_SYNC target '<catalog_integration_name>' due to error: The Snowflake service
connection associated with the Polaris catalog integration does not have the required privileges to send notifications. The minimum
required privileges are TABLE_CREATE, TABLE_WRITE_PROPERTIES, TABLE_DROP, NAMESPACE_CREATE, and NAMESPACE_DROP.

原因

接続先の外部カタログのカタログロールには、オープンカタログに通知を送信するのに必要な権限がありません。

解決策

外部カタログのカタログ・ロールに以下の権限をすべて付与します。

  • TABLE_CREATE

  • TABLE_WRITE_PROPERTIES

  • TABLE_DROP

  • NAMESPACE_CREATE

  • NAMESPACE_DROP

カタログロールをどこで更新するかは、そのロールの付与がカタログレベル、名前空間レベル、またはテーブルレベルのどれに適用されるかに依存します。カタログロールに該当する手順を参照してください。

エラー

SQL Execution Error: Failed to access the REST endpoint of catalog integration <catalog_integration_name> with error: Unable to
process: Failed to get subscoped credentials: Error assuming AWS_ROLE:
User: <IAM_user_arn> is not authorized to perform: sts:AssumeRole on resource: <S3_role_arn>. Check the accessibility of the REST
catalog URI or warehouse.

原因

外部カタログの AWS IAM ユーザーには、S3バケットオブジェクトにアクセスする権限がありません。

解決策

AWS のポリシードキュメントを変更して、オープンカタログアカウントの IAM ユーザーがS3バケットのオブジェクトにアクセスできるようにします。ポリシードキュメントを変更するには、 AWS の IAM ロールを更新する必要があります。詳細については、 Polaris Open Catalogアカウントの AWS IAM ユーザーを取得 を参照してから、 バケットオブジェクトへのアクセス許可を IAM ユーザーに付与 を参照してください。

ポリシードキュメントには、オープンカタログの外部ボリュームと外部カタログの両方について、 IAM ユーザー ARN と外部 ID を含める必要があることに注意してください。以下のポリシードキュメントの例では、以下の値に注意してください。

  • arn:aws:iam::111111111111:user/----0000-s は外部ボリュームの STORAGE_AWS_IAM_USER_ARN です

  • arn:aws:iam::222222222222:user/----0000-s は、Snowflake Open Catalogの外部カタログの IAM ユーザー ARN です。

  • 外部ボリュームの Iceberg_table_external_id is the STORAGE_AWS_EXTERNAL_ID と、オープンカタログの外部カタログの外部 ID。

    {
         "Version": "2012-10-17",
         "Statement": [
           {
             "Sid": "",
             "Effect": "Allow",
             "Principal": {
               "AWS": [
                   "arn:aws:iam::111111111111:user/----0000-s",
                   "arn:aws:iam::222222222222:user/----0000-s"
                ]
             },
             "Action": "sts:AssumeRole",
             "Condition": {
               "StringEquals": {
                 "sts:ExternalId": "iceberg_table_external_id"
               }
             }
           }
         ]
       }
    
    Copy

エラー

SQL Execution Error: Failed to validate CATALOG_SYNC target '<catalog_integration_name>' due to error: The associated Polaris
catalog cannot be of type INTERNAL.

原因

Snowflakeで管理されているIcebergテーブルをオープンカタログの内部カタログのカタログ統合に同期しようとしています。Snowflakeで管理されているIcebergテーブルを外部カタログに同期できるのは、オープンカタログのみです。

解決策

既存の内部カタログを外部カタログに更新することはできないので、新しい外部カタログを作成する必要があります。

  1. カタログを作成する の手順に従って、オープンカタログアカウントに外部カタログを作成します。カタログを作成する際、 External のトグルが有効になっていることを確認します。

  2. カタログ統合の WAREHOUSE パラメーターの open_catalog_name を、作成した外部カタログの名前に更新します。

エラー

SQL Execution Error: Failed to validate CATALOG_SYNC target '<catalog_integration_name>' due to error: SQL Execution Error:
Resource on the REST endpoint of catalog integration CATINT is forbidden due to error: Forbidden: Invalid locations '[<path to metadata file>]'
for identifier '<identifier>': <path to metadata file> is not in the list of allowed locations: [<list of allowed locations>].

原因

作成したいテーブルのメタデータファイルへのパスが、外部クラウドプロバイダーの許可された場所のリストに含まれていません。その結果、オープンカタログはそのテーブルのメタデータファイルにアクセスできません。

解決策

メタデータファイルの場所が、サービス管理者がオープンカタログで作成したカタログのデフォルトの基本場所のファイルパスの下にあるか、または該当する場合は追加の許可された場所のいずれかにあることを確認します。許可された場所のリストについては、オープンカタログでカタログを選択し、 Locations フィールドを参照してください。