Dépannage lors de l’utilisation de tables Apache Iceberg™ avec Snowflake Open Catalog dans Snowflake

Les scénarios suivants peuvent vous aider à résoudre les problèmes qui peuvent survenir lors de l’utilisation de tables Apache Iceberg™ avec Snowflake Open Catalog dans Snowflake.

Impossible de créer une intégration de catalogue pour Open Catalog

Cette section décrit comment résoudre les problèmes liés à la création d’une intégration de catalogue pour Open Catalog.

Pour résoudre le problème, identifiez le message d’erreur que vous avez reçu dans la sortie SQL lorsque la création de votre intégration de catalogue a échoué.

Erreur

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.

Cause

Le <nom_open_catalog> que vous avez spécifié pour le paramètre WAREHOUSE dans votre intégration de catalogue ne correspond à aucun nom d’un catalogue externe dans le compte Open Catalog à l”<url_compte_polaris> que vous avez spécifiée pour le paramètre CATALOG_URI.

Solution

Mettez à jour le <nom_open_catalog> pour le paramètre WAREHOUSE pour le faire correspondre au nom du catalogue externe dans Open Catalog et essayez à nouveau de créer l’intégration du catalogue. Si vous n’avez pas encore créé le catalogue externe, suivez les instructions dans Création d’un catalogue.

Important

Le <nom_open_catalog> est sensible à la casse.

Erreur

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.

Cause

Le jeton OAuth que vous avez spécifié dans l’intégration de catalogue n’est pas valide.

Solution

Assurez-vous que les valeurs spécifiées pour OAUTH_CLIENT_ID et OAUTH_CLIENT_SECRET dans votre intégration de catalogue sont des valeurs valides pour une connexion de service existante. Pour valider, comparez ces valeurs avec les valeurs d’identifiants de connexion que vous avez enregistrées lorsque vous avez configuré la connexion de service. Si elles ne correspondent pas, mettez à jour les valeurs.

Impossible de créer une table gérée par Snowflake

Cette section décrit comment résoudre les problèmes liés à la création d’une table gérée par Snowflake.

Pour résoudre le problème, identifiez le message d’erreur que vous avez reçu dans la sortie SQL lorsque la création de votre table a échoué.

Erreur

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.

Cause

Le rôle de catalogue pour le catalogue externe auquel vous souhaitez vous connecter ne dispose pas des privilèges nécessaires pour envoyer des notifications à Open Catalog.

Solution

Mettez à jour le rôle de catalogue en accordant tous les privilèges suivants au rôle de catalogue pour votre catalogue externe :

  • TABLE_CREATE

  • TABLE_WRITE_PROPERTIES

  • TABLE_DROP

  • NAMESPACE_CREATE

  • NAMESPACE_DROP

L’endroit où vous mettez à jour le rôle de catalogue dépend du fait que les autorisations dont il dispose sont appliquées au niveau du catalogue, de l’espace de noms ou de la table. Consultez la procédure applicable à votre rôle de catalogue :

Erreur

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.

Cause

L’utilisateur IAM AWS de votre catalogue externe n’est pas en mesure d’assumer le rôle qui dispose de l’autorisation d’accéder à S3.

Solution

Modifiez le document de politique dans AWS pour permettre à l’utilisateur IAM de votre compte Open Catalog d’assumer le rôle qui dispose de l’autorisation d’accéder à votre compartiment S3. Pour modifier le document de politique, vous devez mettre à jour le rôle IAM dans AWS. Pour plus de détails, voir Récupérer l’utilisateur IAM AWS pour votre compte Snowflake Open Catalog et Octroyer à l’utilisateur IAM des autorisations pour accéder à des objets de compartiment.

Gardez à l’esprit que le document de politique doit inclure l’ARN de l’utilisateur IAM et l’ID externe pour votre volume externe et votre catalogue externe dans Open Catalog. Dans l’exemple de document de politique suivant, notez les valeurs suivantes :

  • arn:aws:iam::111111111111:user/----0000-s est l’STORAGE_AWS_IAM_USER_ARN pour le volume externe

  • arn:aws:iam::222222222222:user/----0000-s est l’ARN de l’utilisateur IAM pour le catalogue externe dans Snowflake Open Catalog.

  • Iceberg_table_external_id is the STORAGE_AWS_EXTERNAL_ID pour votre volume externe et également l’ID externe pour votre catalogue externe dans Open Catalog.

    {
         "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

Erreur

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

Cause

Vous essayez de synchroniser une table gérée par Snowflake avec un catalogue interne dans Open Catalog. Vous ne pouvez synchroniser une table gérée par Snowflake qu’avec un catalogue externe dans Open Catalog.

Solution

Vous ne pouvez pas mettre à jour un catalogue interne existant vers un catalogue externe. Vous devez donc créer un nouveau catalogue externe :

  1. Suivez les instructions dans Création d’un catalogue pour créer un catalogue externe dans votre compte Open Catalog. Lors de la création du catalogue, assurez-vous que le bouton bascule Externe est activé.

  2. Mettez à jour le <nom_open_catalog> pour le paramètre WAREHOUSE dans votre intégration de catalogue au nom du catalogue externe que vous avez créé.

Erreur

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>].

