View a markdown version of this page

Prise en charge du format de tableau ouvert - Amazon EMR

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.

Prise en charge du format de tableau ouvert

Les versions 6.15.0 et supérieures d'Amazon EMR incluent la prise en charge d'un contrôle d'accès précis basé sur les tables Hive, Apache Iceberg, Apache Hudi et Delta Lake lorsque vous lisez et écrivez des données AWS Lake Formation avec Spark SQL. Amazon EMR prend en charge le contrôle d’accès au niveau des tables, des lignes, des colonnes et des cellules avec Apache Hudi. Les versions 6.15.0 et ultérieures d'Amazon EMR incluent la prise en charge d'un contrôle d'accès précis au niveau des lignes, des colonnes ou des cellules en fonction de Lake Formation. AWS À partir d'EMR 7.12, les opérations DML et DDL qui modifient les données des tables sont prises en charge pour les tables Apache Hive, Apache Iceberg et Delta Lake à l'aide des informations d'identification vendues par Lake Formation.

Les rubriques de cette section expliquent comment accéder aux tables enregistrées dans Lake Formation dans des formats de tables ouvertes à partir de jobs EMR Spark ou de sessions interactives avec un contrôle d'accès précis.

Conditions d'autorisation

Tables non enregistrées dans AWS Lake Formation

Pour les tables non enregistrées auprès de Amazon S3 AWS Lake Formation, le rôle d'exécution des tâches accède à la fois au catalogue de données AWS Glue et aux données des tables sous-jacentes. Cela nécessite que le rôle d'exécution des tâches dispose des autorisations IAM appropriées pour les opérations AWS Glue et Amazon S3.

Tables enregistrées dans AWS Lake Formation

Pour les tables enregistrées auprès de AWS Lake Formation, le rôle d'exécution du job accède aux métadonnées du catalogue de données AWS Glue, tandis que les informations d'identification temporaires fournies par Lake Formation accèdent aux données des tables sous-jacentes dans Amazon S3. Les autorisations de Lake Formation requises pour exécuter une opération dépendent du catalogue de données AWS Glue et des appels d'API Amazon S3 lancés par la tâche Spark et peuvent être résumées comme suit :

  • L'autorisation DESCRIBE permet au rôle d'exécution de lire les métadonnées d'une table ou d'une base de données dans le catalogue de données

  • L'autorisation ALTER permet au rôle d'exécution de modifier les métadonnées de table ou de base de données dans le catalogue de données

  • L'autorisation DROP permet au rôle d'exécution de supprimer les métadonnées de table ou de base de données du catalogue de données

  • L'autorisation SELECT permet au rôle d'exécution de lire les données des tables depuis Amazon S3

  • L'autorisation INSERT permet au rôle d'exécution d'écrire des données de table sur Amazon S3

  • L'autorisation DELETE permet au rôle d'exécution de supprimer les données de table d'Amazon S3

    Note

    Lake Formation évalue les autorisations de manière paresseuse lorsqu'une tâche Spark appelle AWS Glue pour récupérer les métadonnées des tables et Amazon S3 pour récupérer les données des tables. Les tâches qui utilisent un rôle d'exécution avec des autorisations insuffisantes n'échoueront pas tant que Spark n'aura pas AWS passé un appel à Glue ou Amazon S3 nécessitant l'autorisation manquante.

Note

Dans la matrice de tableau prise en charge suivante :

  • Les opérations marquées comme Supported utilisent exclusivement les informations d'identification de Lake Formation pour accéder aux données des tables enregistrées auprès de Lake Formation. Si les autorisations de Lake Formation sont insuffisantes, l'opération ne se basera pas sur les informations d'identification du rôle d'exécution. Pour les tables non enregistrées auprès de Lake Formation, les informations d'identification du rôle d'exécution du travail accèdent aux données de la table.

  • Les opérations marquées comme étant prises en charge avec des autorisations IAM sur le site Amazon S3 n'utilisent pas les informations d'identification de Lake Formation pour accéder aux données des tables sous-jacentes dans Amazon S3. Pour exécuter ces opérations, le rôle d'exécution des tâches doit disposer des autorisations Amazon S3 IAM nécessaires pour accéder aux données de la table, que la table soit enregistrée ou non auprès de Lake Formation.

