Enregistrement de catalogues de compartiment de table S3 et interrogation de tables à partir d’Athena - Amazon Athena

Enregistrement de catalogues de compartiment de table S3 et interrogation de tables à partir d’Athena

Les compartiments de table Amazon S3 sont un type de compartiment d’Amazon S3 spécialement conçu pour stocker des données tabulaires dans des tables Apache Iceberg. Les compartiments de table automatisent les tâches de gestion des tables telles que le compactage, la gestion des instantanés et le récupérateur de mémoire afin d’optimiser en permanence les performances des requêtes et de réduire les coûts. Que vous débutiez ou que vous disposiez de milliers de tables dans votre environnement Iceberg, les compartiments de table simplifient les lacs de données à n’importe quelle échelle. Pour plus d’informations, consultez Table buckets.

Considérations et restrictions

  • Toutes les opérations DDL prises en charge pour les tables Iceberg sont prises en charge pour les tables S3, à l’exception de ce qui suit :

    • Les opérations ALTER TABLE RENAME, CREATE VIEW et ALTER DATABASE ne sont pas prises en charge.

    • Opérations OPTIMIZE et VACUUM – Vous pouvez gérer le compactage et la gestion des instantanés dans S3. Pour plus d’informations, consultez la documentation sur la maintenance des tables S3.

  • Les requêtes DDL sur les tables S3 enregistrées en tant que sources de données Athena ne sont pas prises en charge.

  • La réutilisation des résultats des requêtes n’est pas prise en charge.

  • Dans les groupes de travail où le chiffrement SSE-KMS ou CSE-KMS est activé, vous ne pouvez pas exécuter d’opérations d’écriture telles que INSERT, UPDATE, DELETE, ou MERGE sur des tables S3.

  • Dans les groupes de travail où l’option S3 Paiement par le demandeur est activée, vous ne pouvez pas exécuter d’opérations DML sur des tables S3.

Interrogation de tables S3 à partir d’Athena

Effectuez ces étapes préalables avant d’interroger des tables S3 dans Athena :
  1. Créez un compartiment S3. Pour plus d’informations, consultez Creating a table bucket dans le Guide d’utilisation d’Amazon Simple Storage Service.

  2. Assurez-vous de la réussite de l’intégration de vos compartiments de table au AWS Glue Data Catalog et à AWS Lake Formation en suivant les étapes figurant dans Prerequisites for integration et Integrating table buckets with AWS analytics services dans le Guide d’utilisation d’Amazon Simple Storage Service.

    Note

    Si vous avez activé l’intégration lors de la création d’un compartiment de table S3 à partir de la console S3 à l’étape 1, vous pouvez ignorer cette étape.

  3. Dans le cadre du principal que vous utilisez pour exécuter des requêtes avec Athena, accordez des autorisations pour Lake Formation sur le catalogue de tables S3, à l’aide de la console Lake Formation ou de l’AWS CLI

    AWS Management Console
    1. Ouvrez la console AWS Lake Formation à l’adresse https://console.aws.amazon.com/lakeformation/ et connectez-vous en tant qu’administrateur du lac de données. Pour plus d’informations sur la manière de créer un administrateur de lac de données, consultez Création d’un administrateur de lac de données.

    2. Dans le volet de navigation, choisissez Autorisations de données, puis Accorder.

    3. Sur la page Accorder des autorisations, sous Principaux, sélectionnez le principal que vous souhaitez utiliser pour soumettre une requête depuis Athena.

    4. Sous Balises LF ou ressources de catalogue, choisissez Ressources de catalogue de données nommées.

    5. Pour Catalogues, choisissez un catalogue de données Glue que vous avez créé à partir de l’intégration de votre compartiment de tables. Exemple : <accoundID>:s3tablescatalog/amzn-s3-demo-bucket.

    6. Dans Autorisation de catalogue, sélectionnez Super.

    7. Choisissez Accorder.

    AWS CLI

    Exécutez la commande suivante avec le rôle d’administrateur du lac de données Lake Formation pour accorder l’accès au principal que vous utilisez pour soumettre une requête depuis Athena.

    aws lakeformation grant-permissions \ --region <region (Example,us-east-1)> \ --cli-input-json \ '{ "Principal": { "DataLakePrincipalIdentifier": "<user or role ARN (Example, arn:aws:iam::<Account ID>:role/ExampleRole>" }, "Resource": { "Catalog": { "Id":"<Account ID>:s3tablescatalog/amzn-s3-demo-bucket" } }, "Permissions": ["ALL"] }'
