Accès aux tables à l'aide des tables Amazon S3 Iceberg REST point de terminaison - Amazon Simple Storage Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Accès aux tables à l'aide des tables Amazon S3 Iceberg REST point de terminaison

Vous pouvez connecter votre Iceberg REST client pour les tables Amazon S3 Iceberg REST endpoint et marque REST API appels pour créer, mettre à jour ou interroger des tables dans des compartiments de tables S3. Le point de terminaison implémente un ensemble de normes Iceberg REST APIs spécifiée dans le Apache Iceberg REST Spécification de l'API Catalog Open. Le point de terminaison fonctionne en traduisant Iceberg REST API opérations dans les opérations correspondantes des tables S3.

Note

Tables Amazon S3 Iceberg REST le point de terminaison peut être utilisé pour accéder aux tables dans les implémentations de catalogue AWS Partner Network (APN) ou les implémentations de catalogue personnalisées. Il peut également être utilisé si vous n'avez besoin que d'un accès de base en lecture/écriture à un seul compartiment de table. Pour les autres scénarios d'accès, nous vous recommandons d'utiliser le AWS Glue Iceberg REST point de terminaison pour se connecter aux tables, qui fournit une gestion unifiée des tables, une gouvernance centralisée et un contrôle d'accès précis. Pour plus d’informations, consultez Accès aux tables Amazon S3 à l'aide du AWS Glue Iceberg REST point de terminaison.

Configuration du point de terminaison

Vous vous connectez aux tables Amazon S3 Iceberg REST point de terminaison utilisant le point de terminaison de service. S3 Tables Iceberg REST les points de terminaison ont le format suivant :

https://s3tables.<REGION>.amazonaws.com/iceberg

Reportez-vous à Tables Régions AWS et points de terminaison S3 pour les points de terminaison spécifiques à la région.

Propriétés de configuration du catalogue

Lorsque vous utilisez un client Iceberg pour connecter un moteur d'analyse au point de terminaison du service, vous devez spécifier les propriétés de configuration suivantes lors de l'initialisation du catalogue. Remplacez le placeholder values par les informations relatives à votre région et à votre compartiment de tables.

  • Le point de terminaison spécifique à la région en tant qu'URI du point de terminaison : https://s3tables.<REGION>.amazonaws.com/iceberg

  • L'ARN de votre compartiment de table comme emplacement de l'entrepôt : arn:aws:s3tables:<region>:<accountID>:bucket/<bucketname>

  • Propriétés Sigv4 pour l'authentification. Le nom de signature SigV4 pour les demandes de point de terminaison de service est le suivant : s3tables

Les exemples suivants vous montrent comment configurer différents clients pour utiliser les tables Amazon S3 Iceberg REST point final.

PyIceberg

Pour utiliser les tables Amazon S3 Iceberg REST point de terminaison avec PyIceberg, spécifiez les propriétés de configuration de l'application suivantes :

rest_catalog = load_catalog( catalog_name, **{ "type": "rest", "warehouse":"arn:aws:s3tables:<Region>:<accountID>:bucket/<bucketname>", "uri": "https://s3tables.<Region>.amazonaws.com/iceberg", "rest.sigv4-enabled": "true", "rest.signing-name": "s3tables", "rest.signing-region": "<Region>" } )
Apache Spark

Pour utiliser les tables Amazon S3 Iceberg REST point de terminaison avec Spark, spécifiez les propriétés de configuration de l'application suivantes, en les placeholder values remplaçant par les informations relatives à votre région et à votre compartiment de table.