Hive
Opération AWS Lake Formation autorisations État du support
SELECT SELECT Pris en charge
CREATE TABLE CRÉER_TABLE Pris en charge
CREATE TABLE LIKE CRÉER_TABLE Compatible avec les autorisations IAM sur le site Amazon S3
CREATE TABLE AS SELECT CRÉER_TABLE Compatible avec les autorisations IAM sur le site Amazon S3
DESCRIBE TABLE DESCRIBE Pris en charge
SHOW TBLPROPERTIES DESCRIBE Pris en charge
SHOW COLUMNS DESCRIBE Pris en charge
SHOW PARTITIONS DESCRIBE Pris en charge
SHOW CREATE TABLE DESCRIBE Pris en charge
MODIFIER LE TABLEAU tablename SELECT et ALTER Pris en charge
MODIFIER L'EMPLACEMENT DU tablename SET DE TABLES - Non pris en charge
MODIFIER LA TABLE tablename AJOUTER UNE PARTITION SÉLECTIONNER, INSÉRER et MODIFIER Pris en charge
REPAIR TABLE SELECT et ALTER Pris en charge
CHARGER DES DONNÉES Non pris en charge
INSERT INSÉRER et MODIFIER Pris en charge
INSERT OVERWRITE SÉLECTIONNER, INSÉRER, SUPPRIMER et MODIFIER Pris en charge
DROP TABLE SÉLECTIONNER, SUPPRIMER, SUPPRIMER et MODIFIER Pris en charge
TRUNCATE TABLE SÉLECTIONNER, INSÉRER, SUPPRIMER et MODIFIER Pris en charge
Dataframe Writer V1 Identique à l'opération SQL correspondante

Pris en charge lors de l'ajout de données à une table existante. Reportez-vous à la section Considérations et limites pour plus d'informations.

Dataframe Writer V2 Identique à l'opération SQL correspondante

Pris en charge lors de l'ajout de données à une table existante. Reportez-vous à la section Considérations et limites pour plus d'informations.

Iceberg
Opération AWS Lake Formation autorisations État du support
SELECT SELECT Pris en charge
CREATE TABLE CRÉER_TABLE Pris en charge
CREATE TABLE LIKE CRÉER_TABLE Compatible avec les autorisations IAM sur le site Amazon S3
CREATE TABLE AS SELECT CRÉER_TABLE Compatible avec les autorisations IAM sur le site Amazon S3
REMPLACER LE TABLEAU EN TANT QUE SELECT SÉLECTIONNER, INSÉRER et MODIFIER Pris en charge
DESCRIBE TABLE DESCRIBE Compatible avec les autorisations IAM sur le site Amazon S3
SHOW TBLPROPERTIES DESCRIBE Compatible avec les autorisations IAM sur le site Amazon S3
SHOW CREATE TABLE DESCRIBE Compatible avec les autorisations IAM sur le site Amazon S3
ALTER TABLE SÉLECTIONNER, INSÉRER et MODIFIER Pris en charge
ALTER TABLE SET LOCATION SÉLECTIONNER, INSÉRER et MODIFIER Compatible avec les autorisations IAM sur le site Amazon S3
MODIFIER L'ÉCRITURE D'UNE TABLE ORDONNÉE PAR SÉLECTIONNER, INSÉRER et MODIFIER Compatible avec les autorisations IAM sur le site Amazon S3
MODIFIER L'ÉCRITURE D'UNE TABLE DISTRIBUÉE PAR SÉLECTIONNER, INSÉRER et MODIFIER Compatible avec les autorisations IAM sur le site Amazon S3
MODIFIER LE TABLEAU RENOMMER LE TABLEAU CREATE_TABLE et DROP Pris en charge
INSERT INTO SÉLECTIONNER, INSÉRER et MODIFIER Pris en charge
INSERT OVERWRITE SÉLECTIONNER, INSÉRER et MODIFIER Pris en charge
DELETE SÉLECTIONNER, INSÉRER et MODIFIER Pris en charge
UPDATE SÉLECTIONNER, INSÉRER et MODIFIER Pris en charge
MERGE INTO SÉLECTIONNER, INSÉRER et MODIFIER Pris en charge
DROP TABLE SÉLECTIONNER, SUPPRIMER et SUPPRIMER Pris en charge
DataFrame Writer V1 - Non pris en charge
DataFrame Writer V2 Identique à l'opération SQL correspondante

