Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
API источника данных Spark позволяет считывать данные из внешних баз данных и записывать их непосредственно из Azure Databricks. Используйте его только в том случае, если требуется полная гибкость обработчика Spark, выполнение собственных запросов в источнике или требование доступа к записи во внешних системах. Как правило, Azure Databricks рекомендует контролируемый доступ только для чтения с автоматическим выполнением pushdown для запросов Spark или SQL. См. раздел " Что такое федерация запросов?".
API источника данных Spark имеет определенное поведение для подключения, выполнения запросов и обнаружения схем.
- Основная рабочая нагрузка и все последующие преобразования Spark выполняются в кластере Azure Databricks Spark.
- При использовании
queryпараметра указанная инструкция SQL полностью выполняется во внешнем источнике данных. Spark извлекает результаты, не выполняя принудительное преобразование в строке запроса. - Для подключения требуется либо соединитель с Azure Databricks, предоставленный пользователем драйвер JDBC, либо пользовательский источник данных PySpark.
- Spark автоматически считывает схему из внешней таблицы базы данных и сопоставляет типы с типами SQL Spark.
Использование упаковаемого соединителя
Databricks Runtime включает оптимизированные соединители для распространенных источников данных. Полный список см. в разделе Поддерживаемые встроенные соединители.
Объединенные соединители используют host и port в качестве отдельных параметров вместо полной строки URL-адреса JDBC.
Чтение данных с помощью сквозного запроса
Использование параметра query гарантирует, что логика фильтрации и соединения таблиц выполняется в исходной базе данных до того, как данные поступят в Spark. Для управляемого доступа на чтение с автоматическим отправкой запросов и делегированием разрешений каталога Unity с помощью представлений вместо этого рассмотрим удаленные запросы .
df = (spark.read
.format("sqlserver")
.option("host", "<your-sql-server-instance>.database.windows.net")
.option("user", dbutils.secrets.get(scope="<scope>", key="<user>"))
.option("password", dbutils.secrets.get(scope="<scope>", key="<password>"))
.option("database", "<database-name>")
.option("query", "SELECT id, name FROM users WHERE active = 1")
.load())
Запись данных
Укажите режим записи с помощью .mode(), чтобы управлять способом записи данных. Используется append для добавления строк в существующую таблицу или overwrite замены его содержимого.
(df.write
.format("sqlserver")
.mode("overwrite")
.option("host", "<your-sql-server-instance>.database.windows.net")
.option("user", dbutils.secrets.get(scope="<scope>", key="<user>"))
.option("password", dbutils.secrets.get(scope="<scope>", key="<password>"))
.option("database", "<database-name>")
.option("dbtable", "<table-name>")
.save())
Использование подключения JDBC UC
Если соединитель для конкретного источника не упаковается или вы хотите использовать определенную версию драйвера JDBC, используйте подключение каталога JDBC Unity. Это позволяет централизованно управлять учетными данными и использовать собственный драйвер JDBC.
Подключение каталога JDBC Unity предлагает несколько преимуществ по сравнению с использованием упакованного соединителя или необработанного драйвера JDBC напрямую. При подключении каталога JDBC Unity можно:
- Используйте свой JAR-файл драйвера JDBC для любой СУБД, поддерживающей JDBC.
- Создайте подключение один раз и повторно используйте его в бессерверных, стандартных и выделенных кластерах.
- Используйте управляемый доступ к источнику данных с помощью объекта подключения каталога Unity.
- Скрытие учетных данных подключения от запрашивающего пользователя.
- Чтение и запись во внешние базы данных с помощью API источника данных Spark.
Чтобы использовать подключение каталога JDBC Unity, укажите databricks.connection в параметрах Spark:
df = (spark.read
.format("jdbc")
.option("databricks.connection", "<connection-name>")
.option("query", "SELECT * FROM external_table")
.load())
Инструкции по настройке см. в разделе "Подключение JDBC".
Использование пользовательского соединителя в выделенных кластерах
В выделенных (классических) кластерах можно установить сторонние соединители источников данных Spark или драйверы JDBC, которые не упаковываются в Databricks Runtime.
Используйте этот подход, когда:
- Для таких систем, как MongoDB, Cassandra, Couchbase или Elasticsearch, требуется сторонний соединитель Spark.
- Вам нужна определенная версия драйвера, которая не входит в пакет во время выполнения.
- Необходимо установить драйвер JDBC непосредственно в кластере без настройки подключения каталога Unity.
Установка соединителя или драйвера
Установите библиотеку в кластере через Compute>ваш кластер>Библиотеки>Установить новую. Координаты Maven можно использовать напрямую, не загружая или отправляя какие-либо JAR. Перезапустите кластер, чтобы библиотека вступила в силу.
Чтение данных
После установки соединителя используйте имя формата соединителя и необходимые параметры подключения для чтения данных.
df = (spark.read
.format("mongodb")
.option("connection.uri", "mongodb://<hostname>:27017")
.option("database", "<database-name>")
.option("collection", "<collection-name>")
.load())
Запись данных
Используйте то же имя формата и параметры подключения для записи данных обратно в источник.
(df.write
.format("mongodb")
.mode("overwrite")
.option("connection.uri", "mongodb://<hostname>:27017")
.option("database", "<database-name>")
.option("collection", "<collection-name>")
.save())
Considerations
Помните следующее при использовании пользовательских соединителей в выделенных кластерах.
- Драйвер или соединитель доступен только в кластере, где он установлен.
- Пользовательские сторонние JAR-файлы Spark не поддерживаются в Databricks SQL, бессерверных кластерах или кластерах со стандартным режимом доступа. Для этих типов вычислительных ресурсов используйте встроенные коннекторы или JDBC-подключения к Unity Catalog.
Источники данных для PySpark на заказ
API Python DataSource позволяет создавать пользовательские соединители данных полностью в Python без библиотек на основе JAR или JVM. Используйте это, если необходимо подключиться к REST API, приложениям SaaS или любой системе без интерфейса JDBC или при необходимости создавать искусственные данные программным способом. API поддерживает как пакетную, так и потоковую передачу операций чтения и записи.
Note
Для пользовательских источников данных PySpark требуется Среда выполнения Databricks 15.4 LTS или более поздней версии.
Сведения о настройке, примерах и справочнике по API см. в разделе "Пользовательские источники данных PySpark".
Сравнение стратегий интеграции
В следующей таблице сравнивается API источника данных Spark с Lakehouse Federation and Lakeflow Connect, чтобы помочь вам выбрать правильный подход для вашего варианта использования.
| Feature | API источника данных Spark | Федерация Lakehouse | Lakeflow Connect |
|---|---|---|---|
| Основной вариант использования | Сложные ETL, настраиваемая логика Spark, сквозные запросы | Нерегламентированные запросы, отчеты бизнес-аналитики | Масштабируемый автоматизированный приём данных |
| Перемещение данных | Загружена в память Spark (эфемерная) | Загружена в память Spark (эфемерная) | Скопировано в Delta Lake (постоянно) |
| Выполнение запросов | Перенос вниз вручную с помощью встроенной опции query |
Автоматическое проталкивание фильтров, соединений и агрегаций Spark и SQL | Неприменимо (полная репликация таблиц) |
| Governance | Подключение к Unity Catalog (JDBC) или области секретов | Каталог Unity (федеративный каталог) | Unity Catalog (управляемый конвейер) |
| лучше всего подходит для | Опытные пользователи, которым нужна вся гибкость Spark | Минимизация перемещения данных при сохранении управления | Промышленные конвейеры CDC и приёма данных |
Входящие в комплект коннекторы
Следующие источники данных объединяются в Databricks Runtime и могут вызываться непосредственно через Spark. Операции чтения и записи поддерживаются в выделенных и стандартных кластерах.
Note
Операции записи в бессерверных вычислительных ресурсах поддерживаются для PostgreSQL, SQL Server, MySQL, Snowflake и Redshift. Сведения о поддерживаемых параметрах соединителей см. в параметрах бессерверной записи для встроенных соединителей.
| Источник данных |
spark.format() Имя |
|---|---|
| PostgreSQL | "postgresql" |
| SQL Server | "sqlserver" |
| MySQL и MariaDB | "mysql" |
| Snowflake | "snowflake" |
| Amazon Redshift | "redshift" |
| Google BigQuery (сервис анализа данных) | "bigquery" |
| Azure Synapse | "SQLDW" |
| HTTP | "http" |
Ограничения
Следующие ограничения применяются при использовании API источника данных Spark в Azure Databricks.
- Параметры Spark для упакованных источников данных ограничены
querydbtableи небольшим набором параметров, относящихся к соединителю. - Пользовательские JAR-файлы Spark сторонних производителей можно устанавливать только на выделенных кластерах. Для бессерверных или стандартных кластеров используйте встроенные соединители или JDBC-подключения к Unity Catalog.
- Для пользовательских источников данных PySpark требуется Среда выполнения Databricks 15.4 LTS или более поздней версии.