Presto – Distributed Query Engine for Big Data Environment | Connectors

Pessoal, no post anterior da série sobre Starburst Presto foi você aprendeu sobre como realizar a instalação do Starburst Presto dentro de um cluster de HDInsight em ambiente Azure Cloud.

Neste post você aprenderá sobre como configurar novas conexões para que seja possível realizar integrações de dados de forma fácil e simples sem a necessidade de realizar ETLs e/ou ELTs.


A principal capacidade do Presto é a possibilidade de realizar integrações entre uma infinidade de origens diferentes possibilitando assim a integração das informações através de queries em padrão ANSI.

Dessa forma, para que seja possível o real entendimento dessa poderosa feature imagine o seguinte cenário:

  1. A sua empresa possui o banco de dados transacional em SQL Server (ou Azure SQL Database).
  2. Uma outra área da empresa usa tecnologias de Big Data e possui um cluster de Hortonworks rodando algumas soluções de ELT onde alguns dados importantes para o negócio encontram-se armazenados em formato .ORC dentro do HDFS e sua estrutura de schema dentro do HCatalog do Hive (tabelas do hive).
  3. Uma outra área da empresa possui uma solução rodando dentro do Mongodb (ou Azure CosmosDB – Mongodb API) onde os dados estão armazenados em documentos com estrutura JSON.

Foi solicitado a você que emergencialmente produza um relatório que não somente utilize os dados das três origens, mas que também os cruze permitindo insights para uma tomada de decisão importante.

Normalmente seria necessário realizar a importação e tratamento dessas informações para que fosse possível trabalhar com esses dados. seria necessário desenvolver uma solução que convertesse os dados de .ORC e JSON para o formato tabelas para que somente após isso você pudesse cruzar essas informações.

E é exatamente neste exemplo citado acima que se encontra o poder do Starburst Presto. Você somente precisaria realizar o deploy de novos arquivos de propriedades com as informações de conexão das três origens e pronto. Para o Presto, tanto a tabela do Hive (arquivo em ORC format dentro do HDFS), a tabela do SQL server (ou Azure SQL Database) quanto os documentos em JSON do Mongodb agora estarão legíveis em formato SQL ANSI.

Existe uma grande gama de conexões que podem ser configuradas. Todas elas se encontram na documentação oficial.

Somente a nível de teste, faremos exatamente a configuração do exemplo citado acima tanto em ambiente On-Premises quanto em ambiente de Azure Cloud.


Iniciaremos pela solução no Azure. Use os scripts disponibilizados no github para realizar toda a configuração do ambiente via Powershell. Entenda os scripts abaixo:

  1. 01-create-azure-sql-database.ps1 – Esse script é responsável pela criação da base de dados do AdventureWorks dentro do Azure SQL Database. É necessário realizar a alteração do nome da Subscription.
  2. 02-create-cosmosdb-environment.ps1 – Esse script é responsável pela criação do ambiente de CosmosDB com a API de MongoDB. É necessário realizar a alteração do nome da Subscription e do diretório onde os arquivos foram/serão salvos.
  3. 03-create-connections-properties-files.ps1 – Esse script é responsável pela criação dos arquivos .properties de configuração das connections para o Starburst Presto. É necessário realizar a alteração do nome da Subscription e do diretório onde os arquivos foram/serão salvos.
  4. 04-upload-files-to-blob-storage.ps1 – Esse script é responsável por realizar o opload dos arquivos criados no script anterior para dentro de um diretório no Blob Storage. É necessário realizar a alteração do nome da Subscription e do diretório onde os arquivos foram/serão salvos.
  5. 05-create-azure-hdinsight-cluster.ps1 – Esse script irá realizar a criação do Cluster de HDInsight já com o custom application do Starburst Presto. É necessário realizar a alteração do nome da Subscription e do diretório onde os arquivos foram/serão salvos.
  6. 06-add-new-connectors-to-presto.ps1 – Esse script é responsável por realizar o apload dos novas connections (ou Catalogs, como é conhecido dentro do Presto) apontando para o Azure SQL Database e Azure CosmosDB. É necessário realizar a alteração do nome da Subscription.
  7. create-hive-table.sh – Use esse script para realizar a criação de uma tabela dentro do Hive. Ela será usada na demonstração.
  8. insert_data_into_cosmosdb.sh – Use esse script para inserir dados dentro da Collection do MongoDB dentro do Azure CosmosDB.
  9. presto-query-test-solution.sql – Query que será usada somente para teste da solução.
  10. delete-environment.ps1 – Após o teste, rode o script para remover toda a solução. Caso não o faça poderá ter problemas com o billing. É necessário realizar a alteração do nome da Subscription.

