Suporte ao formato de tabela aberta - Amazon EMR

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Suporte ao formato de tabela aberta

As versões 6.15.0 e superiores do Amazon EMR incluem suporte para controle de acesso refinado AWS Lake Formation com base em tabelas do Hive, Apache Iceberg, Apache Hudi e Delta Lake quando você lê e grava dados com o Spark SQL. O Amazon EMR oferece suporte ao controle de acesso no nível de tabela, linha, coluna e célula com o Apache Hudi. As versões 6.15.0 e superiores do Amazon EMR incluem suporte para controle de acesso refinado em nível de linha, coluna ou célula com base no AWS Lake Formation. A partir do EMR 7.12, as operações DML e DDL que modificam os dados da tabela são suportadas nas tabelas Apache Hive, Apache Iceberg e Delta Lake usando credenciais vendidas do Lake Formation.

Os tópicos desta seção abordam como você pode acessar as tabelas registradas do Lake Formation em formatos de tabela aberta a partir de trabalhos do EMR Spark ou sessões interativas com controle de acesso refinado.

Requisitos de permissão

Tabelas não registradas em AWS Lake Formation

Para tabelas não registradas AWS Lake Formation, a função de tempo de execução do trabalho acessa o AWS Glue Data Catalog e os dados da tabela subjacente no Amazon S3. Isso exige que a função de tempo de execução do trabalho tenha as permissões apropriadas do IAM para as operações do AWS Glue e do Amazon S3.

Tabelas cadastradas em AWS Lake Formation

Para tabelas registradas com AWS Lake Formation, a função de tempo de execução do trabalho acessa os metadados do AWS Glue Data Catalog, enquanto as credenciais temporárias fornecidas pela Lake Formation acessam os dados da tabela subjacente no Amazon S3. As permissões do Lake Formation necessárias para executar uma operação dependem do AWS Glue Data Catalog e das chamadas de API do Amazon S3 iniciadas pelo trabalho do Spark e podem ser resumidas da seguinte forma:

  • A permissão DESCRIBE permite que a função de tempo de execução leia os metadados da tabela ou do banco de dados no Catálogo de Dados

  • A permissão ALTER permite que a função de tempo de execução modifique os metadados da tabela ou do banco de dados no Catálogo de Dados

  • A permissão DROP permite que a função de tempo de execução exclua metadados da tabela ou do banco de dados do Catálogo de Dados

  • A permissão SELECT permite que a função de tempo de execução leia os dados da tabela do Amazon S3

  • A permissão INSERT permite que a função de tempo de execução grave dados de tabela no Amazon S3

  • A permissão DELETE permite que a função de tempo de execução exclua dados da tabela do Amazon S3

    nota

    O Lake Formation avalia as permissões preguiçosamente quando um trabalho do Spark chama o AWS Glue para recuperar os metadados da tabela e o Amazon S3 para recuperar os dados da tabela. Trabalhos que usam uma função de tempo de execução com permissões insuficientes não falharão até que o Spark faça uma chamada ao AWS Glue ou ao Amazon S3 que exija a permissão ausente.

nota

Na seguinte matriz de tabela suportada:

  • As operações marcadas como Suportadas usam exclusivamente as credenciais do Lake Formation para acessar os dados das tabelas registradas no Lake Formation. Se as permissões do Lake Formation forem insuficientes, a operação não retornará às credenciais da função de tempo de execução. Para tabelas não registradas no Lake Formation, as credenciais da função de tempo de execução do trabalho acessam os dados da tabela.

  • As operações marcadas como compatíveis com permissões do IAM na localização do Amazon S3 não usam as credenciais do Lake Formation para acessar os dados da tabela subjacente no Amazon S3. Para executar essas operações, a função de tempo de execução do trabalho deve ter as permissões necessárias do Amazon S3 IAM para acessar os dados da tabela, independentemente de a tabela estar registrada no Lake Formation.

