Pular para o conteúdo principal

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.

nota

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

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.

  1. Faça o download e instale o driver ODBC da Databricks e configure um DSN ODBC para seu sistema operacional.
  2. Para Unix, Linux e macOS, instale o pacote unixodbc: no terminal, use o Homebrew para executar o comando brew install unixodbc. Para obter mais informações, consulte unixodbc no site do Homebrew.
  3. Instale o módulo pyodbc: no terminal ou no prompt do comando, use pip para executar o comando pip 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.

  1. 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.

    Python
    import 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)
  2. Para acelerar a execução do código, comece o clustering que corresponde à configuração HTTPPath em seu DSN.

  3. 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:

Para definir variáveis de ambiente, consulte a documentação do sistema operacional.

Python
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.