Consultar tabelas do Linux Foundation Delta Lake - Amazon Athena

Consultar tabelas do Linux Foundation Delta Lake

O Linux Foundation Delta Lake é um formato de tabela para análise de big data. É possível usar o Amazon Athena para ler tabelas Delta Lake armazenadas no Amazon S3 de forma direta, sem a necessidade de gerar arquivos de manifesto ou executar a instrução MSCK REPAIR.

O formato Delta Lake armazena os valores mínimo e máximo de cada arquivo de dados por coluna. A implementação do Athena usa essas informações para habilitar o salto de arquivos em predicados com a finalidade de eliminar arquivos indesejados da consideração.

Considerações e limitações

O suporte para o Delta Lake no Athena tem as limitações e considerações a seguir:

  • Somente tabelas com catálogo do AWS Glue: o suporte nativo do Delta Lake é compatível somente por meio de tabelas registradas no AWS Glue. Se você tiver uma tabela Delta Lake registrada em outro metastore, ainda poderá mantê-la e tratá-la como metastore principal. Como os metadados do Delta Lake são armazenados no sistema de arquivos (por exemplo, no Amazon S3) e não no metastore, o Athena requer somente a propriedade “location” no AWS Glue para ler as tabelas Delta Lake.

  • Somente versão 3 do mecanismo: as consultas do Delta Lake tem suporte somente na versão 3 do mecanismo do Athena. Você deve garantir que o grupo de trabalho criado esteja configurado para usar a versão 3 do mecanismo do Athena.

  • Versão do leitor Delta Lake — O protocolo do leitor Delta Lake até a versão 3 é suportado.

  • Mapeamento de colunas e timestampNtz — O mapeamento de colunas Delta, que permite que as colunas da tabela Delta e as colunas subjacentes do arquivo Parquet usem nomes diferentes, e o timestamp sem fuso horário (timestampNtz) são suportados.

  • Nenhum suporte para passagem de tempo: não há suporte para consultas que usam as funcionalidades de passagem de tempo do Delta Lake.

  • Somente leitura: não há suporte para gravar instruções DML, como UPDATE, INSERT ou DELETE.

  • Compatibilidade com o Lake Formation: a integração com o Lake Formation está disponível para tabelas do Delta Lake com seu esquema sincronizado com o AWS Glue. Para obter mais informações, consulte Usar o AWS Lake Formation com o Amazon Athena e Configurar permissões para uma tabela do Delta Lake no Guia de desenvolvedor do AWS Lake Formation.

  • Suporte DDL limitado: as instruções DDL a seguir são compatíveis: CREATE EXTERNAL TABLE, SHOW COLUMNS, SHOW TBLPROPERTIES, SHOW PARTITIONS, SHOW CREATE TABLE e DESCRIBE. Para obter informações sobre como usar a instrução CREATE EXTERNAL TABLE, consulte a seção Conceitos básicos.

  • Não é possível ignorar objetos do S3 Glacier: se os objetos na tabela do Linux Foundation Delta Lake estiverem em uma classe de armazenamento do Amazon S3 Glacier, definir a propriedade da tabela read_restored_glacier_objects como false não terá efeito.

    Por exemplo, suponhamos que você emita o seguinte comando:

    ALTER TABLE table_name SET TBLPROPERTIES ('read_restored_glacier_objects' = 'false')

    Para tabelas do Iceberg e do Delta Lake, o comando gera o erro Chave de propriedade da tabela não compatível: read_restored_glacier_objects. Para tabelas do Hudi, o comando ALTER TABLE não gera um erro, mas os objetos do Amazon S3 Glacier ainda assim não são ignorados. A execução de consultas SELECT após o comando ALTER TABLE continua a retornar todos os objetos.

Tipos de dados compatíveis para colunas sem partições

Para colunas sem partições, há suporte para todos os tipos de dados compatíveis com o Athena, exceto CHAR. Não há suporte para CHAR no próprio protocolo do Delta Lake). Os tipos de dados compatíveis incluem:

boolean tinyint smallint integer bigint double float decimal varchar string binary date timestamp array map struct

Tipos de dados compatíveis para colunas com partições

Para colunas com partições, o Athena é compatível com tabelas com os tipos de dados a seguir:

boolean integer smallint tinyint bigint decimal float double date timestamp varchar

Para obter mais informações sobre os tipos de dados no Athena, consulte Tipos de dados no Amazon Athena.

Conceitos básicos

