O Hive não grava dados no Delta Lake ou Apache Hudi, mas consulta ambos os formatos por meio de tabelas externas. Este tópico descreve como usar o Hive em um cluster E-MapReduce (EMR) para consultar dados do Delta Lake e do Hudi.
Pré-requisitos
Antes de começar, verifique se você tem:
Um cluster com os serviços Hive, Delta Lake e Hudi instalados. Para mais informações, consulte Criar um cluster.
Conexão estabelecida com o cluster. Para mais informações, consulte Fazer logon em um cluster.
Limitações
Para ler dados do Hudi com o Hive, o cluster deve atender aos seguintes requisitos de versão.
|
Versão do EMR |
Acesso do Hive ao Hudi |
|
V3.36.0 e versões menores posteriores |
Suportado |
|
V5.2.0 e versões menores posteriores |
Suportado |
|
Versões anteriores |
Não suportado. Use Spark ou Flink para consultar dados do Hudi. |
Consulte dados do Delta Lake usando o Hive
O Hive lê tabelas do Delta Lake criadas no Spark. Os passos a seguir orientam na criação de uma tabela do Delta Lake no Spark, na inserção de dados e na consulta desses dados pelo Hive.
Passo 1: Crie uma tabela do Delta Lake no Spark
-
Abra a CLI do Spark.
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; -
Verifique os dados consultando a tabela no Spark.
select * from delta_table;A saída é semelhante a:
2 3 4 0 1 Time taken: 1.847 seconds, Fetched 5 row(s)
Passo 2: Consulte dados do Delta Lake no Hive
-
Abra a CLI do Hive.
hive -
(Opcional) Inspecione os metadados da tabela.
desc formatted delta_table; -
Consulte a tabela do Delta Lake.
select * from delta_table;A saída é semelhante a:
OK 2 3 4 0 1 Time taken: 1.897 seconds, Fetched: 5 row(s)Os dados retornados pelo Hive correspondem aos da tabela do Delta Lake no Spark, confirmando que o Hive lê corretamente os dados do Delta Lake.
Consulte dados do Hudi usando o Hive
Apenas Spark ou Flink gravam dados no Hudi. O Hive oferece suporte apenas a acesso de leitura.
Passo 1: Prepare dados do Hudi usando o Spark
Antes de consultar pelo Hive, crie e popule uma tabela Hudi usando o Spark SQL.
Inicie o Spark SQL
O comando de inicialização depende das versões do Spark e do Hudi no cluster.
-
Para Spark 2 ou Spark 3 com Hudi anterior à versão 0,11:
spark-sql \ --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \ --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension' -
Para Spark 3 com Hudi 0,11 ou posterior:
spark-sql \ --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \ --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension' \ --conf 'spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog'
Crie e popule uma tabela Hudi
-
Crie uma tabela Hudi chamada
h0.create table h0 ( id bigint, name string, price double, ts long ) using hudi tblproperties ( primaryKey="id", preCombineField="ts" ); -
Inspecione o esquema da tabela.
desc formatted h0;A saída é semelhante a:
_hoodie_commit_time string _hoodie_commit_seqno string _hoodie_record_key string _hoodie_partition_path string _hoodie_file_name string id bigint name string price double ts bigintO Hudi adiciona automaticamente cinco campos de metadados a cada tabela:
_hoodie_commit_time,_hoodie_commit_seqno,_hoodie_record_key,_hoodie_partition_pathe_hoodie_file_name. Esses campos aparecem em todos os resultados de consulta que usamselect *. -
Insira, atualize e exclua dados.
-- insert insert into h0 values (1, 'a1', 10, 1000), (2, 'a2', 11, 1000); -- update update h0 set name = 'a1_new' where id = 1; -- delete delete from h0 where id = 1; -
Verifique os dados. Após as operações de atualização e exclusão, apenas a linha
id=2permanece.NotaComo
h0é uma tabela não particionada,_hoodie_partition_pathestá vazio. Os primeiros cinco valores na saída correspondem aos cinco campos de metadados do Hudi.select id, name, price, ts from h0;A saída é semelhante a:
2 a2 11.0 1000Para incluir os campos de metadados do Hudi no resultado, execute:
select * from h0;A saída é semelhante a:
4.820221130150621338 20221130150621338_0_1 id:2 40d6507e-0579-42ce-a10f-c5e07a3981e5-0_0-29-2007_2022113015062****.parquet 2 a2 11.0 1000
Para mais exemplos de Spark para Hudi, consulte o Guia do Spark.
Passo 2: Consulte dados do Hudi no Hive
Abra a CLI do Hive ou conecte-se via Beeline ao Hive ThriftServer e execute uma consulta na tabela Hudi.
-- select
select * from h0;
Próximos passos
Para explorar operações mais avançadas do Hudi no Spark, consulte o Guia do Apache Hudi para Spark.