Soumission de requêtes pour les tables S3
  1. Soumettez une CREATE DATABASE requête depuis Athena en utilisant l’utilisateur/le rôle autorisé ci-dessus. Dans cet exemple, s3tablescatalog est le catalogue de données Glue parent créé à partir de l’intégration et s3tablescatalog/amzn-s3-demo-bucket est le catalogue de données Glue enfant créé pour chaque compartiment de table S3. Il existe deux manières de lancer une requête.

    Option 1

    Spécifiez le catalogue de données Glue enfant (s3tablescatalog/amzn-s3-demo-bucket) directement depuis la console ou l’AWS CLI.

    Utilisation de AWS Management Console

    1. Ouvrez la console Athena à l’adresse https://console.aws.amazon.com/athena/.

    2. Dans le volet de navigation de gauche, dans Nom de la source de données, sélectionnez AwsDataCatalog.

    3. Dans Catalogue, sélectionnez s3tablescatalog/amzn-s3-demo-bucket.

    4. Dans l’éditeur de requêtes, saisissez une requête, telle que CREATE DATABASE test_namespace.

    Utilisation de AWS CLI

    Exécutez la commande suivante.

    aws athena start-query-execution \ --query-string 'CREATE DATABASE `test_namespace`' \ --query-execution-context '{"Catalog": "s3tablescatalog/amzn-s3-demo-bucket"}' \ --work-group "primary"
    Option 2

    Créez le catalogue de données Athena à partir du catalogue de données Glue enfant dans la console Athena et spécifiez-le en tant que catalogue dans la requête. Pour de plus amples informations, consultez Enregistrement de catalogues de compartiment de table S3 en tant que sources de données Athena.

  2. À l’aide de la base de données que vous avez créée à l’étape précédente, utilisez CREATE TABLE pour créer une table. L’exemple suivant crée une table dans la base de données test_namespace que vous avez créée précédemment dans le catalogue Glue s3tablescatalog/amzn-s3-demo-bucket.

    AWS Management Console
    1. Dans le volet de navigation de gauche, dans Nom de la source de données, sélectionnez AwsDataCatalog.

    2. Dans Catalogue, sélectionnez s3tablescatalog/amzn-s3-demo-bucket.

    3. Dans Base de données, sélectionnez test_namespace.

    4. Dans l’éditeur de requêtes, exécutez la requête suivante.

      CREATE TABLE daily_sales ( sale_date date, product_category string, sales_amount double) PARTITIONED BY (month(sale_date)) TBLPROPERTIES ('table_type' = 'iceberg')
    AWS CLI

    Exécutez la commande suivante.

    aws athena start-query-execution \ --query-string "CREATE TABLE daily_sales ( sale_date date, product_category string, sales_amount double) PARTITIONED BY (month(sale_date)) TBLPROPERTIES ('table_type' = 'iceberg')" \ --query-execution-context '{"Catalog": "s3tablescatalog/amzn-s3-demo-bucket", "Database":"test_namespace"}' \ --work-group "primary"
  3. Insérez les données dans la table que vous avez créée à l’étape précédente.

    AWS Management Console
    1. Dans le volet de navigation de gauche, dans Nom de la source de données, sélectionnez AwsDataCatalog.

    2. Dans Catalogue, sélectionnez s3tablescatalog/amzn-s3-demo-bucket.

    3. Dans Base de données, sélectionnez test_namespace.

    4. Dans l’éditeur de requêtes, exécutez la requête suivante.

      INSERT INTO daily_sales VALUES (DATE '2024-01-15', 'Laptop', 900.00), (DATE '2024-01-15', 'Monitor', 250.00), (DATE '2024-01-16', 'Laptop', 1350.00), (DATE '2024-02-01', 'Monitor', 300.00);
    AWS CLI

    Exécutez la commande suivante.

    aws athena start-query-execution \ --query-string "INSERT INTO \"s3tablescatalog/amzn-s3-demo-bucket\".test_namespace.daily_sales VALUES (DATE '2024-01-15', 'Laptop', 900.00), (DATE '2024-01-15', 'Monitor', 250.00), (DATE '2024-01-16', 'Laptop', 1350.00), (DATE '2024-02-01', 'Monitor', 300.00)"\ --work-group "primary"
  4. Une fois les données insérées dans la table, vous pouvez l’interroger.

    AWS Management Console
    1. Dans le volet de navigation de gauche, dans Nom de la source de données, sélectionnez AwsDataCatalog.

    2. Dans Catalogue, sélectionnez s3tablescatalog/amzn-s3-demo-bucket.

    3. Dans Base de données, sélectionnez test_namespace.

    4. Dans l’éditeur de requêtes, exécutez la requête suivante.

      SELECT product_category, COUNT(*) AS units_sold, SUM(sales_amount) AS total_revenue, AVG(sales_amount) AS average_price FROM daily_sales WHERE sale_date BETWEEN DATE '2024-02-01' AND DATE '2024-02-29' GROUP BY product_category ORDER BY total_revenue DESC
    AWS CLI

    Exécutez la commande suivante.

    aws athena start-query-execution \ --query-string "SELECT product_category, COUNT(*) AS units_sold, SUM(sales_amount) AS total_revenue, AVG(sales_amount) AS average_price FROM \"s3tablescatalog/amzn-s3-demo-bucket\".test_namespace.daily_sales WHERE sale_date BETWEEN DATE '2024-02-01' AND DATE '2024-02-29' GROUP BY product_category ORDER BY total_revenue DESC"\ --work-group "primary"