Para ser consultável, a tabela Delta Lake deve existir no AWS Glue. Se a tabela estiver no Amazon S3, mas não estiver no AWS Glue, execute uma instrução CREATE EXTERNAL TABLE usando a sintaxe a seguir. Se a tabela já existe no AWS Glue (por exemplo, porque você está usando o Apache Spark ou outro mecanismo com o AWS Glue), você pode ignorar esta etapa.

CREATE EXTERNAL TABLE [db_name.]table_name LOCATION 's3://DOC-EXAMPLE-BUCKET/your-folder/' TBLPROPERTIES ('table_type' = 'DELTA')

Observe a omissão das definições das colunas, da biblioteca SerDe e de outras propriedades da tabela. Ao contrário das tabelas Hive tradicionais, os metadados da tabela Delta Lake são inferidos do log de transações do Delta Lake e sincronizados diretamente com o AWS Glue.

nota

Para tabelas Delta Lake, as instruções CREATE TABLE que incluem mais do que as propriedades LOCATION e table_type não são permitidas.

Leitura de tabelas Delta Lake

Para consultar uma tabela Delta Lake, use a sintaxe SQL padrão SELECT:

[ WITH with_query [, ...] ]SELECT [ ALL | DISTINCT ] select_expression [, ...] [ FROM from_item [, ...] ] [ WHERE condition ] [ GROUP BY [ ALL | DISTINCT ] grouping_element [, ...] ] [ HAVING condition ] [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ] [ ORDER BY expression [ ASC | DESC ] [ NULLS FIRST | NULLS LAST] [, ...] ] [ OFFSET count [ ROW | ROWS ] ] [ LIMIT [ count | ALL ] ]

Para obter mais informações sobre a sintaxe SELECT, consulte SELECT na documentação do Athena.

O formato Delta Lake armazena os valores mínimo e máximo de cada arquivo de dados por coluna. O Athena usa essas informações para habilitar o salto de arquivo em predicados com a finalidade de eliminar arquivos desnecessários da consideração.

Sincronização de metadados do Delta Lake

O Athena sincroniza os metadados da tabela, incluindo o esquema, as colunas com partições e as propriedades da tabela, para o AWS Glue se você usar o Athena para criar a tabela Delta Lake. Com o passar do tempo, esses metadados podem perder a sincronização com os metadados da tabela subjacente no log de transações. Para manter a tabela atualizada, escolha uma das seguintes opções:

Observe que os recursos a seguir exigem que seu esquema do AWS Glue sempre tenha o mesmo esquema do log de transações:

  • Lake Formation

  • Visões

  • Filtros de linha e coluna

Se o seu fluxo de trabalho não exigir nenhuma dessas funcionalidades e você preferir não manter essa compatibilidade, pode usar o DDL CREATE TABLE no Athena e depois adicionar o caminho do Amazon S3 como um parâmetro SerDe no AWS Glue.

Para criar uma tabela Delta Lake usando o Athena e consoles do AWS Glue
  1. Abra o console do Athena em https://console.aws.amazon.com/athena/.

  2. No editor de consultas do Athena, use o seguinte DDL para criar sua tabela Delta Lake. Observe que, ao usar esse método, o valor de TBLPROPERTIES deve ser 'spark.sql.sources.provider' = 'delta', e não'table_type' = 'delta'.

    Observe que esse mesmo esquema (com uma única coluna chamada col de tipo array<string>) é inserido quando você usa o Apache Spark (Athena para Apache Spark) ou a maioria dos outros mecanismos para criar sua tabela.

    CREATE EXTERNAL TABLE [db_name.]table_name(col array<string>) LOCATION 's3://DOC-EXAMPLE-BUCKET/your-folder/' TBLPROPERTIES ('spark.sql.sources.provider' = 'delta')
  3. Abra o console do AWS Glue em https://console.aws.amazon.com/glue/.

  4. No painel de navegação, escolha Catálogo de dados, Tabelas.

  5. Na lista de tabelas, escolha o link da sua tabela.

  6. Na página da tabela, escolha Ações, Editar tabela.

  7. Na seção Parâmetros do Serde, adicione a chave path com o valor s3://DOC-EXAMPLE-BUCKET/your-folder/.

  8. Escolha Salvar.

Recursos adicionais do

Para uma discussão sobre o uso de tabelas do Delta Lake com AWS Glue e fazendo consultas com o Athena, consulte Gerencie as operações de dados do UPSERT usando o Delta Lake de código aberto e AWS Glue no AWSBlog Big Data.