Criando um Service Principal para acesso ao SQL Warehouses Databricks via DBeaver

Airton Lira junior - Oct 26 - - Dev Community

Neste artigo vou ensinar como se conectar a um cluster serverless do SQL Warehouse do Databricks utilizando as credenciais de um SP - Service Principal do Databricks. Atualmente, não encontrei nenhum tutorial fácil de como fazer isso e tive que fazer um descompile do arquivo JAR do driver de conexão do Databricks para entender se é possível ou não, visto que, na documentação oficial do Databricks, não fica claro se utilizando o clientId, clientSecret e token é possível se conectar pelo DBeaver. O caminho mais direto e fácil foi via PAT - Personal Access Token. Portanto, agora vou demonstrar como realizar a conexão:

Antes de tudo você vai precisar:

  • Dbeaver mais atualizado possivel.
  • Ter feito o download do driver databricksJDBC.
  • Acesso de administrador ao workspace.

Criando um Service Principal e obtendo as credenciais

Acesse sua conta Databricks e o workspace desejado onde deseja criar o seu cluster warehouse. Após isso, selecione a parte de "Settings" no canto superior direito e depois clique em "Identity and Access" e "Manage" em Service Principals:

Image description

Após isso, crie um SP com nome de sua preferência e, em seguida, clique no mesmo que foi criado e adicione, na parte de "Configurations", as seguintes opções:

  • Databricks SQL access
  • Workspace access

Obtenha também as "Secrets" na aba de Secrets.

Atribuindo o SP ao cluster SQL Warehouses

Na tela do "SQL Warehouses", selecione o cluster que deseja e siga para a aba "Connection details". Esta parte é muito importante, por isso, copie as seguintes informações fornecidas:

  • Server hostname.
  • HTTP path.
  • OAuth URL.

O JDBC URL que ele fornece não vai funcionar para o Databricks, portanto, ignore-o e copie apenas as informações citadas acima.
O JDBC URL que ele fornece não vai funcionar para o databricks por tanto ignore, apenas copie as informações citadas acima.

Montando a conexão no DBeaver diretamente para o SQL Warehouses

Abra seu DBeaver e vamos agora configurar seu driver de conexão, que será o arquivo .JAR baixado no site do Databricks conforme mencionado no início:

Image description

Clique na opção "Novo" e informe na primeira parte as seguintes informações:

Image description

Agora, na segunda aba de "Bibliotecas", clique em "Adicionar arquivo" e navegue até o diretório onde se encontra seu arquivo .JAR e anexe-o. Após isso, clique em "OK" (não é necessário alterar ou adicionar nenhum parâmetro no driver).

Após criar o novo tipo de conexão, vamos à parte mais importante, que é a criação da conexão para acessar o cluster. Clique em:

Image description

Na tela seguinte, digite "databricks" e depois clique em "Next". Na tela seguinte, marque a opção "Salvar senha" e deixe em branco tanto o usuário como a senha. A URL JDBC deve ser montada da seguinte forma:

jdbc:databricks:<seu hostname>:443;httpPath=<HTTP path do Cluster>;AuthMech=11;Auth_Flow=1;httpPath=<HTTP path do Cluster>;AuthMech=11;Auth_Flow=1;OAuth2ClientId=<Chave clientId>;OAuth2Secret=<Chave Client secret;OAuth2TokenEndpoint=<OAuth URL fornecido no connection details do cluster e adicione no final o path /v1/token>

Um exemplo fictícios:

jdbc:databricks:abc-123.cloud.databricks.com:443;httpPath=/sql/protocolv1/o/1234567890123456/0123-456789-abcd123;AuthMech=11;Auth_Flow=1;OAuth2ClientId=abcde12345;OAuth2Secret=secretKey12345;OAuth2TokenEndpoint=https://abc-123.cloud.databricks.com/oauth2/v1/token

Todas as informações acima você consegue conforme dito anteriormente, na criação do seu SP e na parte do "Connection details", sendo o único detalhe que o OAuth URL deve ficar com um path adicional não especificado na tela do Databricks, que é /v1/token. Por ultimo vai nas propriedades do driver e clique em um botão de + logo abaixo e adicione o parametro SSL com valor 1 SSL=1.

Após isso, basta clicar em "Testar conexão" e será mostrada uma imagem conforme abaixo

Image description

Se tudo estiver certo, clique em "OK". Agora, você pode executar uma query para validar, além da permissão de conexão, a permissão de consulta, por exemplo, um SHOW TABLES;.

É isso, pessoal! Espero ter ajudado quem vai ter essa necessidade e encontre esse artigo bem direto e fácil para configurar.

Meu LinkedIn para networking e dúvidas: https://www.linkedin.com/in/airton-lira-junior-6b81a661/

databricks #dbeaver #databrickdbeaver #sqlwarehouse #jdbcdatabricks #databricksdriver #databricks #spark

. . . . . . . . . . . . .