Hive utiliza uma linguagem chamada HiveQL (Hive Query Language) , que
transforma as sentenças SQL em Jobs MapReduce executados no cluster
Hadoop.
Os comados existentes no SQL tais como create table, select, describe, drop
table, etc existem no Hive, mas tem diferenças tal como a clausula ROW
FORMAT do create table. Para popular tabelas pode ser utilizado o comando
LOAD DATA , que obtém a entrada de dados e carrega no warehouse do Hive.
Podem ser utilizados agregadores como Max, SUM, Count, etc que necessitam
da clausula GROUP BY, tal como no SQL.
Para acessar os dados podem ser utilizadas a própria interface de comandos,
drivers JDBC, drivers ODBC e o Hive Thrift Client (para C++, Python, Ruby,
etc). Possibilita acessar dados que estejam no sistema de arquivos HDFS, em
outros sistemas de arquivos (ex. Amazon S3) ou no HBASE. Abaixo está uma
figura que descreve a arquitetura do Hive.
Para suportar schemas e partitioning o Hive deve manter os seus metadados
em um banco relacional, podendo ser utilizado o Derby ou o MySQL. Ao inserir
dados no Hive, caso haja violação nos tipos de dados do schema, o mesmo
será gravado Null, não havendo interrupção da entrada de dados. O
particionamento de tabelas (partitioning) permite aumentar a performance das
queries executadas. As partições são armazenadas em diretórios diferentes,
buscando otimizar o acesso na leitura do disco. Assim como os bancos
relacionais suporta Joins e Outer Joins.
O Hive não foi desenhado para executar queries em real time, com baixa
latência. Foi desenhado para melhor performance analisando grandes
quantidades de dados que se encontram em clusters. Normalmente são estes
tipos de queries que temos em painéis analíticos de aplicações de Business
Intelligence, que usualmente utilizam operadores do tipo Sum, Count, etc, que
em ambientes usuais de data warehouse podem consumir horas para que
estes tipos de query retornem resultado. Já passei por este tipo de situação na
qual ferramentas de BI ao acessar uma quantidade de dados muito grandes em
bases tradicionais simplesmente tem uma performance tão pobre que o seu
uso pelos clientes finais e dashboards (painéis analíticos) é inviabilizado.