O EMR Trino oferece um conector Delta independente com suporte a recursos abrangentes de data lake em clusters E-MapReduce.
Informações básicas
O Delta Lake é uma solução de data lake da Databricks que fornece recursos centrados em dados para gerenciar o ciclo de vida dos dados. Para obter mais informações, consulte Overview of Delta Lake.
Pré-requisitos
Crie um dos seguintes tipos de cluster: DataLake ou Custom com o service Trino, ou Hadoop com o service Presto. Para obter mais informações, consulte Create a cluster.
Limitações
O conector Delta tem suporte em clusters DataLake, Custom e Hadoop que executam o EMR-3.39.1 ou posterior, ou o EMR-5.5.0 ou posterior.
Uso básico
Modifique a configuração do conector
Para modificar a configuração do conector Delta, consulte Modify the configurations of a built-in connector.
Configuração padrão do conector
No console EMR, acesse a página Configure do service Trino. Na seção Service Configuration, clique em delta.properties. Adicione ou modifique parâmetros conforme o seu ambiente.
|
Parâmetro |
Descrição |
|
hive.metastore.uri |
URI para conexão com o metastore do Hive via protocolo Thrift. O formato padrão é thrift://master-1-1.cluster-24****:9083. |
|
hive.config.resources |
Localização dos arquivos de resource usados pelo metastore do Hive. |
Exemplo
O Trino não cria nem modifica tabelas do Delta Lake. Utilize o Spark SQL para essas operações. Para obter mais informações, consulte Basic usage.
-
Gere os dados.
-
Execute o comando a seguir para acessar a linha de comando do Spark SQL.
spark-sql -
Execute a instrução a seguir para criar uma tabela do Delta Lake.
CREATE TABLE delta_table (id INT) USING delta; -
Execute a instrução a seguir para gravar dados na tabela.
INSERT INTO delta_table VALUES 0,1,2,3,4;
-
-
Consulte os dados.
Acesse a linha de comando do Trino. Para obter mais informações, consulte Access Trino using a command-line interface.
-
Execute a instrução a seguir para consultar a tabela.
SELECT * FROM delta_table;O sistema retorna a seguinte saída:
id ---- 0 1 2 3 4 (5 rows)
Uso avançado
Os recursos a seguir têm suporte no EMR-3.39.1 ou posterior, ou no EMR-5.5.0 ou posterior.
Time travel
O recurso time travel permite consultar dados históricos de uma tabela.
O EMR Trino oferece suporte a time travel para tabelas do Delta Lake. A sintaxe é FOR xxx AS OF, onde xxx pode ser VERSION ou TIMESTAMP, indicando se a consulta ocorre por número de versão ou por timestamp.
Em comparação com a sintaxe do Spark SQL para Delta Lake, a sintaxe de time travel do Trino adiciona a palavra-chave FOR.
Exemplo:
-
Execute o comando a seguir para acessar a linha de comando do Spark SQL.
spark-sql -
Execute a instrução a seguir para sobrescrever os dados.
INSERT OVERWRITE TABLE delta_table VALUES 5,6,7,8,9; -
Consulte os dados.
Acesse a linha de comando do Trino. Para obter mais informações, consulte Access Trino using a command-line interface.
-
Execute a instrução a seguir para consultar a tabela.
SELECT * FROM delta_table;O sistema retorna a seguinte saída:
id ---- 5 6 7 8 9 (5 rows)
-
Use time travel para consultar dados históricos.
Execute a instrução a seguir para consultar dados por número de versão. O número de versão é um inteiro monotonicamente crescente. Por padrão, esse valor é 1 após a primeira operação INSERT e aumenta em 1 a cada modificação.
SELECT * FROM delta_table FOR VERSION AS OF 1;O sistema retorna a seguinte saída:
id ---- 2 1 3 4 0 (5 rows)Também é possível consultar dados por timestamp. Há suporte a três tipos de timestamp: DATE, TIMESTAMP e TIMESTAMP WITH TIME ZONE.
DATE: Consulta dados às 00:00:00 UTC na data especificada.
-
TIMESTAMP: Consulta dados no timestamp especificado em UTC.
Por exemplo, execute a instrução a seguir para consultar dados às 20:00:00 de 15 de fevereiro de 2022, no horário de Pequim (UTC+08:00), usando o tipo TIMESTAMP.
SELECT * FROM delta_table FOR TIMESTAMP AS OF TIMESTAMP '2022-02-15 12:00:00';NotaNesta instrução, a primeira palavra-chave TIMESTAMP define o modo de time travel como timestamp (não o modo de número de versão). A segunda palavra-chave TIMESTAMP converte o literal de string para o tipo de dados TIMESTAMP (não o tipo DATE).
O sistema retorna a seguinte saída:
id ---- 2 0 3 4 1 (5 rows) -
TIMESTAMP WITH TIME ZONE: Consultas com TIMESTAMP WITH TIME ZONE exigem conversão de tipo.
Por exemplo, para consultar dados às 20:00:00 de 15 de fevereiro de 2022, no horário de Pequim (UTC+08:00), use a instrução a seguir.
SELECT * FROM delta_table FOR TIMESTAMP AS OF CAST('2022-02-15 20:00:00 +0800' AS TIMESTAMP WITH TIME ZONE);
Z-order
O Trino usa Z-Ordering para otimizar consultas em tabelas do Delta Lake ao aproveitar as otimizações nativas do Parquet e o data skipping. Após a otimização, o Delta Lake coleta estatísticas no nível de arquivo, como valores mínimos e máximos de cada coluna. O conector Delta utiliza essas informações para filtrar arquivos de dados diretamente.
Colunas de Z-Ordering configuradas adequadamente podem tornar as consultas do Trino dezenas de vezes mais rápidas em tabelas do Delta Lake otimizadas com os comandos OPTIMIZE e ZORDER BY.
O Trino oferece suporte a Z-Ordering para os seguintes tipos de dados: Int, Long, Double, Float, Binary, Boolean, String e Array.
O Trino aceita os seguintes predicados para data skipping com Z-Ordering: =, <, <=, > e >=.
Atualmente, o Trino não aceita predicados como like e in. No entanto, devido à natureza de preservação de localidade do Z-Ordering, consultas que usam esses predicados ainda podem apresentar execução mais rápida após a otimização com Z-Ordering.
Por exemplo, considere uma tabela chamada conn_zorder com quatro colunas: src_ip, src_port, dst_ip e dst_port.
Primeiro, execute a seguinte instrução de otimização no Spark:
OPTIMIZE conn_zorder ZORDER BY (src_ip, src_port, dst_ip, dst_port);
A ordem das colunas entre parênteses define o Z-Ordering.
A operação OPTIMIZE pode levar algum tempo dependendo do volume de dados. Após a otimização, todas as consultas que usam essas condições de filtro terão execução mais rápida.
-
A consulta a um subconjunto das colunas com Z-Ordering melhora o desempenho. Por exemplo:
SELECT COUNT(*) FROM conn_zorder WHERE src_ip > '64.'; -
A consulta baseada na sequência de Z-Ordering aumenta significativamente a velocidade da consulta. Por exemplo:
SELECT COUNT(*) FROM conn_zorder WHERE src_ip >= '64.' AND dst_ip < '192.' AND src_port < 1000 AND dst_port > 50000;