Hive
Operation AWS Lake Formation permissões Status do suporte
SELECT SELECT Compatível
CRIAR TABELA CRIAR_TABELA Compatível
CREATE TABLE LIKE CRIAR_TABELA Compatível com permissões do IAM na localização do Amazon S3
CRIAR TABELA COMO SELEÇÃO CRIAR_TABELA Compatível com permissões do IAM na localização do Amazon S3
DESCRIBE TABLE DESCRIBE Compatível
SHOW TBLPROPERTIES DESCRIBE Compatível
SHOW COLUMNS DESCRIBE Compatível
SHOW PARTITIONS DESCRIBE Compatível
SHOW CREATE TABLE DESCRIBE Compatível
ALTERAR TABELA tablename SELECIONAR e ALTERAR Compatível
ALTERAR LOCALIZAÇÃO DO tablename CONJUNTO DE TABELAS - Não compatível
ALTERAR TABELA tablename ADICIONAR PARTIÇÃO SELECIONAR, INSERIR e ALTERAR Compatível
REPAIR TABLE SELECIONAR e ALTERAR Compatível
CARREGAR DADOS Não compatível
INSERT INSERIR e ALTERAR Compatível
INSERT OVERWRITE SELECIONAR, INSERIR, EXCLUIR e ALTERAR Compatível
DESCARTAR TABELA SELECIONAR, DESCARTAR, EXCLUIR e ALTERAR Compatível
TRUNCATE TABLE SELECIONAR, INSERIR, EXCLUIR e ALTERAR Compatível
Gravador de quadros de dados V1 Igual à operação SQL correspondente

Compatível ao anexar dados a uma tabela existente. Consulte as considerações e limitações para obter mais informações

Gravador de quadros de dados V2 Igual à operação SQL correspondente

Compatível ao anexar dados a uma tabela existente. Consulte as considerações e limitações para obter mais informações

Iceberg
Operation AWS Lake Formation permissões Status do suporte
SELECT SELECT Compatível
CRIAR TABELA CRIAR_TABELA Compatível
CREATE TABLE LIKE CRIAR_TABELA Compatível com permissões do IAM na localização do Amazon S3
CRIAR TABELA COMO SELEÇÃO CRIAR_TABELA Compatível com permissões do IAM na localização do Amazon S3
SUBSTITUA A TABELA CONFORME SELECIONADO SELECIONAR, INSERIR e ALTERAR Compatível
DESCRIBE TABLE DESCRIBE Compatível com permissões do IAM na localização do Amazon S3
SHOW TBLPROPERTIES DESCRIBE Compatível com permissões do IAM na localização do Amazon S3
SHOW CREATE TABLE DESCRIBE Compatível com permissões do IAM na localização do Amazon S3
ALTER TABLE SELECIONAR, INSERIR e ALTERAR Compatível
ALTER TABLE SET LOCATION SELECIONAR, INSERIR e ALTERAR Compatível com permissões do IAM na localização do Amazon S3
ALTERAR A GRAVAÇÃO DA TABELA ORDENADA POR SELECIONAR, INSERIR e ALTERAR Compatível com permissões do IAM na localização do Amazon S3
ALTERE A GRAVAÇÃO DA TABELA DISTRIBUÍDA POR SELECIONAR, INSERIR e ALTERAR Compatível com permissões do IAM na localização do Amazon S3
ALTERAR TABELA RENOMEAR TABELA CREATE_TABLE e DROP Compatível
INSERT INTO SELECIONAR, INSERIR e ALTERAR Compatível
INSERT OVERWRITE SELECIONAR, INSERIR e ALTERAR Compatível
DELETE SELECIONAR, INSERIR e ALTERAR Compatível
UPDATE SELECIONAR, INSERIR e ALTERAR Compatível
MERGE INTO SELECIONAR, INSERIR e ALTERAR Compatível
DESCARTAR TABELA SELECIONAR, EXCLUIR e SOLTAR Compatível
DataFrame Escritor V1 - Não compatível
DataFrame Escritor V2 Igual à operação SQL correspondente