Pris en charge lors de l'ajout de données à une table existante. Reportez-vous à la section Considérations et limites pour plus d'informations.

Tables de métadonnées SELECT Pris en charge. Certaines tables sont masquées. Reportez-vous à la section Considérations et limites pour plus d'informations.
Procédures stockées - Pris en charge pour les tables répondant aux conditions suivantes :
  • Tables non enregistrées dans AWS Lake Formation

  • Tables qui n'utilisent pas register_table et migrate

    Reportez-vous à la section Considérations et limites pour plus d'informations.

Configuration Spark pour Iceberg : si vous souhaitez utiliser le format Iceberg, définissez les configurations suivantes. DB_LOCATIONRemplacez-le par le chemin Amazon S3 où se trouvent vos tables Iceberg, et remplacez les espaces réservés à la région et à l'ID de compte par vos propres valeurs.

spark-sql \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions --conf spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkSessionCatalog --conf spark.sql.catalog.spark_catalog.warehouse=s3://DB_LOCATION --conf spark.sql.catalog.spark_catalog.catalog-impl=org.apache.iceberg.aws.glue.GlueCatalog --conf spark.sql.catalog.spark_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO --conf spark.sql.catalog.spark_catalog.glue.account-id=ACCOUNT_ID --conf spark.sql.catalog.spark_catalog.glue.id=ACCOUNT_ID --conf spark.sql.catalog.spark_catalog.client.region=AWS_REGION

Si vous souhaitez utiliser le format Iceberg sur les versions antérieures d'EMR, utilisez plutôt la commande suivante :

spark-sql \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,com.amazonaws.emr.recordserver.connector.spark.sql.RecordServerSQLExtension --conf spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkCatalog --conf spark.sql.catalog.spark_catalog.warehouse=s3://DB_LOCATION --conf spark.sql.catalog.spark_catalog.catalog-impl=org.apache.iceberg.aws.glue.GlueCatalog --conf spark.sql.catalog.spark_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO --conf spark.sql.catalog.spark_catalog.glue.account-id=ACCOUNT_ID --conf spark.sql.catalog.spark_catalog.glue.id=ACCOUNT_ID --conf spark.sql.catalog.spark_catalog.client.assume-role.region=AWS_REGION --conf spark.sql.catalog.spark_catalog.lf.managed=true

Exemples :

Voici quelques exemples d'utilisation des tables Iceberg :

-- Create an Iceberg table CREATE TABLE my_iceberg_table ( id BIGINT, name STRING, created_at TIMESTAMP ) USING ICEBERG; -- Insert data INSERT INTO my_iceberg_table VALUES (1, 'Alice', current_timestamp()); -- Query the table SELECT * FROM my_iceberg_table;
Hudi
Opération AWS Lake Formation autorisations État du support
SELECT SELECT Pris en charge
CREATE TABLE CRÉER_TABLE Compatible avec les autorisations IAM sur le site Amazon S3
CREATE TABLE LIKE CRÉER_TABLE Compatible avec les autorisations IAM sur le site Amazon S3
CREATE TABLE AS SELECT - Non pris en charge
DESCRIBE TABLE DESCRIBE Compatible avec les autorisations IAM sur le site Amazon S3
SHOW TBLPROPERTIES DESCRIBE Compatible avec les autorisations IAM sur le site Amazon S3
SHOW COLUMNS DESCRIBE Compatible avec les autorisations IAM sur le site Amazon S3
SHOW CREATE TABLE DESCRIBE Compatible avec les autorisations IAM sur le site Amazon S3
ALTER TABLE SELECT Compatible avec les autorisations IAM sur le site Amazon S3
INSERT INTO SELECT et ALTER Compatible avec les autorisations IAM sur le site Amazon S3
INSERT OVERWRITE SELECT et ALTER Compatible avec les autorisations IAM sur le site Amazon S3
DELETE - Non pris en charge
UPDATE - Non pris en charge
MERGE INTO - Non pris en charge
DROP TABLE SELECT et DROP Compatible avec les autorisations IAM sur le site Amazon S3
DataFrame Writer V1 - Non pris en charge
DataFrame Writer V2 Identique à l'opération SQL correspondante Compatible avec les autorisations IAM sur le site Amazon S3
Tables de métadonnées - Non pris en charge
Maintenance des tables et fonctionnalités utilitaires - Non pris en charge

