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
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.
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.
-
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');
-
Pour consulter les détails de votre tableau, rendez-vous sur https://console.aws.amazon.com/glue/.
-
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.
-
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.
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.