Compatível ao anexar dados a uma tabela existente. Consulte as considerações e limitações para obter mais informações.

Tabelas de metadados SELECT Compatível. Certas tabelas estão ocultas. Consulte as considerações e limitações para obter mais informações.
Procedimentos armazenados - Compatível com tabelas que atendam às seguintes condições:
  • Tabelas não registradas em AWS Lake Formation

  • Tabelas que não usam register_table e migrate

    Consulte as considerações e limitações para obter mais informações.

Configuração do Spark para Iceberg: Se você quiser usar o formato Iceberg, defina as seguintes configurações. Substitua DB_LOCATION pelo caminho do Amazon S3 onde suas tabelas do Iceberg estão localizadas e os espaços reservados para a região e o ID da conta por seus próprios valores.

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

Se quiser usar o formato do Iceberg em versões anteriores do EMR, use o seguinte comando:

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

Exemplos:

Aqui estão alguns exemplos de como trabalhar com tabelas 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
Operation AWS Lake Formation permissões Status do suporte
SELECT SELECT Compatível
CRIAR TABELA CRIAR_TABELA Compatível com permissões do IAM na localização do Amazon S3
CREATE TABLE LIKE CRIAR_TABELA Compatível com permissões do IAM na localização do Amazon S3
CRIAR TABELA COMO SELEÇÃO - Não compatível
DESCRIBE TABLE DESCRIBE Compatível com permissões do IAM na localização do Amazon S3
SHOW TBLPROPERTIES DESCRIBE Compatível com permissões do IAM na localização do Amazon S3
SHOW COLUMNS DESCRIBE Compatível com permissões do IAM na localização do Amazon S3
SHOW CREATE TABLE DESCRIBE Compatível com permissões do IAM na localização do Amazon S3
ALTER TABLE SELECT Compatível com permissões do IAM na localização do Amazon S3
INSERT INTO SELECIONAR e ALTERAR Compatível com permissões do IAM na localização do Amazon S3
INSERT OVERWRITE SELECIONAR e ALTERAR Compatível com permissões do IAM na localização do Amazon S3
DELETE - Não compatível
UPDATE - Não compatível
MERGE INTO - Não compatível
DESCARTAR TABELA SELECIONAR e SOLTAR Compatível com permissões do IAM na localização do Amazon S3
DataFrame Escritor V1 - Não compatível
DataFrame Escritor V2 Igual à operação SQL correspondente Compatível com permissões do IAM na localização do Amazon S3
Tabelas de metadados - Não compatível
Manutenção de tabelas e recursos utilitários - Não compatível

Configuração do Spark para Hudi:

Para iniciar o shell Spark no EMR 7.10 ou versões superiores, use o comando a seguir:

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

Para iniciar o shell Spark em versões anteriores do EMR, use o comando abaixo em vez disso:

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

Exemplos:

Aqui estão alguns exemplos de como trabalhar com tabelas 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;

Para consultar o último instantâneo das copy-on-write tabelas:

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

Para consultar os dados compactados mais recentes das tabelas MOR, você pode consultar a tabela otimizada para leitura que tem o sufixo _ro:

