Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Вы можете подключиться из локального кода Python через ODBC к данным в кластере Azure Databricks или хранилище SQL. Для этого можно использовать модуль pyodbc кода Python с открытым кодом.
Чтобы установить, настроить и использовать pyodbc, выполните эти инструкции.
Дополнительные сведения о pyodbc см. в вики-ресурсе pyodbc.
Примечание.
В качестве альтернативы для Databricks предлагает соединитель SQL Databricks для Pythonpyodbc. Соединитель Databricks SQL для Python проще в настройке и использовании, и обладает более надёжными конструкциями для программирования, чем pyodbc. Однако производительность pyodbc при выборке результатов запросов размером более 10 МБ может быть выше.
Эти инструкции были протестированы с драйвером ODBC Databricks 2.7.5, pyodbc 5.0.1 и unixODBC 2.3.12.
Требования
- Локальный компьютер разработки, на котором запущен один из следующих вариантов:
- macOS
- Виндоус
- Дистрибутив UNIX или Linux, поддерживающий файлы
.rpmили.deb
- pip.
- Для UNIX, Linux или macOS: Homebrew.
- Кластер Azure Databricks, хранилище SQL Databricks или и то, и другое. Дополнительные сведения см . в справочнике по конфигурации вычислений и подключении к хранилищу SQL.
Шаг 1. Скачивание, установка и настройка программного обеспечения
На этом шаге вы скачиваете и устанавливаете драйвер ODBC для Databricks, пакет unixodbc и модуль pyodbc. (Для pyodbc модуля требуется unixodbc пакет в Unix, Linux и macOS.) Вы также настраиваете имя источника данных ODBC (DSN) для проверки подлинности и подключения к кластеру или хранилищу SQL.
- Скачайте и установите драйвер ODBC Databricks и настройте DSN ODBC для вашей операционной системы.
- Для Unix, Linux и macOS установите
unixodbcпакет: из терминала используйте Homebrew для выполнения командыbrew install unixodbc. Дополнительные сведения см. в разделе unixodbc на веб-сайте Homebrew. -
pyodbcУстановите модуль: из терминала или командной строки, используйтеpipдля выполнения командыpip install pyodbc. Дополнительные сведения см. в разделе pyodbc на веб-сайте PyPI и статье об установке на вики-ресурсе pyodbc.
Шаг 2. Проверка конфигурации
На этом шаге вы напишете и запустите код Python для использования кластера Azure Databricks или хранилища SQL Databricks для запроса trips таблицы в samples схеме каталога nyctrips и отображения результатов.
Создайте файл
pyodbc-demo.pyсо следующим содержимым: Замените<dsn-name>именем созданного ранее ИМЕНИ DSN ODBC, сохраните файл и запустите файл с интерпретатором 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)Чтобы ускорить выполнение кода, запустите кластер , соответствующий
HTTPPathпараметру в dsN.Запустите файл
pyodbc-demo.pyв интерпретаторе Python. Отображаются сведения о строках таблицы.
Следующие шаги
- Чтобы запустить тестовый код Python в другом кластере или хранилище SQL, создайте новый DSN и измените
<dsn-name>, чтобы указать его имя. - Чтобы запустить тестовый код Python с другим запросом SQL, измените строку команды
execute.
Использование подключения dsN без использования
В качестве альтернативы использованию имени DSN можно указать встроенные параметры подключения. В следующем примере показано, как использовать строка подключения dsN для проверки подлинности личного маркера доступа Azure Databricks. В этом примере предполагается, что у вас есть следующие переменные среды:
- Задайте
DATABRICKS_SERVER_HOSTNAMEк имени экземпляра рабочей области , напримерadb-1234567890123456.7.azuredatabricks.net. - Установите значение
равным значению HTTP пути пути HTTPдля кластера или SQL хранилища в рабочей области. Чтобы получить значение , см. раздел Получите сведения о подключении для вычислительного ресурса Azure Databricks . - Установите для целевого пользователя
DATABRICKS_TOKENтокен личного доступа Azure Databricks. Сведения о создании личного маркера доступа см. в статье "Создание личных маркеров доступа для пользователей рабочей области".
Чтобы задать переменные среды, ознакомьтесь с документацией операционной системы.
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)
В следующем примере вместо личного маркера доступа Azure Databricks используется проверка подлинности на основе браузера OAuth (U2M) или OAuth 2.0. В этом примере предполагается, что вы уже установили предыдущие DATABRICKS_SERVER_HOSTNAME и DATABRICKS_HTTP_PATH переменные среды.
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=11;" +
"Auth_Flow=2;" +
"PWD=1234567",
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)
В следующем примере используется аутентификация OAuth на уровне автоматического взаимодействия между машинами (M2M) или аутентификация клиентских учетных данных OAuth 2.0. В этом примере предполагается, что вы уже установили предыдущие DATABRICKS_SERVER_HOSTNAME и DATABRICKS_HTTP_PATH переменные среды, а также следующие переменные среды:
- Задайте
ARM_CLIENT_IDзначение идентификатора приложения (клиента) субъекта-службы. - Задайте
DATABRICKS_OAUTH_SECRETзначение секрета OAuth субъекта-службы. (Секреты идентификатора Microsoft Entra не поддерживаются для проверки подлинности учетных данных клиента OAuth M2M или OAuth 2.0 с помощью драйвера ODBC Databricks.)
Дополнительные сведения см. в разделе проверки подлинности OAuth "компьютер — компьютер" (M2M).
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=11;" +
"Auth_Flow=1;" +
f"Auth_Client_ID={os.getenv('ARM_CLIENT_ID')};" +
f"Auth_Client_Secret={os.getenv('DATABRICKS_OAUTH_SECRET')}",
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)
Устранение неполадок
В этом разделе рассматриваются распространенные проблемы при использовании pyodbc с Databricks.
Ошибка декодирования Юникода
Проблема: появляется сообщение об ошибке, аналогичное указанному ниже.
<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
причина: проблема существует в pyodbc версии 4.0.31 или ниже, которая может проявляться с такими симптомами при выполнении запросов, возвращающих столбцы с длинными именами или длинным сообщением об ошибке. Эта проблема устранена в более новой версии pyodbc.
Решение: обновите установленный экземпляр pyodbc до версии 4.0.32 или более поздней.
Общие действия по устранению неполадок
См. раздел Проблемы в репозитории mkleehammer/pyodbc на GitHub.