O conector Delta permite consultar tabelas do Delta Lake diretamente no E-MapReduce (EMR) Trino. Ele oferece suporte a todos os recursos de código aberto do Delta Lake e adiciona capacidades aprimoradas, como time travel e aceleração de consultas baseada em Z-Ordering.
Informações básicas
O Delta Lake é uma solução de data lake desenvolvida pela Databricks que fornece recursos para gravar, gerenciar, consultar e ler dados em data lakes. Para obter mais informações, consulte Visão geral.
Pré-requisitos
Antes de começar, verifique se você tem:
Um cluster DataLake ou Custom com o serviço Trino ativado, ou um cluster Hadoop com o serviço Presto ativado
Para criar um cluster, consulte Criar um cluster.
Versões compatíveis
O conector Delta é compatível com:
Clusters Hadoop executando EMR V3.39.1, EMR V5.5.0 ou versão secundária posterior
Clusters DataLake e Custom (sem restrição de versão)
Configure o conector Delta
As configurações do conector Delta ficam na aba delta.properties, dentro da aba Configure do serviço Trino no console EMR. Para alterar essas configurações, siga as instruções em Modifique as configurações de um conector integrado.
|
Item de configuração |
Descrição |
|
|
URI para acessar o metastore do Hive via protocolo Thrift. Formato padrão: |
|
|
Caminho do arquivo de recursos usado pelo metastore do Hive |
Consultar tabelas do Delta Lake
O Trino lê tabelas do Delta Lake, mas não pode criá-las nem modificá-las. Use o Spark SQL para criar tabelas e gravar dados. Para mais detalhes, consulte Usar o Delta Lake.
O exemplo a seguir mostra como criar uma tabela com Spark SQL e consultá-la posteriormente no Trino.
Etapa 1: Crie uma tabela e inserir dados
-
Abra a CLI do Spark SQL:
spark-sql -
Crie uma tabela do Delta Lake chamada
delta_table:CREATE TABLE delta_table (id INT) USING delta; -
Insira dados na tabela:
INSERT INTO delta_table VALUES 0,1,2,3,4;
Etapa 2: Consultar dados no Trino
Faça login no console do Trino. Para obter instruções, consulte Fazer login no console do Trino executando comandos.
-
Execute a consulta a seguir:
SELECT * FROM delta_table;Saída esperada:
id ---- 0 1 2 3 4 (5 rows)
Recursos avançados
Os recursos abaixo são compatíveis apenas com as versões EMR V3.39.1 e EMR V5.5.0.
Time travel
O recurso de time travel permite consultar um snapshot histórico de uma tabela do Delta Lake por número de versão ou timestamp. O EMR Trino usa a sintaxe FOR ... AS OF:
-- Query by version number
SELECT * FROM <table> FOR VERSION AS OF <version>;
-- Query by timestamp
SELECT * FROM <table> FOR TIMESTAMP AS OF <timestamp>;
A sintaxe de time travel do EMR Trino inclui a palavra-chave FOR. Isso difere do Spark SQL de código aberto, que não usa FOR nessa sintaxe.
Consulta por versão
Os números de versão são inteiros que começam em 1 após o primeiro INSERT e incrementam em 1 a cada modificação.
O exemplo a seguir sobrescreve os dados da delta_table e consulta uma versão anterior usando time travel.
-
Sobrescreva os dados no Spark SQL:
INSERT OVERWRITE TABLE delta_table VALUES 5,6,7,8,9; -
Confirme o estado atual no Trino:
SELECT * FROM delta_table;Saída:
id ---- 5 6 7 8 9 (5 rows) -
Consulte os dados conforme estavam na versão 1:
SELECT * FROM delta_table FOR VERSION AS OF 1;Saída:
id ---- 2 1 3 4 0 (5 rows)
Consulta por timestamp
Há suporte para três tipos de timestamp: DATE, TIMESTAMP e TIMESTAMP WITH TIME ZONE.
Em consultas baseadas em timestamp do tipo DATE, o sistema retorna os dados cujo timestamp corresponde a 00:00:00 UTC na data da consulta.
-
Em consultas baseadas em timestamp do tipo TIMESTAMP, o sistema retorna os dados cujo timestamp em UTC corresponde ao valor especificado. Por exemplo, para consultar dados das 20:00:00 de 15 de fevereiro de 2022 (UTC+8) usando o tipo TIMESTAMP:
NotaNa forma TIMESTAMP, a primeira palavra-chave
TIMESTAMPespecifica o modo de time travel, enquanto a segundaTIMESTAMPé a palavra-chave do tipo literal.SELECT * FROM delta_table FOR TIMESTAMP AS OF TIMESTAMP '2022-02-15 12:00:00';Saída retornada:
id ---- 2 0 3 4 1 (5 rows) -
Se a consulta usar um timestamp do tipo TIMESTAMP WITH TIME ZONE, o tipo de dado será convertido implicitamente antes da leitura do snapshot:
SELECT * FROM delta_table FOR TIMESTAMP AS OF CAST('2022-02-15 20:00:00 +0800' AS TIMESTAMP WITH TIME ZONE);
Z-Ordering
Z-Ordering é uma técnica de otimização de layout de dados que agrupa informações relacionadas no mesmo conjunto de arquivos. Há suporte para otimização de consultas baseada em Parquet e data skipping. Após aplicar o Z-Ordering, o Delta Lake coleta estatísticas de mínimo e máximo para cada coluna em nível de arquivo e as usa para ignorar arquivos irrelevantes durante as consultas. O conector Delta lê essas estatísticas, permitindo que o Trino ignore arquivos de dados e acelere as consultas em até dezenas de vezes.
Otimizar uma tabela
Execute o comando OPTIMIZE com ZORDER BY no Spark para regravar e ordenar os dados da tabela. O exemplo a seguir otimiza a tabela conn_zorder, que possui as colunas src_ip, src_port, dst_ip e dst_port:
OPTIMIZE conn_zorder ZORDER BY (src_ip, src_port, dst_ip, dst_port);
A ordem das colunas na cláusula ZORDER BY determina a prioridade do Z-Ordering. O tempo necessário para concluir uma operação OPTIMIZE varia conforme o volume de dados.
Tipos de coluna compatíveis
O Z-Ordering é compatível com os seguintes tipos de dados de coluna: INT, LONG, DOUBLE, FLOAT, BINARY, BOOLEAN, STRING e ARRAY.
Predicados compatíveis com data skipping
Ao consultar dados com Z-Ordering, o recurso de data skipping aplica filtragem em nível de arquivo para estes predicados: =, <, <=, > e >=.
Os predicados LIKE e IN não acionam o data skipping completo. No entanto, consultas que usam LIKE ou IN ainda podem se beneficiar da ordenação parcial quando as colunas com Z-Ordering restringem o intervalo de arquivos relevantes.
Exemplos de consulta
Após a otimização, as consultas que filtram por colunas com Z-Ordering apresentam desempenho significativamente superior:
-- Filter on a single Z-Ordered column
SELECT COUNT(*) FROM conn_zorder WHERE src_ip > '64.';
-- Filter on multiple Z-Ordered columns
SELECT COUNT(*) FROM conn_zorder WHERE src_ip >= '64.' AND dst_ip < '192.' AND src_port < 1000 AND dst_port > 50000;
Próximos passos
Usar o Delta Lake — crie e gerencie tabelas do Delta Lake com Spark SQL
Fazer login no console do Trino executando comandos — conecte-se ao Trino para executar consultas
Modifique as configurações de um conector integrado — personalize as definições do conector