SELECT * FROM my_hudi_mor_table_ro
spark.read.table("my_hudi_mor_table_ro")
Delta Lake
Operation AWS Lake Formation permissões Status do suporte
SELECT SELECT Compatível
CRIAR TABELA CRIAR_TABELA Compatível
CREATE TABLE LIKE - Não compatível
CRIAR TABELA COMO SELEÇÃO CRIAR_TABELA Compatível
SUBSTITUA A TABELA CONFORME SELECIONADO SELECIONAR, INSERIR e ALTERAR Compatível
DESCRIBE TABLE DESCRIBE Compatível com permissões do IAM na localização do Amazon S3
SHOW TBLPROPERTIES DESCRIBE Compatível com permissões do IAM na localização do Amazon S3
SHOW COLUMNS DESCRIBE Compatível com permissões do IAM na localização do Amazon S3
SHOW CREATE TABLE DESCRIBE Compatível com permissões do IAM na localização do Amazon S3
ALTER TABLE SELECIONAR e INSERIR Compatível
ALTER TABLE SET LOCATION SELECIONAR e INSERIR Compatível com permissões do IAM na localização do Amazon S3
ALTERAR tablename AGRUPAMENTO DE TABELAS POR SELECIONAR e INSERIR Compatível com permissões do IAM na localização do Amazon S3
ALTERAR TABELA tablename ADICIONAR RESTRIÇÃO SELECIONAR e INSERIR Compatível com permissões do IAM na localização do Amazon S3
ALTERAR RESTRIÇÃO DE tablename ELIMINAÇÃO DE TABELAS SELECIONAR e INSERIR Compatível com permissões do IAM na localização do Amazon S3
INSERT INTO SELECIONAR e INSERIR Compatível
INSERT OVERWRITE SELECIONAR e INSERIR Compatível
DELETE SELECIONAR e INSERIR Compatível
UPDATE SELECIONAR e INSERIR Compatível
MERGE INTO SELECIONAR e INSERIR Compatível
DESCARTAR TABELA SELECIONAR, EXCLUIR e SOLTAR Compatível
DataFrame Escritor V1 - Não compatível
DataFrame Escritor V2 Igual à operação SQL correspondente

Compatível

Manutenção de tabelas e recursos utilitários - Não compatível

Configuração do Spark para Delta Lake:

Para usar o Delta Lake com o Lake Formation no EMR 7.10 e superior, execute o seguinte comando:

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

Para usar o Delta Lake com o Lake Formation no EMR 6.15 a 7.9, execute o seguinte

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

Se quiser que o Lake Formation use o servidor de registros para gerenciar o catálogo do Spark, defina spark.sql.catalog.<managed_catalog_name>.lf.managed como verdadeiro.

Exemplos:

Aqui estão alguns exemplos de como trabalhar com tabelas 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 *;

Criação de uma tabela Delta Lake no AWS Glue Data Catalog

O Amazon EMR com Lake Formation não oferece suporte a comandos DDL e à criação de tabelas Delta em versões do EMR anteriores à 7.12. Siga estas etapas para criar tabelas no AWS Glue Data Catalog.

  1. Use o exemplo a seguir para criar uma tabela do Delta. Certifique-se de que sua localização no S3 exista.

    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. Para ver os detalhes da sua mesa, acesse https://console.aws.amazon.com/glue/.

  3. No painel de navegação à esquerda, expanda Data Catalog, escolha Tabelas e a tabela que você criou. Em Esquema, você verá que a tabela Delta que você criou com o Spark armazena todas as colunas em um tipo de dados do array<string> AWS Glue.

  4. Para definir filtros em nível de coluna e célula no Lake Formation, remova a coluna col do esquema e, em seguida, adicione as colunas que estão no esquema da tabela. Neste exemplo, adicione as colunas x, y e z.

Com esse recurso, você pode executar consultas de instantâneos em copy-on-write tabelas para consultar o instantâneo mais recente da tabela em um determinado instante de confirmação ou compactação. Atualmente, um cluster do Amazon EMR habilitado pelo Lake Formation deve recuperar a coluna de tempo de confirmação do Hudi para realizar consultas incrementais e consultas de viagem no tempo. Ele não é compatível com a sintaxe timestamp as of e a função Spark.read() do Spark. A sintaxe correta é select * from table where _hoodie_commit_time <= point_in_time. Para obter mais informações, consulte Point in time Time-Travel queries on Hudi table.

nota

A performance das leituras nos clusters do Lake Formation pode ser mais lenta devido às otimizações sem suporte. Esses atributos incluem listagem de arquivos com base nos metadados do Hudi e salto de dados. É recomendável testar a performance da aplicação para garantir que ela atenda aos seus requisitos.