Configuration de Spark pour Hudi :

Pour démarrer le shell Spark sur EMR 7.10 ou version ultérieure, utilisez la commande suivante :

spark-sql --jars /usr/lib/hudi/hudi-spark-bundle.jar \ --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog \ --conf spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension

Pour démarrer le shell Spark sur des versions antérieures d'EMR, utilisez plutôt la commande ci-dessous :

spark-sql --jars /usr/lib/hudi/hudi-spark-bundle.jar \ --conf spark.serializer=org.apache.spark.serializer.KryoSerializer \ --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog \ --conf spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension,com.amazonaws.emr.recordserver.connector.spark.sql.RecordServerSQLExtension \ --conf spark.sql.catalog.spark_catalog.lf.managed=true

Exemples :

Voici quelques exemples d'utilisation des tables Hudi :

-- Create a Hudi table CREATE TABLE my_hudi_table ( id BIGINT, name STRING, created_at TIMESTAMP ) USING HUDI TBLPROPERTIES ( 'type' = 'cow', 'primaryKey' = 'id' ); -- Insert data INSERT INTO my_hudi_table VALUES (1, 'Alice', current_timestamp()); -- Query the latest snapshot SELECT * FROM my_hudi_table;

Pour demander le dernier instantané des copy-on-write tables :

SELECT * FROM my_hudi_cow_table
spark.read.table("my_hudi_cow_table")

Pour interroger les dernières données compactées des tables MOR, vous pouvez interroger la table optimisée en lecture qui est suffixée par _ro :

SELECT * FROM my_hudi_mor_table_ro
spark.read.table("my_hudi_mor_table_ro")
Delta Lake
Opération AWS Lake Formation autorisations État du support
SELECT SELECT Pris en charge
CREATE TABLE CRÉER_TABLE Pris en charge
CREATE TABLE LIKE - Non pris en charge
CREATE TABLE AS SELECT CRÉER_TABLE Pris en charge
REMPLACER LE TABLEAU EN TANT QUE SELECT SÉLECTIONNER, INSÉRER et MODIFIER Pris en charge
DESCRIBE TABLE DESCRIBE Compatible avec les autorisations IAM sur le site Amazon S3
SHOW TBLPROPERTIES DESCRIBE Compatible avec les autorisations IAM sur le site Amazon S3
SHOW COLUMNS DESCRIBE Compatible avec les autorisations IAM sur le site Amazon S3
SHOW CREATE TABLE DESCRIBE Compatible avec les autorisations IAM sur le site Amazon S3
ALTER TABLE SÉLECTIONNER et INSÉRER Pris en charge
ALTER TABLE SET LOCATION SÉLECTIONNER et INSÉRER Compatible avec les autorisations IAM sur le site Amazon S3
MODIFIER LE tablename CLUSTER DE TABLES PAR SÉLECTIONNER et INSÉRER Compatible avec les autorisations IAM sur le site Amazon S3
MODIFIER LE TABLEAU tablename AJOUTER UNE CONTRAINTE SÉLECTIONNER et INSÉRER Compatible avec les autorisations IAM sur le site Amazon S3
MODIFIER LA CONTRAINTE DE tablename SUPPRESSION DE LA TABLE SÉLECTIONNER et INSÉRER Compatible avec les autorisations IAM sur le site Amazon S3
INSERT INTO SÉLECTIONNER et INSÉRER Pris en charge
INSERT OVERWRITE SÉLECTIONNER et INSÉRER Pris en charge
DELETE SÉLECTIONNER et INSÉRER Pris en charge
UPDATE SÉLECTIONNER et INSÉRER Pris en charge
MERGE INTO SÉLECTIONNER et INSÉRER Pris en charge
DROP TABLE SÉLECTIONNER, SUPPRIMER et SUPPRIMER Pris en charge
DataFrame Writer V1 - Non pris en charge
DataFrame Writer V2 Identique à l'opération SQL correspondante