Para realizar a criação do ambiente basta executar os scripts de 1 a 6 em ordem lembrando de alterar a variável do nome da subscription e diretório onde os arquivos do github foram salvos.

Feito isso, você deverá abrir o seu terminal e executar os comandos dentro arquivo create-hive-table.sh.

Para realizar a inserção dos dados dentro do MongoDB será necessário realizar o download do Mongodb Shell.

Feito o download, vá para o painel do azure e selecione o CosmosDb. Em Settings, selecione Connection String. Na pagina que irá abrir selecione em Get Started faster with driver specific connection information with our quick start.

Feito isso, na nova página que abrirá, selecione a opção MongoDB Shell e copie o código disponibilizado.

o link tem o formato abaixo:

mongo.exe dataslightcdb.documents.azure.com:10255 -u dataslightcdb -p fKl7H2sN3rXcxAvg5eefP5P5Or75woTcYCArSEgU2nXfoSZ2tIlMJf5i88ZdXYfdxUqnKrzDfNoq3DUZstmuow== --ssl --sslAllowInvalidCertificates

Navegue até o diretório onde foi salvo o download do Mongodb Shell e, caso você esteja usando o Windows, use o código acima com porém adicionando ao final do host o seguinte: “/adventureworks“. Se for linux ou windows, retire do código o “.exe“. Dessa forma, para windows, o código ficará assim:

mongo.exe dataslightcdb.documents.azure.com:10255/adventureworks -u dataslightcdb -p fKl7H2sN3rXcxAvg5eefP5P5Or75woTcYCArSEgU2nXfoSZ2tIlMJf5i88ZdXYfdxUqnKrzDfNoq3DUZstmuow== --ssl --sslAllowInvalidCertificates

esse código, ao executado, irá logar dentro da API de Mongodb do Azure CosmosDb. Agora, copie todo o conteúdo do arquivo insert_data_into_cosmosdb.sh e cole dentro do cmd ou terminal.


Depois de executados todos os passos existirá no ambiente dados do Adventure Works em formato tabelar no Azure SQL Database, em formato de arquivo dentro do HDFS/Hive e em formato de documento JSON dentro do CosmosDb (Mongodb API).

Agora, conecte no Superset (já falamos dele no post anterior). Selecione em Sources a opção Databases. Selecione o botão de editar em quaisquer das connections já existentes e copie a connection string em SQLAlchemy URI.

Após copiado, selecione o botão de [+] no canto superior direito da tela da página de Databases. Selecione um nome para o catalogo do Azure SQL Database e cole em connection string a informação que você recuperou da outra conexão no passo anterior. Marque também a opção Expose in SQL Lab para que seja possível visualizar essa connection na aba de SQL do Superset.

Faça o mesmo para o catalogo do CosmosDb – MongoDb API.

Agora, para finalizarmos, selecione a aba de SQL Lab e use a query do script presto-query-test-solution.sql. Sim, você está realizando JOINs em SQL ANSI em três origens distintas de formatos diferentes!


Agora, para finalizarmos, faremos a mesma configuração que fizemos para o Starburst Presto no HDInsight dentro do Azure em ambiente On-premises. Para isso, usaremos o presto-admin (já falamos dele no post Presto – Distributed Query Engine for Big Data Environment | On-Premise Installation). Usaremos o mesmo ambiente que fora criado lá.

Navegue até o diretório /root/.prestoadmin/catalog e crie o arquivo chamado mongodb_advworks.properties com o seguinte conteúdo:

connector.name=mongodb
mongodb.seeds=dataslightcdb.documents.azure.com:10255
mongodb.credentials=dataslightcdb:<CHAVE DE ACESSO AO MONGO>@product
mongodb.ssl.enabled=true

Após isso, crie no mesmo diretório o arquivo sqldatabase_advworks.properties com o seguinte conteúdo:

connector.name=sqlserver
connection-url=jdbc:sqlserver://<HOST>.database.windows.net:1433;database=<DATABASE>;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;
connection-user=<USER>
connection-password=<PASSWORD>

Feito isso, execute os comandos abaixo:

root/prestoadmin/presto-admin catalog add sqldatabase_advworks
root/prestoadmin/presto-admin catalog add mongodb_advworks

Agora restart o serviço do Presto usando o comando abaixo:

root/prestoadmin/presto-admin server restart

Execute o camando abaixo e você perceberá que agora também teremos como origem a base de dados do Azure SQL Database e do CosmosDB – Mongodb API também em ambiente On-Premises.

root/prestoadmin/presto-admin server status


No próximo post da série você ê aprenderá mais sobre o Cost Based Optimizer (CBO). Espero ter conseguido ajudar!

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s