Création de tables S3 dans Athena

Athena prend en charge la création de tables dans des espaces de noms de tables S3 existants ou des espaces de noms créés dans Athena à l’aide d’instructions CREATE DATABASE. La syntaxe utilisée pour créer une table S3 à partir d’Athena et la même que celle utilisée pour créer une table Iceberg classique, à ceci près que vous ne spécifiez pas la propriété LOCATION, comme illustré dans l’exemple suivant.

CREATE TABLE [db_name.]table_name (col_name data_type [COMMENT col_comment] [, ...] ) [PARTITIONED BY (col_name | transform, ... )] [TBLPROPERTIES ([, property_name=property_value] )]

Vous pouvez également créer des tables S3 à l’aide d’instructions CREATE TABLE AS SELECT (CTAS). Pour de plus amples informations, consultez Opérations CTAS dans le cadre des tables S3.

Enregistrement de catalogues de compartiment de table S3 en tant que sources de données Athena

Pour enregistrer des catalogues de compartiment de table S3 à l’aide de la console Athena, effectuez les étapes suivantes.

  1. Ouvrez la console Athena à l’adresse https://console.aws.amazon.com/athena/.

  2. Dans le panneau de navigation, sélectionnez Sources de données et catalogues.

  3. Sur la page Sources de données et catalogues, sélectionnez Créer une source de données.

  4. Dans Choisir une source de données, sélectionnez Amazon S3 – AWS Glue Data Catalog.

  5. Dans la section AWS Glue Data Catalog, dans Compte de source de données, sélectionnez AWS Glue Data Catalog dans ce compte.

  6. Dans Créer une table ou enregistrer un catalogue, sélectionnez Enregistrer un nouveau catalogue AWS Glue.

  7. Dans la section Détails de la source de données, dans Nom de la source de données, saisissez le nom que vous souhaitez utiliser pour spécifier la source de données dans vos requêtes SQL ou utilisez le nom par défaut généré.

  8. Dans Catalogue, sélectionnez Parcourir pour rechercher une liste de catalogues AWS Glue dans le même compte. Si vous ne voyez aucun catalogue existant, créez-en un dans la console AWS Glue.

  9. Dans la boîte de dialogue Parcourir les catalogues AWS Glue, sélectionnez le catalogue que vous souhaitez utiliser, puis sélectionnez Choisir.

  10. (Facultatif) Dans Identifications, saisissez les paires clé-valeur que vous souhaitez associer à la source de données.

  11. Choisissez Suivant.

  12. Sur la page Vérifier et créer, vérifiez que les informations que vous avez saisies sont correctes, puis sélectionnez Créer une source de données.

Opérations CTAS dans le cadre des tables S3

Amazon Athena prend désormais en charge les opérations CREATE TABLE AS SELECT (CTAS) dans le cadre des tables S3. Cette fonctionnalité vous permet de créer de nouvelles tables S3 sur la base des résultats d’une requête SELECT.

La création d’une requête CTAS dans le cadre d’une table S3 présente quelques différences importantes par rapport aux tables Athena standard :

  • Vous devez omettre la propriété location, car les tables S3 gèrent automatiquement leurs propres emplacements de stockage.

  • La propriété table_type est définie par défaut sur ICEBERG, vous n’avez donc pas besoin de la spécifier explicitement dans votre requête.

  • Si vous ne spécifiez aucun format, le système utilise automatiquement PARQUET comme format par défaut pour vos données.

  • Les autres propriétés suivent toutes la même syntaxe que pour les tables Iceberg classiques.

Avant de créer des tables S3 à l’aide de CTAS, vérifiez que les autorisations dont vous avez besoin sont configurées dans AWS Lake Formation. Plus précisément, vous avez besoin d’autorisations pour créer des tables dans le catalogue de tables S3. Sans ces autorisations, vos opérations CTAS échoueront.

Note

Si votre requête CTAS échoue, vous devrez peut-être supprimer votre table à l’aide de l’API relative aux tables S3 avant de tenter de réexécuter votre requête. Vous ne pouvez pas utiliser les instructions DROP TABLE Athena pour supprimer la table partiellement créée par la requête.

Exemple

CREATE TABLE "s3tablescatalog/amzn-s3-demo-bucket"."namespace"."s3-table-name" WITH ( format = 'PARQUET' ) AS SELECT * FROM source_table;