Pris en charge

Maintenance des tables et fonctionnalités utilitaires - Non pris en charge

Configuration de Spark pour Delta Lake :

Pour utiliser Delta Lake with Lake Formation sur EMR 7.10 ou version ultérieure, exécutez la commande suivante :

spark-sql \ --conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension \ --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog

Pour utiliser le lac Delta avec Lake Formation sur EMR 6,15 à 7,9, procédez comme suit

spark-sql \ --conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension,com.amazonaws.emr.recordserver.connector.spark.sql.RecordServerSQLExtension \ --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog \ --conf spark.sql.catalog.spark_catalog.lf.managed=true

Si vous souhaitez que Lake Formation utilise un serveur d'enregistrement pour gérer votre catalogue Spark, définissez spark.sql.catalog.<managed_catalog_name>.lf.managed ce paramètre sur true.

Exemples :

Voici quelques exemples d'utilisation des tables Delta Lake :

-- Create a Delta Lake table CREATE TABLE my_delta_table ( id BIGINT, name STRING, created_at TIMESTAMP ) USING DELTA; -- Insert data INSERT INTO my_delta_table VALUES (1, 'Alice', current_timestamp()); -- Query the table SELECT * FROM my_delta_table; -- Update data UPDATE my_delta_table SET name = 'Alice Smith' WHERE id = 1; -- Merge data MERGE INTO my_delta_table AS target USING (SELECT 2 as id, 'Bob' as name, current_timestamp() as created_at) AS source ON target.id = source.id WHEN MATCHED THEN UPDATE SET * WHEN NOT MATCHED THEN INSERT *;

Création d'une table Delta Lake dans AWS Glue Data Catalog

Amazon EMR with Lake Formation ne prend pas en charge les commandes DDL ni la création de tables Delta dans les versions d'EMR antérieures à 7.12. Procédez comme suit pour créer des tables dans le catalogue de données AWS Glue.

  1. Utilisez l'exemple suivant pour créer une table Delta. Assurez-vous que votre emplacement S3 existe.

    spark-sql \ --conf "spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension" \ --conf "spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog" > CREATE DATABASE if not exists <DATABASE_NAME> LOCATION 's3://<S3_LOCATION>/transactionaldata/native-delta/<DATABASE_NAME>/'; > CREATE TABLE <TABLE_NAME> (x INT, y STRING, z STRING) USING delta; > INSERT INTO <TABLE_NAME> VALUES (1, 'a1', 'b1');
  2. Pour consulter les détails de votre tableau, rendez-vous sur https://console.aws.amazon.com/glue/.

  3. Dans le volet de navigation de gauche, développez le catalogue de données, choisissez Tables, puis choisissez la table que vous avez créée. Sous Schema, vous devriez voir que la table Delta que vous avez créée avec Spark stocke toutes les colonnes dans un type de array<string> données tel que AWS Glue.

  4. Pour définir des filtres au niveau des colonnes et des cellules dans Lake Formation, supprimez la col colonne de votre schéma, puis ajoutez les colonnes figurant dans le schéma de votre table. Dans cet exemple, ajoutez les colonnes xy, etz.

Grâce à cette fonctionnalité, vous pouvez exécuter des requêtes instantanées sur copy-on-write des tables pour demander le dernier instantané de la table à un instant de validation ou de compactage donné. Actuellement, un cluster Amazon EMR compatible avec Lake Formation doit récupérer la colonne de temps de validation de Hudi pour effectuer des requêtes incrémentielles et des requêtes de voyage dans le temps. Il ne prend pas en charge la timestamp as of syntaxe et la Spark.read() fonction de Spark. La syntaxe correcte estselect * from table where _hoodie_commit_time <= point_in_time. Pour plus d'informations, voir Requêtes ponctuelles sur le voyage dans le temps sur la table Hudi.

Note

Les performances des lectures sur les clusters de Lake Formation peuvent être plus lentes en raison d'optimisations non prises en charge. Ces fonctionnalités incluent la liste des fichiers basée sur les métadonnées Hudi et le saut de données. Nous vous recommandons de tester les performances de votre application pour vous assurer qu’elle répond à vos exigences.