Consultar tabelas do Linux Foundation Delta Lake
O Linux Foundation Delta LakeMSCK 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
ouDELETE
. -
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
eDESCRIBE
. Para obter informações sobre como usar a instruçãoCREATE 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
comofalse
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 comandoALTER TABLE
não gera um erro, mas os objetos do Amazon S3 Glacier ainda assim não são ignorados. A execução de consultasSELECT
após o comandoALTER 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:
-
Use o crawler do AWS Glue para tabelas Delta Lake. Para obter mais informações, consulte Introdução de compatibilidade com tabelas nativas do Delta Lake com crawlers doAWS Glue
no blog sobre AWS Big Data e Agendar um crawler no AWS Glue no Guia do desenvolvedor do AWS Glue. -
Solte e recrie a tabela no Athena.
-
Use o SDK, a CLI ou o console do AWS Glue para atualizar manualmente o esquema no AWS Glue.
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
Abra o console do Athena em https://console.aws.amazon.com/athena/
. -
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 tipoarray<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') Abra o console do AWS Glue em https://console.aws.amazon.com/glue/
. -
No painel de navegação, escolha Catálogo de dados, Tabelas.
-
Na lista de tabelas, escolha o link da sua tabela.
-
Na página da tabela, escolha Ações, Editar tabela.
-
Na seção Parâmetros do Serde, adicione a chave
path
com o valors3://DOC-EXAMPLE-BUCKET/
.your-folder
/ -
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