spark-shell \ --packages "org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.4.1,software.amazon.awssdk:bundle:2.20.160,software.amazon.awssdk:url-connection-client:2.20.160" \ --master "local[*]" \ --conf "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" \ --conf "spark.sql.defaultCatalog=spark_catalog" \ --conf "spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkCatalog" \ --conf "spark.sql.catalog.spark_catalog.type=rest" \ --conf "spark.sql.catalog.spark_catalog.uri=https://s3tables.<Region>.amazonaws.com/iceberg" \ --conf "spark.sql.catalog.spark_catalog.warehouse=arn:aws:s3tables:<Region>:<accountID>:bucket/<bucketname>" \ --conf "spark.sql.catalog.spark_catalog.rest.sigv4-enabled=true" \ --conf "spark.sql.catalog.spark_catalog.rest.signing-name=s3tables" \ --conf "spark.sql.catalog.spark_catalog.rest.signing-region=<Region>" \ --conf "spark.sql.catalog.spark_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO" \ --conf "spark.hadoop.fs.s3a.aws.credentials.provider=org.apache.hadoop.fs.s3a.SimpleAWSCredentialProvider" \ --conf "spark.sql.catalog.spark_catalog.rest-metrics-reporting-enabled=false"

Authentification et autorisation d'accès au terminal

Les demandes d'API adressées aux points de terminaison du service S3 Tables sont authentifiées à l'aide de AWS Signature Version 4 (SigV4). Consultez AWS la version 4 de Signature pour les demandes d'API afin d'en savoir plus sur AWS SigV4.

Le nom de signature SigV4 pour les tables Amazon S3 Iceberg REST les demandes de point de terminaison sont : s3tables

Demandes adressées aux tables Amazon S3 Iceberg REST les terminaux sont autorisés à l'aide d'actions s3tables IAM correspondant au REST Opérations d'API. Ces autorisations peuvent être définies soit dans des politiques basées sur l'identité IAM, soit dans des politiques basées sur les ressources associées aux tables et aux compartiments de tables. Pour de plus amples informations, veuillez consulter Gestion des accès pour S3 Tables.

Vous pouvez suivre les demandes adressées à vos tables par le biais du REST point de terminaison avec AWS CloudTrail. Les demandes seront enregistrées en tant qu'action S3 IAM correspondante. Par exemple, une LoadTable API générera un événement de gestion pour l'GetTableMetadataLocationopération et un événement de données pour l'GetTableDataopération. Pour de plus amples informations, veuillez consulter Journalisation avec AWS CloudTrail pour les tables S3.

Paramètres du préfixe et du chemin

Iceberg REST APIs les catalogues ont un préfixe de forme libre dans leur demande. URLs Par exemple, l'appel ListNamespaces d'API utilise le format GET/v1/{prefix}/namespaces URL. Pour les tables S3, le chemin {prefix} REST est toujours l'ARN de votre bucket de table codé en URL.

Par exemple, pour l'ARN du bucket de table suivant : arn:aws:s3tables:us-east-1:111122223333:bucket/bucketname le préfixe serait : arn%3Aaws%3As3tables%3Aus-east-1%3A111122223333%3Abucket%2Fbucketname

Paramètre de chemin d'espace de noms

Espaces de noms dans un Iceberg REST le chemin de l'API du catalogue peut comporter plusieurs niveaux. Toutefois, S3 Tables ne prend en charge que les espaces de noms à un seul niveau. Pour accéder à un espace de noms dans une hiérarchie de catalogue à plusieurs niveaux, vous pouvez vous connecter à un catalogue à plusieurs niveaux situé au-dessus de l'espace de noms lorsque vous le référencez. Cela permet à tout moteur de requête prenant en charge la notation en 3 parties d'accéder catalog.namespace.table aux objets de la hiérarchie du catalogue de S3 Tables sans problèmes de compatibilité par rapport à l'utilisation de l'espace de noms à plusieurs niveaux.

Pris en charge Iceberg REST Opérations d’API

Le tableau suivant présente les REST Iceberg pris en charge APIs et indique comment ils correspondent aux actions S3 Tables.

Opération Iceberg REST chemin REST Action IAM des tables S3 CloudTrail EventName

getConfig

GET /v1/config

s3tables:GetTableBucket

