Источники данных Spark

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 или более поздней версии.