SlideShare uma empresa Scribd logo
1 de 30
Baixar para ler offline
• Origem do Hive, o que é e quando usar?
• Hive x Bancos de dados relacionais
• Organização dos Dados
• Tipos de Dados
• Operadores relacionais
• Funções pré-existentes
• Hive Query Language
• Formatos de armazenamento de dados
• Desenvolvido inicialmente pelo Facebook em 2007;
• Objetivo: Ajudar a empresa a gerir melhor as massas de dados geradas
naquele momento;
• Em 2007 Facebook já tinha 15TB de dados;
• Pouco tempo depois o volume aumentou para 700TB.
• Data Warehouse do Facebook demorava demais para processar consultas
diárias;
• Mudança do Data Warehouse para o Hadoop;
• Dificuldade de se criar jobs MapReduce e alto consumo de tempo dos seu
funcionários;
• Criação do Hive - ferramenta com conceitos similares dos bancos de dados
tradicionais.
• É um Data Warehouse escalável, tolerante a falhas que construído no
ecossistema Hadoop;
• Suporta grandes massas de dados;
• Sistema para processamento em batch;
• Possui uma linguagem de consulta similar ao Struture Query Language
(SQL) conhecida como Hive Query Language (HiveQL).
• Quando já se tem conhecimento de SQL;
• Compatível com outras ferramentas do ecossistema Hadoop - (outras
ferramentas do Hadoop permitem usar o Hive como forma de
armazemanto);
• Dados estruturados;
• Processamento em batch (Processamento de grandes massas de dados).
Hive Bancos relacionais
Similar ao SQL SQL
Análise OLTP Sistemas Transacionais (e.g., ERP's) e
Análise (e.g., Data Warehouses)
Processamento em batch Processamento em batch e tempo real
Projetado para o processamento distribuído Não projetado para processamento
distribuído
Alta performance em computadores de
baixo custo (Hadoop)
Alta performance em computadores
proprietários e de alto custo
Baixo custo de armazenamento Armazenamento caro e limitado comparado
ao HDFS (Sistema de armazenamento do
Hadoop)
• Banco de dados: É um namespace que separa tabelas e outras unidades;
• Tabela: Unidades homogêneas que possuem um esquema;
• Partição: Uma coluna “virtual” que define o armazenamento dos dados no
HDFS. Cada tabela pode ter uma ou mais partições;
• Bucket: Em cada partição, os dados podem ser dividos em buckets baseado
no hash do valor de uma coluna.
• Essas divisões tanto das partições quanto em buckets permitem que o
sistema restrinja o acesso a uma grande quatidade de dados durante o
processamento de uma consulta resultando em melhor performance.
Entidade Exemplo Localização
banco de dados testedb /user/hive/warehouse/testedb.db
tabela T /user/hive/warehouse/testedb.db/T
partição date='09092019' /user/hive/warehouse/testedb.db/T/date=09092019
/user/hive/warehouse/testedb.db/T/date=09092019/000000_0
bucket Coluna userid ...
/user/hive/warehouse/testedb.db/T/date=09092019/000032_0
/user/hive/warehouse/ Diretório Default do Hive
Cria Pasta dentro do diretório do Hive
Tipo de dado homogêneo T i p o d e d a d o h e t e r o g ê n e o
tinyint 1 byte timestamp ARRAY ARRAY<TipoDoDado>
smallint
2 bytes
date - YYYY-
MM-DD
MAP MAP<NomeDaChave, Valor>
int 4 bytes string STRUCT STRUCT<NomeDoCampo :
TipoDoDado, ...>
bigint 8 bytes varchar UNION UNIONTYPE<TipoDoDado,
TipoDoDado, ...>
float 4 bytes char
float 8 bytes boolean
decimal -
precisão 38
dígitos
binary
Operador Descrição
A = B | A == B Retorna true se a expressão A for igual a
expressão B e false caso contrário.
A <=> B Retorna o mesmo resultado do operador =
para A e B não nulos. Retorna true se
ambos forem NULL e false
se apenas um deles forem NULL.
A <> B | A != B Retorna NULL se A ou B forem nulos.
Retorna true se a expressão A não for igual
a expressão B e false caso
sejam iguais
A < B Retorna NULL se A ou B forem nulos
A <= B
A > B
A >= B
Operador Descrição
A [NOT] BETWEEN B AND C Retorna true se A for maior ou igual a B e A
for menor ou
igual a C Isso pode ser invertido através da
palavra NOT.
A IS NULL Retorna true se a expressão A for nula
A IS NOT NULL Retorna NULL se A ou B forem nulos.
Retorna true se a expressão A não for igual
a expressão B e false caso
sejam iguais
A [NOT] LIKE B Exemplo: ‘foobar’ LIKE ‘foo’ = false ‘foobar’
LIKE ‘foo___’ = true ‘foobar’ LIKE ‘foo%’ =
true
A RLIKE B Exemplo: ‘foobar’ RLIKE ‘foo’ ⇒ true
A REGEXP B O mesmo que RLIKE
Função Retorno Descrição
round(double A) bigint Valor arredondado
floor(double A) bigint maior inteiro tal que seja menor ou igual ao
parâmetro
celi(double A) bigint menor inteiro tal que seja maior ou igual ao
parâmetro
substr(string A, int start) string Substring de A com início no caractér da posição
start até o final da string
A
upper(string A) string Conversão de todos os caractéres de A para letras
maíusculas
length(string S) int Tamanho da string
year(string timestamp) int Apenas o ano da string timestamp
get_json_object(string
jsonString, string
path)
string Extrai de uma string JSON um objeto JSON
baseado no caminho
especificado.
Exemplo: get_json_object(src_json.json,
'$.store.fruit[0]')
Função Retorno Descrição
count (*) bigint Conta o número total de linhas retornadas,
incluindo linhas que possuem
valores NULL.
sum(coluna) double Retorna a soma dos valores na coluna
especificada.
avg(coluna) double Retorna a média dos elementos na coluna
especificada.
min(coluna) max(coluna) double Retorna o menor ou maior valor encontrado na
coluna especificada.
explode(array) N linhas Retorna zero ou mais linhas onde cada elemento
do ARRAY se tornará
uma linha distinta.
explode(map) N linhas Retorna zero ou mais linhas onde cada chave e
valor do MAP se tornará
uma linha distinta com duas novas colunas, uma
para a chave e outra
para o valor.
• Executando Hive no modo local;
$ beeline -u <url> -n <nome do usuário> -d <driver> -p <senha>
• -- Beeline em modo local
$ beeline -u jdbc:hive2://quickstart:10000/ -n admin -d
org.apache.hive.jdbc.HiveDriver
• Criando uma base de dados/name espace;
-- Criar um banco de dados chamado nomeDoBanco
CREATE DATABASE nomeDoBanco;
• Para usar um banco:
USE nomeDoBanco;
• -- Criar um banco de dados chamado nomeDoBanco, adicionando um
comentário descritivo do banco e algumas outras propriedades
CREATE DATABASE nomeDoBanco;
COMMENT 'Banco de dados teste'
WITH DBPROPERTIES ('criadoPor' = 'Rafael Sanches', 'Data' = '01/10/2019');
• Show e Describe;
-- Lista todos os bancos de dados no Hive
• SHOW DATABASE;
-- Apresenta algumas informações básicas sobre o banco de dados solicitado
• DESCRIBE DATABASE nomeDoBanco; (e.g., default)
Criando uma tabela;
CREATE TABLE serasa (
id INT,
name STRING
)
PARTITIONED BY (date STRING) -- Particiona os dados em função da coluna
date
ROW FORMAT DELIMITED -- A linha é delimitada por uma nova linha
FIELDS TERMINATED BY '|' -- Os campos são delimitados pelo pipe
LINES TERMINATED BY 'n' -- As linhas são delimitados pelo n
STORED AS TEXTFILE; -- Armazena os dados como um arquivo texto
• Inserindo dados na tabela;
INSERT INTO TABLE serasa
PARTITION (date='01102019')
VALUES (1, 'Rafael Sanches' ),
(2, 'Joelson Santos' ),
(3, 'Mauricio Sobrinho' );
/ user / hive / warehouse / nomeDoBanco / serasa / date=01102019 / 000000_0
1|Rafael Sanches
2|Joelson Santos
3|Mauricio Sobrinho
Conteúdo do arquivo
-- Criação de uma nova tabela a partir de uma consulta a outra tabela.
CREATE TABLE new_key_value_store
AS
SELECT new_key, concat(key, value) key_value_pair
FROM key_value_store
SORT BY new_key, key_value_pair;
• Criando index e removendo index;
-- Index aumenta a velocidade de busca de certas colunas da tabela. A
velocidade aumenta com o custo de processamento e de mais espaço em disco.
Os dados indexados são armazenados em uma outra tabela.
CREATE INDEX in 1 ON TABLE serasa(id) AS 'Compact'
WITH DEFERRED REBUILD;
-- Lista todos os index ta tabela
SHOW INDEX ON serasa;
-- Deletar index
DROP INDEX in 1 ON serasa;
-- Por se tratar de uma tabela externa (EXTERNAL TABLE), a deleção da tabela
externa (DROP TABLE) apaga apenas os metadados mas não exclui os dados
do sistema de arquivos. Tabelas externas são interessantes quando deseja-se
compartilhar os dados com outras ferramentas.
CREATE EXTERNAL TABLE dividendos ( bolsa STRING, papel STRING, data
DATE, dividendo DECIMAL( 6 , 3 ) )
ROW FORMAT DELIMITED
FIELDS TERMINATED BY 't'
LINES TERMINATED BY 'n'
LOCATION '/user/hive/warehouse/fundamentos.db/dividendos';
• Carregando dados;
• -- O argumento LOCAL indica para o Hive que os dados estão no sistema de
arquivos local e não no HDFS. Durante o processo de leitura, o Hive não faz
nenhuma transformação nos dados. Apenas copia os dados para a localização
final. O argumento OVERWRITE indica para o Hive que os dados já existentes
na tabela devem ser removidos antes da inserção.
LOAD DATA LOCAL INPATH
'/home/cloudera/Desktop/fundamentos-big-data/dados/NYSE_dividends.txt'
OVERWRITE INTO TABLE dividendos;
• Juntando Dados com comando JOIN;
-- Hive aceita apenas ANSI JOINS. O Hive suporta Inner Join, Left Outer, Right
Outer, Full Outer, Left Semi- Join
SELECT * FROM A JOIN B ON A.total > B.custo
• SHOW FUNCTIONS e DESCRIBE FUNCTIONS;
-- Utilize os comandos abaixo para descobrir e entender o funcionamento das funcções presentes no Hive.
SHOW FUNCTIONS;
abs, acos, add_months, and, array, array_contains, ascii, asin, assert_true, atan, avg, base64, between,
bin, case, ceil, ceiling, coalesce, collect_list, collect_set, compute_stats
DESCRIBE FUNCTION upper;
upper(str) - Returns str with all characters changed to uppercase
DESCRIBE FUNCTION EXTENDED upper;
upper(str) - Returns str with all characters changed to uppercase
Synonyms: ucase
• Example:
> SELECT upper('Facebook') FROM src LIMIT 1;
'FACEBOOK'
• Alguns comandos de ordenação;
• ORDER BY;
• SORT BY;
• DISTRIBUTED BY (é equivalente ao GROUP BY no SQL);
• CLUSTER BY (é o equivalente a DISTRIBUTE BY e SORT BY).
• Text File: é o formato padrão no Hive onde cada registro representa uma linha. É
vantajoso quando deseja-se compartilhar os dados com outras ferramentas de edição
manual dos dados. No entanto, é menos eficiente que os formatos binários.
• Sequence File: Hadoop Sequence File consiste de pares chave e valor. Armazena um
registro como um valor binário único. É vantajoso para compartilhar os dados com
outras ferramentas do ecossistema Hadoop.
• RC File (Record Columnar File)
• ORC File (Optimized Row Columnar File) Substituto do formato RC File.
O objetivo dos RC Files é permitir (1) rapidez na carga dos dados, (2) rapidez no
processamento das consultas, (3) eficiência no armazenamento e (4) adaptabilidade aos
padrões dinâmicos de acesso aos dados. O formato RC File armazena os dados
horizontalmente em grupos de colunas. Por exemplo, os 100 primeiros registros são
armazenados em um grupo. Os 100 registros seguintes em outro grupo, etc.
• Avro: é um sistema de serialização de dados. O Avro fornece um
armazenamento de dados baseado em linha, enquanto o esquema é
codificado no arquivo e fornece serialização de dados binários.
• Parquet: armazena dados binários de uma forma orientada por coluna, onde
os valores de cada coluna são organizados de modo que todos estejam
adjacentes, permitindo uma melhor compactação. É bom para consultas que
lêem colunas específicas de uma grande tabela (com muitas colunas), uma
vez que somente as colunas necessárias são lidas e assim o I/O é minimizado.
• O formato do arquivo Parquet incorpora vários recursos que o tornam altamente
adequado para operações de data warehouse;
• Layout de armazenamento em coluna: uma consulta pode examinar e executar
cálculos em todos os valores de uma coluna enquanto lê apenas uma pequena fração
dos dados de um arquivo ou tabela de dados.
• Opções flexíveis de compressão: os dados podem ser compactados com alguns dos
vários codecs e diferentes arquivos de dados podem ser compactados de forma
diferente. A compressão é transparente para aplicativos que lêem os arquivos de dados.
• Snappy: é uma biblioteca de compressão / descompressão. Não visa a compressão
máxima, nem a compatibilidade com qualquer outra biblioteca de compressão; Em vez
disso, visa velocidades muito altas e compactação razoável.
Obrigado pela sua atenção!
Rafael F. V. Sanches
Cientista e Analista de Dados
no
Time de Inovação e Automação (IA)
na área de Estratégia de Dados
e-mail: rafaelsanches123@gmail.com
blog pessoal: https://rafaelsanches123.github.io/

Mais conteúdo relacionado

Mais procurados

Hadoop - Primeiros passos
Hadoop - Primeiros passosHadoop - Primeiros passos
Hadoop - Primeiros passosSensedia
 
PostgreSQL- An Introduction
PostgreSQL- An IntroductionPostgreSQL- An Introduction
PostgreSQL- An IntroductionSmita Prasad
 
Introduction To HBase
Introduction To HBaseIntroduction To HBase
Introduction To HBaseAnil Gupta
 
RDBMS to Graph
RDBMS to GraphRDBMS to Graph
RDBMS to GraphNeo4j
 
Hadoop Architecture | HDFS Architecture | Hadoop Architecture Tutorial | HDFS...
Hadoop Architecture | HDFS Architecture | Hadoop Architecture Tutorial | HDFS...Hadoop Architecture | HDFS Architecture | Hadoop Architecture Tutorial | HDFS...
Hadoop Architecture | HDFS Architecture | Hadoop Architecture Tutorial | HDFS...Simplilearn
 
The Basics of MongoDB
The Basics of MongoDBThe Basics of MongoDB
The Basics of MongoDBvaluebound
 
Hadoop Architecture and HDFS
Hadoop Architecture and HDFSHadoop Architecture and HDFS
Hadoop Architecture and HDFSEdureka!
 
Introduction to Map-Reduce
Introduction to Map-ReduceIntroduction to Map-Reduce
Introduction to Map-ReduceBrendan Tierney
 
Introduction to HiveQL
Introduction to HiveQLIntroduction to HiveQL
Introduction to HiveQLkristinferrier
 
A la découverte du Web sémantique
A la découverte du Web sémantiqueA la découverte du Web sémantique
A la découverte du Web sémantiqueGautier Poupeau
 
Data warehouse architecture
Data warehouse architecture Data warehouse architecture
Data warehouse architecture janani thirupathi
 
Hadoop Distributed File System
Hadoop Distributed File SystemHadoop Distributed File System
Hadoop Distributed File Systemelliando dias
 

Mais procurados (20)

Hadoop - Primeiros passos
Hadoop - Primeiros passosHadoop - Primeiros passos
Hadoop - Primeiros passos
 
PostgreSQL- An Introduction
PostgreSQL- An IntroductionPostgreSQL- An Introduction
PostgreSQL- An Introduction
 
Intro to HBase
Intro to HBaseIntro to HBase
Intro to HBase
 
Data warehouse
Data warehouseData warehouse
Data warehouse
 
Introduction To HBase
Introduction To HBaseIntroduction To HBase
Introduction To HBase
 
RDBMS to Graph
RDBMS to GraphRDBMS to Graph
RDBMS to Graph
 
Apache hadoop hbase
Apache hadoop hbaseApache hadoop hbase
Apache hadoop hbase
 
Hadoop Architecture | HDFS Architecture | Hadoop Architecture Tutorial | HDFS...
Hadoop Architecture | HDFS Architecture | Hadoop Architecture Tutorial | HDFS...Hadoop Architecture | HDFS Architecture | Hadoop Architecture Tutorial | HDFS...
Hadoop Architecture | HDFS Architecture | Hadoop Architecture Tutorial | HDFS...
 
The Basics of MongoDB
The Basics of MongoDBThe Basics of MongoDB
The Basics of MongoDB
 
Data Vault and DW2.0
Data Vault and DW2.0Data Vault and DW2.0
Data Vault and DW2.0
 
Graph databases
Graph databasesGraph databases
Graph databases
 
Hadoop Architecture and HDFS
Hadoop Architecture and HDFSHadoop Architecture and HDFS
Hadoop Architecture and HDFS
 
NOSQL vs SQL
NOSQL vs SQLNOSQL vs SQL
NOSQL vs SQL
 
Introduction to Map-Reduce
Introduction to Map-ReduceIntroduction to Map-Reduce
Introduction to Map-Reduce
 
Introduction to HiveQL
Introduction to HiveQLIntroduction to HiveQL
Introduction to HiveQL
 
A la découverte du Web sémantique
A la découverte du Web sémantiqueA la découverte du Web sémantique
A la découverte du Web sémantique
 
Introduction to Hadoop
Introduction to HadoopIntroduction to Hadoop
Introduction to Hadoop
 
HBase in Practice
HBase in Practice HBase in Practice
HBase in Practice
 
Data warehouse architecture
Data warehouse architecture Data warehouse architecture
Data warehouse architecture
 
Hadoop Distributed File System
Hadoop Distributed File SystemHadoop Distributed File System
Hadoop Distributed File System
 

Semelhante a Introdução ao Hive

Semelhante a Introdução ao Hive (20)

BrunoSQLSat 469
BrunoSQLSat 469BrunoSQLSat 469
BrunoSQLSat 469
 
Hive vs impala vs spark - tuning
Hive vs impala vs spark - tuningHive vs impala vs spark - tuning
Hive vs impala vs spark - tuning
 
Apresentação cassandra
Apresentação cassandraApresentação cassandra
Apresentação cassandra
 
Aula 12 Relatório - Tabelas
Aula 12   Relatório - TabelasAula 12   Relatório - Tabelas
Aula 12 Relatório - Tabelas
 
Crud
CrudCrud
Crud
 
Path to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
Path to the future #5 - Melhores práticas de data warehouse no Amazon RedshiftPath to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
Path to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
 
No sql std
No sql stdNo sql std
No sql std
 
UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6
UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6
UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6
 
Bancos de Dados Relacionais e NoSQL na Nuvem da AWS
Bancos de Dados Relacionais e NoSQL na Nuvem da AWSBancos de Dados Relacionais e NoSQL na Nuvem da AWS
Bancos de Dados Relacionais e NoSQL na Nuvem da AWS
 
Sql
SqlSql
Sql
 
3260 php truquesmagicos %281%29
3260 php truquesmagicos %281%293260 php truquesmagicos %281%29
3260 php truquesmagicos %281%29
 
3260 php truquesmagicos
3260 php truquesmagicos3260 php truquesmagicos
3260 php truquesmagicos
 
Aula 01 PHP+MySQL - LabMM4
Aula 01 PHP+MySQL - LabMM4Aula 01 PHP+MySQL - LabMM4
Aula 01 PHP+MySQL - LabMM4
 
Aula 10 banco de dados
Aula 10   banco de dadosAula 10   banco de dados
Aula 10 banco de dados
 
Hbase
HbaseHbase
Hbase
 
LabMM4 (T16 - 12/13) - PHP + MySQL
LabMM4 (T16 - 12/13) - PHP + MySQLLabMM4 (T16 - 12/13) - PHP + MySQL
LabMM4 (T16 - 12/13) - PHP + MySQL
 
Mongodb workshop cinlug
Mongodb workshop cinlugMongodb workshop cinlug
Mongodb workshop cinlug
 
Otimizando a performance com in memory no sql 2016
Otimizando a performance com in memory no sql 2016Otimizando a performance com in memory no sql 2016
Otimizando a performance com in memory no sql 2016
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDB
 
Modulo 15 PSI
Modulo 15 PSIModulo 15 PSI
Modulo 15 PSI
 

Introdução ao Hive

  • 1.
  • 2. • Origem do Hive, o que é e quando usar? • Hive x Bancos de dados relacionais • Organização dos Dados • Tipos de Dados • Operadores relacionais • Funções pré-existentes • Hive Query Language • Formatos de armazenamento de dados
  • 3. • Desenvolvido inicialmente pelo Facebook em 2007; • Objetivo: Ajudar a empresa a gerir melhor as massas de dados geradas naquele momento; • Em 2007 Facebook já tinha 15TB de dados; • Pouco tempo depois o volume aumentou para 700TB.
  • 4. • Data Warehouse do Facebook demorava demais para processar consultas diárias; • Mudança do Data Warehouse para o Hadoop; • Dificuldade de se criar jobs MapReduce e alto consumo de tempo dos seu funcionários; • Criação do Hive - ferramenta com conceitos similares dos bancos de dados tradicionais.
  • 5. • É um Data Warehouse escalável, tolerante a falhas que construído no ecossistema Hadoop; • Suporta grandes massas de dados; • Sistema para processamento em batch; • Possui uma linguagem de consulta similar ao Struture Query Language (SQL) conhecida como Hive Query Language (HiveQL).
  • 6. • Quando já se tem conhecimento de SQL; • Compatível com outras ferramentas do ecossistema Hadoop - (outras ferramentas do Hadoop permitem usar o Hive como forma de armazemanto); • Dados estruturados; • Processamento em batch (Processamento de grandes massas de dados).
  • 7. Hive Bancos relacionais Similar ao SQL SQL Análise OLTP Sistemas Transacionais (e.g., ERP's) e Análise (e.g., Data Warehouses) Processamento em batch Processamento em batch e tempo real Projetado para o processamento distribuído Não projetado para processamento distribuído Alta performance em computadores de baixo custo (Hadoop) Alta performance em computadores proprietários e de alto custo Baixo custo de armazenamento Armazenamento caro e limitado comparado ao HDFS (Sistema de armazenamento do Hadoop)
  • 8. • Banco de dados: É um namespace que separa tabelas e outras unidades; • Tabela: Unidades homogêneas que possuem um esquema; • Partição: Uma coluna “virtual” que define o armazenamento dos dados no HDFS. Cada tabela pode ter uma ou mais partições; • Bucket: Em cada partição, os dados podem ser dividos em buckets baseado no hash do valor de uma coluna. • Essas divisões tanto das partições quanto em buckets permitem que o sistema restrinja o acesso a uma grande quatidade de dados durante o processamento de uma consulta resultando em melhor performance.
  • 9. Entidade Exemplo Localização banco de dados testedb /user/hive/warehouse/testedb.db tabela T /user/hive/warehouse/testedb.db/T partição date='09092019' /user/hive/warehouse/testedb.db/T/date=09092019 /user/hive/warehouse/testedb.db/T/date=09092019/000000_0 bucket Coluna userid ... /user/hive/warehouse/testedb.db/T/date=09092019/000032_0 /user/hive/warehouse/ Diretório Default do Hive Cria Pasta dentro do diretório do Hive
  • 10. Tipo de dado homogêneo T i p o d e d a d o h e t e r o g ê n e o tinyint 1 byte timestamp ARRAY ARRAY<TipoDoDado> smallint 2 bytes date - YYYY- MM-DD MAP MAP<NomeDaChave, Valor> int 4 bytes string STRUCT STRUCT<NomeDoCampo : TipoDoDado, ...> bigint 8 bytes varchar UNION UNIONTYPE<TipoDoDado, TipoDoDado, ...> float 4 bytes char float 8 bytes boolean decimal - precisão 38 dígitos binary
  • 11. Operador Descrição A = B | A == B Retorna true se a expressão A for igual a expressão B e false caso contrário. A <=> B Retorna o mesmo resultado do operador = para A e B não nulos. Retorna true se ambos forem NULL e false se apenas um deles forem NULL. A <> B | A != B Retorna NULL se A ou B forem nulos. Retorna true se a expressão A não for igual a expressão B e false caso sejam iguais A < B Retorna NULL se A ou B forem nulos A <= B A > B A >= B
  • 12. Operador Descrição A [NOT] BETWEEN B AND C Retorna true se A for maior ou igual a B e A for menor ou igual a C Isso pode ser invertido através da palavra NOT. A IS NULL Retorna true se a expressão A for nula A IS NOT NULL Retorna NULL se A ou B forem nulos. Retorna true se a expressão A não for igual a expressão B e false caso sejam iguais A [NOT] LIKE B Exemplo: ‘foobar’ LIKE ‘foo’ = false ‘foobar’ LIKE ‘foo___’ = true ‘foobar’ LIKE ‘foo%’ = true A RLIKE B Exemplo: ‘foobar’ RLIKE ‘foo’ ⇒ true A REGEXP B O mesmo que RLIKE
  • 13. Função Retorno Descrição round(double A) bigint Valor arredondado floor(double A) bigint maior inteiro tal que seja menor ou igual ao parâmetro celi(double A) bigint menor inteiro tal que seja maior ou igual ao parâmetro substr(string A, int start) string Substring de A com início no caractér da posição start até o final da string A upper(string A) string Conversão de todos os caractéres de A para letras maíusculas length(string S) int Tamanho da string year(string timestamp) int Apenas o ano da string timestamp get_json_object(string jsonString, string path) string Extrai de uma string JSON um objeto JSON baseado no caminho especificado. Exemplo: get_json_object(src_json.json, '$.store.fruit[0]')
  • 14. Função Retorno Descrição count (*) bigint Conta o número total de linhas retornadas, incluindo linhas que possuem valores NULL. sum(coluna) double Retorna a soma dos valores na coluna especificada. avg(coluna) double Retorna a média dos elementos na coluna especificada. min(coluna) max(coluna) double Retorna o menor ou maior valor encontrado na coluna especificada. explode(array) N linhas Retorna zero ou mais linhas onde cada elemento do ARRAY se tornará uma linha distinta. explode(map) N linhas Retorna zero ou mais linhas onde cada chave e valor do MAP se tornará uma linha distinta com duas novas colunas, uma para a chave e outra para o valor.
  • 15. • Executando Hive no modo local; $ beeline -u <url> -n <nome do usuário> -d <driver> -p <senha> • -- Beeline em modo local $ beeline -u jdbc:hive2://quickstart:10000/ -n admin -d org.apache.hive.jdbc.HiveDriver
  • 16. • Criando uma base de dados/name espace; -- Criar um banco de dados chamado nomeDoBanco CREATE DATABASE nomeDoBanco; • Para usar um banco: USE nomeDoBanco; • -- Criar um banco de dados chamado nomeDoBanco, adicionando um comentário descritivo do banco e algumas outras propriedades CREATE DATABASE nomeDoBanco; COMMENT 'Banco de dados teste' WITH DBPROPERTIES ('criadoPor' = 'Rafael Sanches', 'Data' = '01/10/2019');
  • 17. • Show e Describe; -- Lista todos os bancos de dados no Hive • SHOW DATABASE; -- Apresenta algumas informações básicas sobre o banco de dados solicitado • DESCRIBE DATABASE nomeDoBanco; (e.g., default)
  • 18. Criando uma tabela; CREATE TABLE serasa ( id INT, name STRING ) PARTITIONED BY (date STRING) -- Particiona os dados em função da coluna date ROW FORMAT DELIMITED -- A linha é delimitada por uma nova linha FIELDS TERMINATED BY '|' -- Os campos são delimitados pelo pipe LINES TERMINATED BY 'n' -- As linhas são delimitados pelo n STORED AS TEXTFILE; -- Armazena os dados como um arquivo texto
  • 19. • Inserindo dados na tabela; INSERT INTO TABLE serasa PARTITION (date='01102019') VALUES (1, 'Rafael Sanches' ), (2, 'Joelson Santos' ), (3, 'Mauricio Sobrinho' ); / user / hive / warehouse / nomeDoBanco / serasa / date=01102019 / 000000_0 1|Rafael Sanches 2|Joelson Santos 3|Mauricio Sobrinho Conteúdo do arquivo
  • 20. -- Criação de uma nova tabela a partir de uma consulta a outra tabela. CREATE TABLE new_key_value_store AS SELECT new_key, concat(key, value) key_value_pair FROM key_value_store SORT BY new_key, key_value_pair;
  • 21. • Criando index e removendo index; -- Index aumenta a velocidade de busca de certas colunas da tabela. A velocidade aumenta com o custo de processamento e de mais espaço em disco. Os dados indexados são armazenados em uma outra tabela. CREATE INDEX in 1 ON TABLE serasa(id) AS 'Compact' WITH DEFERRED REBUILD; -- Lista todos os index ta tabela SHOW INDEX ON serasa; -- Deletar index DROP INDEX in 1 ON serasa;
  • 22. -- Por se tratar de uma tabela externa (EXTERNAL TABLE), a deleção da tabela externa (DROP TABLE) apaga apenas os metadados mas não exclui os dados do sistema de arquivos. Tabelas externas são interessantes quando deseja-se compartilhar os dados com outras ferramentas. CREATE EXTERNAL TABLE dividendos ( bolsa STRING, papel STRING, data DATE, dividendo DECIMAL( 6 , 3 ) ) ROW FORMAT DELIMITED FIELDS TERMINATED BY 't' LINES TERMINATED BY 'n' LOCATION '/user/hive/warehouse/fundamentos.db/dividendos';
  • 23. • Carregando dados; • -- O argumento LOCAL indica para o Hive que os dados estão no sistema de arquivos local e não no HDFS. Durante o processo de leitura, o Hive não faz nenhuma transformação nos dados. Apenas copia os dados para a localização final. O argumento OVERWRITE indica para o Hive que os dados já existentes na tabela devem ser removidos antes da inserção. LOAD DATA LOCAL INPATH '/home/cloudera/Desktop/fundamentos-big-data/dados/NYSE_dividends.txt' OVERWRITE INTO TABLE dividendos;
  • 24. • Juntando Dados com comando JOIN; -- Hive aceita apenas ANSI JOINS. O Hive suporta Inner Join, Left Outer, Right Outer, Full Outer, Left Semi- Join SELECT * FROM A JOIN B ON A.total > B.custo
  • 25. • SHOW FUNCTIONS e DESCRIBE FUNCTIONS; -- Utilize os comandos abaixo para descobrir e entender o funcionamento das funcções presentes no Hive. SHOW FUNCTIONS; abs, acos, add_months, and, array, array_contains, ascii, asin, assert_true, atan, avg, base64, between, bin, case, ceil, ceiling, coalesce, collect_list, collect_set, compute_stats DESCRIBE FUNCTION upper; upper(str) - Returns str with all characters changed to uppercase DESCRIBE FUNCTION EXTENDED upper; upper(str) - Returns str with all characters changed to uppercase Synonyms: ucase • Example: > SELECT upper('Facebook') FROM src LIMIT 1; 'FACEBOOK'
  • 26. • Alguns comandos de ordenação; • ORDER BY; • SORT BY; • DISTRIBUTED BY (é equivalente ao GROUP BY no SQL); • CLUSTER BY (é o equivalente a DISTRIBUTE BY e SORT BY).
  • 27. • Text File: é o formato padrão no Hive onde cada registro representa uma linha. É vantajoso quando deseja-se compartilhar os dados com outras ferramentas de edição manual dos dados. No entanto, é menos eficiente que os formatos binários. • Sequence File: Hadoop Sequence File consiste de pares chave e valor. Armazena um registro como um valor binário único. É vantajoso para compartilhar os dados com outras ferramentas do ecossistema Hadoop. • RC File (Record Columnar File) • ORC File (Optimized Row Columnar File) Substituto do formato RC File. O objetivo dos RC Files é permitir (1) rapidez na carga dos dados, (2) rapidez no processamento das consultas, (3) eficiência no armazenamento e (4) adaptabilidade aos padrões dinâmicos de acesso aos dados. O formato RC File armazena os dados horizontalmente em grupos de colunas. Por exemplo, os 100 primeiros registros são armazenados em um grupo. Os 100 registros seguintes em outro grupo, etc.
  • 28. • Avro: é um sistema de serialização de dados. O Avro fornece um armazenamento de dados baseado em linha, enquanto o esquema é codificado no arquivo e fornece serialização de dados binários. • Parquet: armazena dados binários de uma forma orientada por coluna, onde os valores de cada coluna são organizados de modo que todos estejam adjacentes, permitindo uma melhor compactação. É bom para consultas que lêem colunas específicas de uma grande tabela (com muitas colunas), uma vez que somente as colunas necessárias são lidas e assim o I/O é minimizado.
  • 29. • O formato do arquivo Parquet incorpora vários recursos que o tornam altamente adequado para operações de data warehouse; • Layout de armazenamento em coluna: uma consulta pode examinar e executar cálculos em todos os valores de uma coluna enquanto lê apenas uma pequena fração dos dados de um arquivo ou tabela de dados. • Opções flexíveis de compressão: os dados podem ser compactados com alguns dos vários codecs e diferentes arquivos de dados podem ser compactados de forma diferente. A compressão é transparente para aplicativos que lêem os arquivos de dados. • Snappy: é uma biblioteca de compressão / descompressão. Não visa a compressão máxima, nem a compatibilidade com qualquer outra biblioteca de compressão; Em vez disso, visa velocidades muito altas e compactação razoável.
  • 30. Obrigado pela sua atenção! Rafael F. V. Sanches Cientista e Analista de Dados no Time de Inovação e Automação (IA) na área de Estratégia de Dados e-mail: rafaelsanches123@gmail.com blog pessoal: https://rafaelsanches123.github.io/