Conectar o Python e o pyodbc ao Databricks
O senhor pode se conectar a partir de seu código local Python por meio de ODBC aos dados em um clustering Databricks ou SQL warehouse. Para fazer isso, o senhor pode usar o módulo de código Python de código aberto pyodbc
.
Siga estas instruções para instalar, configurar e usar pyodbc
.
Para obter mais informações sobre pyodbc
, consulte o pyodbc Wiki.
A Databricks oferece o Databricks SQL Connector for Python como uma alternativa ao site pyodbc
. O Databricks SQL Connector for Python é mais fácil de configurar e usar e tem um conjunto mais robusto de construções de codificação do que o pyodbc
. No entanto, o site pyodbc
pode ter um desempenho melhor ao buscar resultados de consultas acima de 10 MB.
Essas instruções foram testadas com o driver Databricks ODBC 2.7.5, pyodbc 5.0.1 e unixODBC 2.3.12.
Requisitos
-
Uma máquina de desenvolvimento local executando uma das seguintes opções:
- MacOS
- Windows
- Uma distribuição Unix ou Linux que suporta arquivos
.rpm
ou.deb
-
Um Databricks clustering, um Databricks SQL warehouse, ou ambos. Para obter mais informações, consulte a referência de configuração de computação e Conecte-se a um SQL warehouse.
Etapa 1: download, instalação e configuração software
Nesta etapa, o senhor faz download e instala o driver ODBC da Databricks, o pacote unixodbc
e o módulo pyodbc
. (O módulo pyodbc
requer o pacote unixodbc
no Unix, Linux e macOS). O senhor também configura um ODBC fonte de dados Name (DSN) para se autenticar e se conectar ao seu clustering ou SQL warehouse.
- Faça o download e instale o driver ODBC da Databricks e configure um DSN ODBC para seu sistema operacional.
- Para Unix, Linux e macOS, instale o pacote
unixodbc
: no terminal, use o Homebrew para executar o comandobrew install unixodbc
. Para obter mais informações, consulte unixodbc no site do Homebrew. - Instale o módulo
pyodbc
: no terminal ou no prompt do comando, usepip
para executar o comandopip install pyodbc
. Para obter mais informações, consulte pyodbc no site PyPI e Install na Wiki pyodbc.
Etapa 2: teste sua configuração
Nesta etapa, o senhor escreve e executa o código Python para usar o clustering Databricks ou o warehouse Databricks SQL para consultar a tabela trips
no esquema nyctrips
do catálogo samples
e exibir os resultados.
-
Crie um arquivo chamado
pyodbc-demo.py
com o conteúdo a seguir. Substitua<dsn-name>
pelo nome do ODBC DSN que o senhor criou anteriormente, salve o arquivo e, em seguida, execute o arquivo com o interpretador Python.Pythonimport pyodbc
# Connect to the Databricks cluster by using the
# Data Source Name (DSN) that you created earlier.
conn = pyodbc.connect("DSN=<dsn-name>", autocommit=True)
# Run a SQL query by using the preceding connection.
cursor = conn.cursor()
cursor.execute(f"SELECT * FROM samples.nyctaxi.trips")
# Print the rows retrieved from the query.
for row in cursor.fetchall():
print(row) -
Para acelerar a execução do código, comece o clustering que corresponde à configuração
HTTPPath
em seu DSN. -
Execute o arquivo
pyodbc-demo.py
com seu interpretador Python. são exibidas informações sobre as linhas da tabela.
Próximas etapas
- Para executar o código de teste Python em um clustering diferente ou SQL warehouse, crie um DSN diferente e altere
<dsn-name>
para o nome do DSN. - Para executar o código de teste Python com uma consulta SQL diferente, altere as cadeias de comando
execute
.
Usando uma conexão sem DSN
Como alternativa ao uso de um nome DSN, você pode especificar as configurações de conexão em linha. O exemplo a seguir mostra como usar uma cadeia de conexão sem DSN para autenticação de tokens de acesso pessoal em Databricks. Este exemplo pressupõe que o senhor tenha a seguinte variável de ambiente:
- Defina
DATABRICKS_SERVER_HOSTNAME
como o nome da instânciaworkspace, por exemplo,1234567890123456.7.gcp.databricks.com
. - Defina
DATABRICKS_HTTP_PATH
como o valor do caminho HTTP para o clustering de destino ou SQL warehouse no site workspace. Para obter o valor do caminho HTTP , consulte Obter detalhes da conexão para um recurso Databricks compute. - Defina
DATABRICKS_TOKEN
como os tokens de acesso pessoal Databricks para o usuário-alvo. Para criar tokens de acesso pessoal, consulte Databricks personal access tokens for workspace users.
Para definir variáveis de ambiente, consulte a documentação do sistema operacional.
import pyodbc
import os
conn = pyodbc.connect(
"Driver=/Library/simba/spark/lib/libsparkodbc_sb64-universal.dylib;" +
f"Host={os.getenv('DATABRICKS_HOST')};" +
"Port=443;" +
f"HTTPPath={os.getenv('DATABRICKS_HTTP_PATH')};" +
"SSL=1;" +
"ThriftTransport=2;" +
"AuthMech=3;" +
"UID=token;" +
f"PWD={os.getenv('DATABRICKS_TOKEN')}",
autocommit = True
)
# Run a SQL query by using the preceding connection.
cursor = conn.cursor()
cursor.execute("SELECT * FROM samples.nyctaxi.trips")
# Print the rows retrieved from the query.
for row in cursor.fetchall():
print(row)
Solução de problemas
Esta seção aborda problemas comuns ao usar o site pyodbc
com o Databricks.
Erro de decodificação Unicode
Problema : Você recebe uma mensagem de erro semelhante à seguinte:
<class 'pyodbc.Error'> returned a result with an error set
Traceback (most recent call last):
File "/Users/user/.pyenv/versions/3.7.5/lib/python3.7/encodings/utf_16_le.py", line 16, in decode
return codecs.utf_16_le_decode(input, errors, True)
UnicodeDecodeError: 'utf-16-le' codec can't decode bytes in position 2112-2113: illegal UTF-16 surrogate
Causa : Existe um problema no site pyodbc
versão 4.0.31 ou abaixo que pode se manifestar com esses sintomas ao executar consultas que retornam colunas com nomes longos ou uma mensagem de erro longa. O problema foi corrigido por uma versão mais recente do pyodbc
.
soluções : Atualize sua instalação do pyodbc
para a versão 4.0.32 ouacima.
Solução geral de problemas
Veja os problemas no repositório mkleehammer/pyodbc no GitHub.