brunosqlsat 469

34
HiveQL x TSQL Uma introdução ao Hive no HDInsight Bruno Feldman da Costa [email protected] @feldmanB | facebook.com/bfcosta

Upload: bruno-feldman-da-costa

Post on 18-Jan-2017

89 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: BrunoSQLSat 469

HiveQL x TSQL

Uma introdução ao Hive no HDInsight

Bruno Feldman da [email protected]@feldmanB | facebook.com/bfcosta

Page 2: BrunoSQLSat 469

Patrocinadores

2 |

Page 3: BrunoSQLSat 469

Bruno Feldman da Costa Tech Leader DB/BI at White Cube MCT | MCSE Data Platform | OCP MySQL Twitter: @feldmanB E-mail: [email protected] Facebook: https://facebook.com/bfcosta Blog: http://brunofeldman.wordpress.com

About Me!

3 |

Page 4: BrunoSQLSat 469

Intro: Hadoop, HDInsight, Map Reduce, etc... Hive: Conceitos Diferenças entre HiveQL e TSQL HiveQL:

Comandos básicos Índices, Particionamento, Skews, Views

Agenda

4 |

Page 5: BrunoSQLSat 469

Hadoop

5 |

Plataforma que fornece: Um sistema de arquivos

distribuído (HDFS) que armazena os dados entre vários servidores.

Um meio para armazenar/consultar (MapReduce/ YARN) esses dados distribuídos.

HDFS

Name Node Data Nodes

Hadoop Cluster

Page 6: BrunoSQLSat 469

Blocos de dados redundantes, distribuídos entre os nós do cluster.

Falhas nos nós são esperadas!

HDFS – Hadoop Distributed File System

6 |

Page 7: BrunoSQLSat 469

Hadoop Ecosystem

Distribuições Hadoop Cloudera CDH Hortonworks Data Platform (HDP) MapR

Microsoft Azure HDInsight

Page 8: BrunoSQLSat 469

Microsoft Azure HDInsight

Implementação do HDP no ambiente do Azure VM’s com Windows Server (ou Linux) com HDP WebHDFS (Azure Blob Storage) Suporte a Powershell e SSIS Escalabilidade Rápida implementação

Page 9: BrunoSQLSat 469

DEMO

Criando um cluster HDInsight

Page 10: BrunoSQLSat 469

MapReduce

Dado dividido entre os data nodes

Cada nó faz o “MAP” gerando o par “KEY/Value”

O REDUCE faz a agregação.

Page 11: BrunoSQLSat 469

MapReduce

MAP

REDUCE

Page 12: BrunoSQLSat 469

Pode ser feito com Java, C#, Python, Ruby, etc...

MapReduce

12 |

MAP

REDUCE

Page 13: BrunoSQLSat 469

HIVE

Muito legal esse Map Reduce! Mas…

Não sei programar em Java Não sei programar em Python Não sei programar em C# Não sei programar!!!!

Page 14: BrunoSQLSat 469

HIVE

Sou DBA, só entendo de TSQL, quero criar meus jobs apenas utilizando queries, como já faço no SQL Server.

O HIVE faz isso!!!

Page 15: BrunoSQLSat 469

HIVE

Sou DBA, só entendo de TSQL, quero criar meus jobs apenas utilizando queries, como já faço no SQL Server.

O HIVE faz isso!!! A query em HiveQL é “traduzida” para um

JOB MapReduce

Page 16: BrunoSQLSat 469

“The Apache Hive data warehouse software facilitates querying and managing large datasets residing in distributed storage.

Hive provides a mechanism to project structure onto this data and query the data using a SQL-like language called HiveQL.”

HIVE

16 |

Page 17: BrunoSQLSat 469

Databases: Nada mais que um caminho onde as tabelas

serão criadas, caso não seja criado um database as tabelas serão criadas no path default /hive/warehouse dentro da estrutura do HDFS.

Tabelas: Basicamente um diretório onde armazenaremos

um ou mais arquivos, além de um catálogo da estrutura desses arquivos.

Estrutura Hive

17 |

Page 18: BrunoSQLSat 469

Tabelas: Internal Tables x External Tables

Internal Tables são criadas no HDFS e irá ser mantida enquanto a tabela existir, caso seja feito um “DROP TABLE” o diretório (e os dados), serão removidos.

External Tables também são criadas no HDFS, porém os arquivos são mantidos, mesmo que a tabela seja removida.

Estrutura Hive

18 |

Page 19: BrunoSQLSat 469

Creating Tables

19 |

CREATE TABLE table1(col1 STRING, col2 INT)ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ';

