Blog

Como fazer Ingestão de dados no Azure CosmosDB utilizando Databricks

Fala monstros e monstras dos dados! Tudo bem?

Hoje escolhi um tema que tirou o sono da nossa equipe por alguns dias, portanto vou compartilhar com vocês como montar a conexão entre o Azure Databricks e o Azure CosmosDB, bora lá?

Antes de tudo é importante explicar as configurações que estamos utilizando:

  • Azure Cosmos DB (SQL API) -> Conheça mais sobre esta versão, clicando aqui
  • Azure Databricks
    • Cluster Mode: Standard
    • Runtime Version: 6.4 Extended Support (Scala 2.11, Spark 2.4.5) -> Isso mesmo, uma versão antiga. Infelizmente é a única que suporta a biblioteca que funciona sem problemas de conflitos ou versões

Em primeiro lugar vamos criar o banco de dados e o container no cosmosDB, se você chegou até aqui, por analogia vou supor que você já saiba como fazer este passo, do contrário, clique aqui e saiba como fazer do inicio.

Em seguida criaremos o cluster no databricks, do mesmo modo, caso você não saiba como fazer isso, clique aqui.

Criação do Cluster

Agora, vamos a criação do nosso cluster:

Tela de criação do cluster
Bem como informo no inicio do artigo, vamos selecionar o runtime version 6.4 Extended Support (Scala 2.11, Spark 2.4.5) e criamos o cluster.

Em seguida, com o cluster criado é hora de fazer a instalação da biblioteca e referenciá-la dentro do cluster. Nesse meio tempo você pode baixar a biblioteca clicando aqui (sim, esta é a única biblioteca que faz a conexão sem nenhum impeditivo). Por fim, vamos fazer a instalação:

Clicando na aba “Libraries“:

Tela das bibliotecas inseridas no cluster do databricks


Então, clique no botão “Install New“:

Instalação de uma nova biblioteca no Azure databricks

Logo depois na área de transferência “Drop JAR here” deposite o arquivo baixado (azure-cosmosdb-spark_2.4.0_2.11-3.7.0-uber.jar) e por último no botão “Install“:

Instalando a biblioteca Azure CosmosDB Spark

Por fim, devemos aguardar a instalação da biblioteca e então vamos criar um notebook para configurar o acesso ao cosmosDB pelas credenciais e fazer a ingestão dos item de testes (criados a partir de um dataframe).

Configuração para acesso ao Azure CosmosDB

Configuração das credenciais para o acesso ao CosmosDB
writeConfig = {
 "Endpoint" : "https://REPLACEME.documents.azure.com:443/",
 "Masterkey" : "REPLACEME",
 "Database" : "DatabricksToCosmos",
 "Collection" : "data",
 "Upsert" : "true"
}

Vou explicar onde encontrar as chaves: Endpoint, Masterkey, Database e Collection.

Em primeiro lugar o Endpoint encontraremos na página inicial do recurso cosmosDB:

Acesso ao Endpoint do Azure CosmosDB
Primeiramente clique em overview e então copie o texto da URI.

Em seguida vamos encontrar a Masterkey:

Acesso a Master Key do Azure CosmosDB
Primeiramente vá no grupo “Settings” e então clique em “Keys”. Logo depois você pode localizar sua chave “Master Key”.

E então, vamos encontrar o Database (nome do banco de dados) e Collection (nome do container):

Acesso aos nomes do banco de dados e collection ou container no Azure CosmosDB

Ingestão dos dados no CosmosDB pelo Databricks

Por fim, vamos para a parte que importa, fazer a ingestão dos dados (usando dataframe) para dentro do Azure cosmosDB:

Criação do dataframe e ingestão dos dados do Azure databricks para o Azure cosmosDB
spark.createDataFrame((("1", "Rafa Costa", 30, "Head of Data"), ("2", "Maria da Silva", 40, "CDO")))\
    .toDF("id","nome","idade","cargo") \
    .write\
    .format("com.microsoft.azure.cosmosdb.spark")\
    .options(**writeConfig)\
    .mode("append")\
    .save()

Os dados no Azure CosmosDB:

Evidência de inserção nos itens do container
Como resultado, podemos ver foi inserido 2 Id’s, os mesmos criados no dataframe dentro do databricks.
Evidência dos itens do dataframe inseridos no Azure CosmosDB
Dessa forma, após fazer a query, como esperado, tivemos 2 ID’s.

E ai, foi útil pra você? Comenta aqui embaixo e compartilha com os amigos monstros nos dados!

Se você tiver alguma dúvida ou sugestão, não se esqueça de conectar comigo.

rafacostaComo fazer Ingestão de dados no Azure CosmosDB utilizando Databricks