Cause

Le chemin d’accès au fichier de métadonnées de la table que vous souhaitez créer n’est pas inclus dans la liste des emplacements autorisés pour votre fournisseur Cloud externe. Par conséquent, Open Catalog ne peut pas accéder au fichier de métadonnées de la table.

Solution

Assurez-vous que l’emplacement du fichier de métadonnées se trouve sous le chemin d’accès au fichier de l’emplacement de base par défaut du catalogue créé par l’administrateur du service dans Open Catalog, ou qu’il se trouve sous l’un des emplacements supplémentaires autorisés, le cas échéant. Pour obtenir la liste des emplacements autorisés, sélectionnez le catalogue dans Open Catalog et reportez-vous au champ Emplacements.

Vous ne pouvez pas modifier une table Iceberg lorsque vous spécifiez le paramètre CATALOG_SYNC.

Cette section décrit comment résoudre les problèmes liés à la modification du paramètre CATALOG_SYNC.

Pour résoudre le problème, identifiez le message d’erreur que vous avez reçu dans la sortie SQL lorsque la modification de votre table a échoué.

Erreur

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.

Cause

Le rôle de catalogue pour le catalogue externe auquel vous souhaitez vous connecter ne dispose pas des privilèges nécessaires pour envoyer des notifications à Open Catalog.

Solution

Accordez tous les privilèges suivants au rôle de catalogue pour votre catalogue externe :

  • TABLE_CREATE

  • TABLE_WRITE_PROPERTIES

  • TABLE_DROP

  • NAMESPACE_CREATE

  • NAMESPACE_DROP

L’endroit où vous mettez à jour le rôle de catalogue dépend du fait que les autorisations dont il dispose sont appliquées au niveau du catalogue, de l’espace de noms ou de la table. Consultez la procédure applicable à votre rôle de catalogue :

Erreur

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.

Cause

L’utilisateur IAM AWS de votre catalogue externe n’est pas autorisé à accéder aux objets du compartiment S3.

Solution

Modifiez le document de politique dans AWS pour permettre à l’utilisateur IAM de votre compte Open Catalog d’accéder aux objets de votre compartiment S3. Pour modifier le document de politique, vous devez mettre à jour le rôle IAM dans AWS. Pour plus de détails, voir Récupérer l’utilisateur IAM AWS pour votre compte Polaris Open Catalog et Octroyer à l’utilisateur IAM des autorisations pour accéder à des objets de compartiment.

Gardez à l’esprit que le document de politique doit inclure l’ARN de l’utilisateur IAM et l’ID externe pour votre volume externe et votre catalogue externe dans Open Catalog. Dans l’exemple de document de politique suivant, notez les valeurs suivantes :

  • arn:aws:iam::111111111111:user/----0000-s est l’STORAGE_AWS_IAM_USER_ARN pour le volume externe

  • arn:aws:iam::222222222222:user/----0000-s est l’ARN de l’utilisateur IAM pour le catalogue externe dans Snowflake Open Catalog.

  • Iceberg_table_external_id is the STORAGE_AWS_EXTERNAL_ID pour votre volume externe et également l’ID externe pour votre catalogue externe dans Open Catalog.

    {
         "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

Erreur

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

Cause

Vous essayez de synchroniser une table Iceberg gérée par Snowflake avec une intégration de catalogue pour un catalogue interne dans Open Catalog. Vous ne pouvez synchroniser une table Iceberg gérée par Snowflake qu’avec un catalogue externe dans Open Catalog.

Solution

Vous ne pouvez pas mettre à jour un catalogue interne existant vers un catalogue externe. Vous devez donc créer un nouveau catalogue externe :

  1. Suivez les instructions dans Création d’un catalogue pour créer un catalogue externe dans votre compte Open Catalog. Lors de la création du catalogue, assurez-vous que le bouton bascule External est activé.

  2. Mettez à jour le open_catalog_name pour le paramètre WAREHOUSE dans votre intégration de catalogue au nom du catalogue externe que vous avez créé.

Erreur

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>].

Cause

Le chemin d’accès au fichier de métadonnées de la table que vous souhaitez créer n’est pas inclus dans la liste des emplacements autorisés pour votre fournisseur Cloud externe. Par conséquent, Open Catalog ne peut pas accéder au fichier de métadonnées de la table.

Solution

Assurez-vous que l’emplacement du fichier de métadonnées se trouve sous le chemin d’accès au fichier de l’emplacement de base par défaut du catalogue créé par l’administrateur du service dans Open Catalog, ou qu’il se trouve sous l’un des emplacements supplémentaires autorisés, le cas échéant. Pour obtenir la liste des emplacements autorisés, sélectionnez le catalogue dans Open Catalog et reportez-vous au champ Locations.