O que é o Apache Phoenix e para que serve?

O Apache Phoenix é desenvolvido em java para rodar uma camada SQL para ser interpretada em banco de dados NoSQL.

Ele permite que os usuários criem, excluam, alterem tabelas, visualizações, índices, sequências, Insira e exclua as linhas individualmente e em massa e dados de consulta através de uma camada SQL sobre o HBase.

Apache Phoenix É performático?

O site do projeto apache Phoenix disponibilizou alguns gráficos que compara o Phoenix com HIVE(no HDFS e no HBase), Impala e até mesmo com o próprio phoenix na sua versão anterior testando duração de execução utilizando uma função count em tabelas de 10 até 100 milhões de registros. E Ficou bem evidente que usando uma camada SQL no HBase com Phoenix em questão foi mais performático que com o hive ou impala.

 

Habilitando Phoenix via Ambari:

  1. Abra o Ambari.
  2. Selecione Aba serviços > Hbase > Configs
  3. Procure pelo Phoenix SQL settings.
  4. Resete o Phoenix Query Timeout.
  5. Clique em Enable Phoenix.

CRUD com Phoenix:

Vamos criar um CRUD(Create, Read, Update e Delete) utilizando um shell de interação com o Phoenix.

Localize aonde está instalado o Phoenix no cluster e vá para sua pasta BIN dentro do mesmo, vamos executar o arquivo sqlline.py

./sqlline.py localhost

Observação: No caso estou passando o localhost como parâmetro porque já estou no local aonde se encontra o HBase Master.

Após executar, estaremos dentro do shell de interação do Phoenix e além dos comandos SQL que podemos já estar utilizando existe outros comandos para uma maior interação sendo um deles o !tables que mostra as tabelas e seu schemas existentes.

Crie uma nova tabela denominada Autor com apenas dois campos ID e Nome.

CREATE TABLE IF NOT EXISTS  autor(
autor_id INTEGER PRIMARY KEY,
autor_nm VARCHAR(100) NOT NULL
 );

Para Inserir e fazer alterações há uma diferença na sintaxe do SQL do Phoenix, no caso existe apenas o comando upsert para estar inserindo e fazendo alterações, caso o ID já esteja efetivo na base ocorrera o update caso não decorrerá o insert.

Vamos adicionar três pessoas: Flora Buddy, Trina Tacey e Myranda Samon.

UPSERT INTO autor (autor_id, autor_nm) VALUES(1 , ‘Flora Buddy’);
UPSERT INTO autor (autor_id, autor_nm) VALUES(2 , ‘Trina Tacey’);
UPSERT INTO autor (autor_id, autor_nm) VALUES(3 , ‘Myranda Sam’);

Verifique se os valores foram persistidos utilizando o select.

SELECT * FROM autor;

No caso da Myranda ouve um erro no seu sobrenome, então vamos corrigi-lo.

UPSERT INTO autor (autor_id, autor_nm) VALUES(3 , ‘Myranda Samon’);

Verifique novamente os valores.

SELECT *  FROM autor;

E por último deletando o ID com o valor igual a 2.

DELETE FROM autor WHERE autor_id = 2;

Visualize os dados no HBase, saia do sqlline do Phoenix digitando !exit

Entre no HBase shell e digite: scan ‘AUTOR’

Veja que estão realmente efetivados os dados da Flora e Myranda e com isso terminamos esse pequeno tour pelo projeto apache Phoenix.

Desafios

Dois desafios que recomendo que pesquise e tente para uma melhor interação entre o Apache Phoenix e o HBase são:

1-Crie famílias de colunas em uma tabela.

2-Crie Colunas dinâmicas usando o upsert.

Até o próximo Tutorial.
Fábio M. S. Forastieri