s3tables:GetTableBucket

listNamespaces

GET /v1/{prefix}/namespaces

s3tables:ListNamespaces

s3tables:ListNamespaces

createNamespace

POST /v1/{prefix}/namespaces

s3tables:CreateNamespace

s3tables:CreateNamespace

loadNamespaceMetadata

GET /v1/{prefix}/namespaces/{namespace}

s3tables:GetNamespace

s3tables:GetNamespace

dropNamespace

DELETE /v1/{prefix}/namespaces/{namespace}

s3tables:DeleteNamespace

s3tables:DeleteNamespace

listTables

GET /v1/{prefix}/namespaces/{namespace}/tables

s3tables:ListTables

s3tables:ListTables

createTable

POST /v1/{prefix}/namespaces/{namespace}/tables

s3tables:CreateTable, s3tables:PutTableData

s3tables:CreateTable, s3tables:PutObject

loadTable

GET /v1/{prefix}/namespaces/{namespace}/tables/{table}

s3tables:GetTableMetadataLocation, s3tables:GetTableData

s3tables:GetTableMetadataLocation, s3tables:GetObject

updateTable

POST /v1/{prefix}/namespaces/{namespace}/tables/{table}

s3tables:UpdateTableMetadataLocation, s3tables:PutTableData, s3tables:GetTableData

s3tables:UpdateTableMetadataLocation, s3tables:PutObject, s3tables:GetObject

dropTable

DELETE /v1/{prefix}/namespaces/{namespace}/tables/{table}

s3tables:DeleteTable

s3tables:DeleteTable

renameTable

POST /v1/{prefix}/tables/rename

s3tables:RenameTable

s3tables:RenameTable

tableExists

HEAD /v1/{prefix}/namespaces/{namespace}/tables/{table}

s3tables:GetTable

s3tables:GetTable

namespaceExists

HEAD /v1/{prefix}/namespaces/{namespace}

s3tables:GetNamespace

s3tables:GetNamespace

Considérations et restrictions

Voici les considérations et les limites relatives à l'utilisation des tables Amazon S3 : Iceberg REST point final.

Considérations
  • CreateTable Comportement de l'API — L'stage-createoption n'est pas prise en charge pour cette opération et entraîne une 400 Bad Request erreur. Cela signifie que vous ne pouvez pas créer de table à partir des résultats d'une requête à l'aide de CREATE TABLE AS SELECT (CTAS).

  • DeleteTable Comportement de l'API : vous ne pouvez supprimer des tables que lorsque la purge est activée. La suppression de tables avec n'purge=falseest pas prise en charge et entraîne une 400 Bad Request erreur. Certaines versions de Spark définissez toujours cet indicateur sur false même lors de l'exécution de DROP TABLE PURGE commandes. Vous pouvez essayer DROP TABLE PURGE ou utiliser l'DeleteTableopération S3 Tables pour supprimer une table.

  • Le point de terminaison prend uniquement en charge les opérations de métadonnées de table standard. Pour la maintenance des tables, telle que la gestion des instantanés et le compactage, utilisez les opérations de l'API de maintenance des tables S3. Pour de plus amples informations, veuillez consulter Maintenance de S3 Tables.

Limites
  • Les espaces de noms multiniveaux ne sont pas pris en charge.

  • OAuthl'authentification basée n'est pas prise en charge.

  • Seule la owner propriété est prise en charge pour les espaces de noms.

  • Lié à la vue APIs défini dans le Apache Iceberg RESTLes spécifications d'API ouvertes ne sont pas prises en charge.

  • L'exécution d'opérations sur une table contenant un metadata.json fichier de plus de 5 Mo n'est pas prise en charge et renverra une 400 Bad Request erreur. Pour contrôler la taille de vos metadata.json fichiers, utilisez les opérations de maintenance des tables. Pour de plus amples informations, veuillez consulter Maintenance de S3 Tables.