Escolar Documentos
Profissional Documentos
Cultura Documentos
Hive e Interactive
Query
Carlos Hilario
carlos.hilario@remay.com.br
Agenda
4. Hive e Interactive Query
4.1. O que é o Hive e por que usá-lo ?
4.2. Aspectos Gerais
4.3. Inicializando o Hive
4.4. Tipos de Tabelas
4.5. Tipos de Dados
4.6. Tipos de Arquivos para Armazenamento
4.7. UDFs
4.8. HQL
4.9. Hcatalog
4.10 Otimizações
4.11. Cargas de Dados no Hive
4.12. Tabelas ACID
4.13. LLAP: long-lived execution in Hive
4. Hive - Overview
4. Hive - Overview
4. Hive e Interactive Query
4.1. O que é o Hive e por que usá-lo ?
O Apache Hive é um sistema de data warehouse para Hadoop que permite:
• Sumarização dos dados
• Consulta e análise de dados usando o HiveQL (uma linguagem de
consulta semelhante à SQL)
O Hive pode ser usado para explorar interativamente seus dados ou para criar
processamento em lote reutilizáveis.
4.2. Aspectos Gerais
Consultar esses dados sem o conhecimento de Java ou MapReduce.
HiveQL (a linguagem de consulta Hive) tem instruções semelhantes à T-SQL.
Manipular dados estruturados e semi-estruturados, como arquivos de texto
onde os campos são delimitados por caracteres específicos.
Possui o recurso de serialização/deserialização (SerDe) para dados complexos
ou irregularmente estruturados.
Possibilita o uso de User Defined Functions (UDFs) nas linguagens java,
python e C#.
4.3. Inicializando o Hive
Existem algumas maneiras básicas de se trabalhar com o hive:
• Terminal
• hive
• beeline
• Web
• Ambari Hive View
4.3. Inicializando o Hive
Hive:
• Executável padrão. Também conhecido como hive CLI.
Beeline:
• Conexão JDBC mais “leve”. É uma das interfaces padrão para se
trabalhar também com o Hive LLAP (será abordado posteriormente).
Ambari Hive View:
• Ambiente WEB padrão para se trabalhar com as consultas hive. Também
acessa o hive via JDBC e possui suporte para o Hive LLAP.
4.3. Inicializando o Hive
Abrir o Hive pelo executável padrão:
hive>
4.4. Databases e
Tipos de Tabelas
4.4. Databases e Tipos de Tabelas
CREATE DATABASE
• Cria um banco de dados para as tabelas Hive. É o schema das tabelas.
• Todos os bancos de dados Hive terão uma pasta criada dentro da pasta
padrão /apps/hive/warehouse/.
• A pasta padrão /apps/hive/warehouse/ é considerada como o database
default.
• Um Database pode possuir tabelas internas e também tabelas externas.
• Se uma tabela for criada sem o apontamento de um database, a mesma
será criada no database default.
4.4. Databases e Tipos de Tabelas
CREATE DATABASE
LINES TERMINATED BY
• Indica qual é o delimitador de linhas. Exemplo: \n
4.4. Databases e Tipos de Tabelas
Instruções típicas de um create table
LOCATION
• Indica em qual localidade os arquivos de dados da tabela serão criados.
Podemos utilizar o HDFS, Blob Storage ou Datalake Store.
TBLPROPERTIES
• Podemos definir tipo de compactação, filtros e demais configurações para
acessar os dados.
• A tabela pode ser transacional para aceitar operações CRUD.
• Habilita o uso de bloomfilters nas colunas da tabela.
4.5. Tipos de Dados
e Arquivos para
Armazenamento
4.5. Tipos de Dados
TIPOS PRIMITIVOS TIPOS REFERENTES ÀS COLEÇÕES/LISTAS
TINYINT
SMALLINT array_type
INT
ARRAY < data_type >
BIGINT
BOOLEAN
FLOAT map_type
DOUBLE MAP < primitive_type, data_type >
STRING
BINARY struct_type
TIMESTAMP
STRUCT < col_name : data_type [COMMENT col_comment], ...>
DECIMAL
DECIMAL(precision, scale)
DATE union_type
VARCHAR UNIONTYPE < data_type, data_type, ... >
CHAR
4.6. Tipos de Arquivos para Armazenamento
STORED AS
•.
STORED AS TIPO
TEXTFILE Arquivos texto convencionais. Ex. TXT, CSV
SEQUENCEFILE Arquivos compactados
ORC Formato colunar e indexado com suporte a transações
ACID e Cost Based Optimization (CBO)
PARQUET Formato colunar Parquet. Inicialmente criado para ser o
formato padrão do spark
RCFILE Formato colunar Record Columnar File
4.6. Tipos de Arquivos para Armazenamento
COMPARATIVO ENTRE OS TIPOS DE ARQUIVOS
•.
4.8. HQL e Otimizações
4.8. HQL
HQL - HIVE QUERY LANGUAGE
Particionamento de Tabelas
• O uso de partições melhora significativamente o desempenho se uma
consulta tem um filtro nas colunas particionadas
Buckets
• Tabelas ou partições podem ser divididos em buckets. Os buckets podem
ser considerados como mais um mecanismo de otimização de pesquisas
dentro de uma partição devido a organização dos dados que eles
proporcionam.
4.9.1. Otimizações – Tabelas
Esquema do Particionamento de Tabelas e Buckets
4.9.2. Otimizações – Queries
Algumas práticas que devemos executar ao se desenvolver nossas queries
• Joins
• Não utilizar transformações nas colunas de joins (evitar uso de cast nos critérios)
• Sempre que possível utilizar campos numéricos para se fazer joins e filtros - isso
otimiza os caminhos do plano de execução.
• Campos de Datas
• Ao se efetuar cálculos com campos de datas, deve-se utilizar as funções de datas
(UNIX_TIMESTAMP(), TO_DATE(), MONTH(), DAY(), YEAR() por exemplo), para
transformar a data em um BigInt e depois fazer os cálculos devidos.
• Subqueries
• O uso de subqueries é altamente recomendado até mesmo nos joins pois o engine
do hive modifica o plano de execução para aumento de performance.
4.10. Cargas de Dados no Hive
4.10. Cargas de Dados no Hive
LOAD DATA
• Faz a importação dos dados que estão na máquina local (Edge Node)
para uma tabela hive que esteja respeitando o formato do arquivo (csv,
tsv, gz, bz2, entre outros).
set hive.execution.engine=tez;
set hive.exec.dynamic.partition=false;
set hive.optimize.sort.dynamic.partition=false;
set hive.vectorized.execution.enabled=true;
set hive.vectorized.execution.reduce.enabled=true;
set hive.cli.print.header=true;
set hive.exec.compress.output = true;
set mapred.output.compression.codec =
org.apache.hadoop.io.compress.BZip2Codec;
4.10. Cargas de Dados no Hive
LAB 4.10.3. INSERT INTO TABLE
insert into table wsp_work_<<SeuPrimeiroNome>>.BolsaFamiliaFolhaPagamento
select
UF
,Codigo_SIAFI_Municipio
,Nome_Municipio
,Codigo_Funcao
,Codigo_Subfuncao
,Codigo_Programa
,Codigo_Acao
,NIS_Favorecido
,Nome_Favorecido
,Fonte_Finalidade
,Valor_Parcela
,ano_mes
from
wsp_work_<<SeuPrimeiroNome>>.BolsaFamiliaFolhaPagamento_stage;
4.10. Cargas de Dados no Hive
LAB 4.10.4. VERIFICAR A PASTA DA TABELA APÓS O INSERT
• Efetuar comandos do hadoop dentro da interface CLI do hive para
verificar as partições que foram criadas.
• Correção de Dados
4.11. Tabelas ACID
LAB 4.11.1. Create table de uma ACID Table:
set hive.execution.engine=tez;
set hive.vectorized.execution.enabled=true;
set hive.vectorized.execution.reduce.enabled=true;
set hive.cli.print.header=true;
• Terminal
• beeline
• Web
• Ambari Hive View
4.15.1. Inicializando o Hive com LLAP
LAB 4.15.1.1. Abrir o Beeline pelo executável padrão:
[sshuser@geral-ssh.azurehdinsight.net]#
beeline -u 'jdbc:hive2://localhost:10001/;transportMode=http' -n sshuser <enter>
Connecting to jdbc:hive2://localhost:10001
Connected to: Apache Hive (version 1.2.1000.2.5.0.0-1245)
Driver: Hive JDBC (version 1.2.1000.2.5.0.0-1245)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 1.2.1000.2.5.0.0-1245 by Apache Hive
0: jdbc:hive2://localhost:10001>
0: jdbc:hive2://localhost:10001>
4.15.1. Inicializando o Hive com LLAP
LAB 4.15.1.2. Abrir o Hive View pelo browser:
4.15.1. Inicializando o Hive com LLAP
LAB 4.15.1.3. Executar algumas queries com agregações:
Query 1
• select count(1) from
wsp_work_<<SeuPrimeiroNome>>.BolsaFamiliaFolhaPagamento;
Query 2
• select uf, count(1) from
wsp_work_<<SeuPrimeiroNome>>.BolsaFamiliaFolhaPagamento group by uf;
Query 3
• select uf, count(1) from
wsp_work_<<SeuPrimeiroNome>>.BolsaFamiliaFolhaPagamento where uf =
'SP' group by uf;
4.15.1. Inicializando o Hive com LLAP
LAB 4.15.1.3. Executar algumas queries com agregações:
Query 4
• select uf, Nome_Municipio, count(1) from
wsp_work_<<SeuPrimeiroNome>>.BolsaFamiliaFolhaPagamento group by uf,
Nome_Municipio limit 500;
4.15.1. Inicializando o Hive com LLAP
LAB 4.15.1.3. Executar algumas queries com agregações:
Query 5
create table wsp_work_<<SeuPrimeiroNome>>.BolsaFamiliaFolhaPagamento_totais1
stored as orc
tblproperties("orc.compress"="ZLIB")
as
select bffp.uf ,bffp.ano_mes, bffp.qtd_bffp qtde
from
( select uf ,ano_mes,count(1) qtd_bffp
from wsp_work_<<SeuPrimeiroNome>>.BolsaFamiliaFolhaPagamento
where uf = 'SP'
group by uf ,ano_mes
) bffp;
4.15.1. Inicializando o Hive com LLAP
LAB 4.15.1.3. Executar algumas queries com agregações:
Query 6
create table wsp_work_<<SeuPrimeiroNome>>.BolsaFamiliaFolhaPagamento_totais2
stored as orc
tblproperties("orc.compress"="ZLIB")
as
select
ano_mes,
sum(valor_parcela) total_ano_mes
from
orcdata.orc_bolsafamiliafolhapagamento
group by ano_mes;
© 2017 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.
The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market
conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation.
MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.