CREATE TABLE table2(col1 STRING, col2 INT)ROW FORMAT DELIMITED FIELDS TERMINATED BY ' 'STORED AS TEXTFILE LOCATION '/data/table2';

CREATE EXTERNAL TABLE table3(col1 STRING, col2 INT)ROW FORMAT DELIMITED FIELDS TERMINATED BY ' 'STORED AS TEXTFILE LOCATION '/data/table3';

Internal table (folders deleted when table is dropped)

Default location (/hive/warehouse/table1)

Stored in a custom location (but still internal, so the folder is deleted when table is dropped)

External table (folders and files are left intact in Azure Blob Store when the table is dropped)

Page 20: BrunoSQLSat 469

Hive data types include: Numeric

Integers: TINYINT, SMALLINT, INT, BIGINT Fractional: FLOAT, DOUBLE, DECIMAL

Character STRING, VARCHAR, CHAR

Date/Time TIMESTAMP DATE

Special BOOLEAN, BINARY, ARRAY, MAP, STRUCT,UNIONTYPE

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types

Hive Data Types

20 |

Page 21: BrunoSQLSat 469

Loading Hive Tables

Save data files in table folders Use the LOAD statement

Use the INSERT statement Use a CREATE TABLE AS SELECT (CTAS) statement

CREATE TABLE SummaryTableROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'STORED AS TEXTFILE LOCATION '/data/summarytable'ASSELECT Col1, SUM(Col2) As TotalFROM MyTableGROUP BY Col1;

LOAD DATA LOCAL INPATH '/data/source' INTO TABLE MyTable;

Page 22: BrunoSQLSat 469

DEMOHive Tables (Create, Load, Select, etc...)

Page 23: BrunoSQLSat 469

Query Execution Engine que minimiza as operações de MAP (grandes responsáveis pelo I/O) não habilitada por default no HDInsight 3.2

Tez

23 |

Page 24: BrunoSQLSat 469

Hadoop

Não podemos esquecer que estamos tratando com arquivos muito grandes!

Como otimizar o armazenamento para melhorar nossas consultas?

Page 25: BrunoSQLSat 469

Partitions and Buckets

25 |

Page 26: BrunoSQLSat 469

Hive PartitionsCREATE TABLE part_table(col1 INT, col2 STRING)PARTITIONED BY (col3 STRING);

INSERT INTO TABLE part_table PARTITION(col3='A')SELECT col1, col2FROM stg_tableWHERE col3 = 'A';

SET hive.exec.dynamic.partition = true;SET hive.exec.dynamic.partition.mode=nonstrict;

INSERT INTO TABLE part_table PARTITION(col3)SELECT col1, col2FROM stg_table;

Page 27: BrunoSQLSat 469

Hive Buckets

CREATE TABLE clust_table(col1 INT, col2 STRING, col3 STRING)CLUSTERED BY (col3) INTO 3 BUCKETS;

INSERT INTO TABLE clust_tableSELECT col1, col2, col3FROM stg_table;

Page 28: BrunoSQLSat 469

Hive Skews

CREATE TABLE skewed_table(col1 INT, col2 STRING, col3 STRING)SKEWED BY (col3) ON ('A') STORED AS DIRECTORIES;

INSERT INTO TABLE skewed_tableSELECT col1, col2, col3FROM stg_table;

Page 29: BrunoSQLSat 469

DEMOManipulando Hive Tables

Page 30: BrunoSQLSat 469

HiveQL x T SQL

HiveQL é similar ao SQL com algumas diferenças: Não suporta transações Não possui Insert/Update/Delete… ainda…

Baseado nos comandos do MySQL… que é similar ao T-SQL

Comentários com duplo hífen (--) Statements necessitam terminar por “ponto e virgula” ;

Page 31: BrunoSQLSat 469

HiveQL x T SQL

HiveQL possui suporte a JOINS INNER JOIN LEFT, RIGHT, FULL OUTER JOINS CROSS JOINS

Page 32: BrunoSQLSat 469

Single Pass Multiple Results

Preciso carregar os dados de uma tabela em duas novas:INSERT OVERWRITE TABLE salesSELECT * FROM history WHERE action = ‘purchased’;

INSERT OVERWRITE TABLE creditsSELECT * FROM history WHERE action = ‘returned’;

2 SCANS!!

E se...FROM historyINSERT OVERWRITE sales SELECT * WHERE action = ‘purchased’INSERT OVERWRITE credits SELECT * WHERE action = ‘returned’;

Page 33: BrunoSQLSat 469

Dúvidas?

33 |

Page 34: BrunoSQLSat 469

Obrigado!!

34

Contatos: Twitter: @feldmanB E-mail: [email protected] Facebook: https://facebook.com/bfcosta Blog: http://brunofeldman.wordpress.com