Что такое федерация запросов?

При федерации запросов запросы отправляются в внешнюю базу данных с помощью API JDBC. Запрос выполняется как в Databricks, так и с помощью удаленных вычислений. Федерация запросов используется для таких источников, как MySQL, PostgreSQL, Redshift, Teradata и многое другое.

Схема обзора федерации запросов

Зачем использовать федерацию Lakehouse?

Lakehouse подчеркивает централизованное хранилище данных для уменьшения избыточности и изоляции данных. В вашей организации может быть множество систем данных в рабочей среде, и вы можете запросить данные в подключенных системах по ряду причин:

  • Отчеты по запросу.
  • Работа по проверке концепции.
  • Исследовательская фаза новых ETL-потоков данных или отчетов.
  • Поддержка рабочих нагрузок во время добавочной миграции.

В каждом из этих сценариев федерация запросов позволяет быстрее получать аналитические сведения, так как вы можете запрашивать данные на месте и избегать сложной и продолжительной обработки ETL.

Федерация запросов предназначена для вариантов использования, когда:

  • Вы не хотите загружать данные в Azure Databricks.
  • Вы хотите, чтобы ваши запросы воспользовались преимуществами вычислений во внешней системе баз данных.
  • Вы хотите воспользоваться преимуществами интерфейсов каталога Unity и управления данными, включая точное управление доступом, происхождение данных и поиск.

Федерация запросов против Lakeflow Connect

Федерация запросов позволяет запрашивать внешние источники данных без перемещения данных. Databricks рекомендует использовать управляемые коннекторы Lakeflow Connect для приема данных, так как они масштабируются для работы с большими объемами данных и снижения задержек запросов. Однако может потребоваться запросить данные, не перемещая их. Если у вас есть выбор между управляемыми соединителями для приема данных и федерацией запросов, выбирайте федерацию запросов для оперативных отчетов или работы по проверке концепции для ваших ETL-конвейеров.

Если ваш источник поддерживает это, запросные коннекторы для интеграции являются облегченной альтернативой CDC-коннекторам Lakeflow Connect. Они запрашивают источник непосредственно в расписании с помощью столбца курсора, не требуя шлюза или промежуточного хранилища. Используйте запросные соединители приема, если требуется повторяющийся прием, но у вас нет инфраструктуры CDC.

Общие сведения о настройке федерации запросов

Чтобы сделать набор данных доступным для запросов только для чтения с помощью системы Lakehouse Federation, выполните следующие действия.

  • Подключение, защищаемый объект в каталоге Unity, указывающий путь и учетные данные для доступа к внешней системе базы данных.
  • Внешний каталог, защищаемый объект в каталоге Unity, который зеркально отражает базу данных во внешней системе данных, что позволяет выполнять запросы только для чтения в этой системе данных в рабочей области Azure Databricks, управляя доступом с помощью каталога Unity.

Поддерживаемые источники данных

Федерация запросов поддерживает подключения к следующим источникам:

Требования к подключению

Требования к рабочей области:

  • Рабочая область активирована для Unity Catalog. Рабочие области, созданные после 9 ноября 2023 г., автоматически включены для каталога Unity, включая автоматическую подготовку хранилища метаданных. Вам не нужно создавать хранилище метаданных вручную, если ваша рабочая область была создана до автоматического включения и не была включена для Unity Catalog. См. автоматическое включение каталога Unity.

Требования к вычислениям:

  • Сетевое подключение вашего вычислительного ресурса к целевым системам баз данных. Смотрите Рекомендации по сетевым настройкам для федерации Lakehouse.
  • Azure Databricks вычисления должны использовать Databricks Runtime 13.3 LTS или более поздней версии и Standard или Dedicated режим доступа.
  • Хранилища SQL должны быть профессиональными или бессерверными и должны использовать 2023.40 или более поздней версии.

Необходимые разрешения:

  • Чтобы создать подключение, необходимо быть администратором хранилища метаданных или пользователем с правами CREATE CONNECTION в хранилище метаданных каталога Unity, подключенном к рабочей области. В рабочих областях, автоматически включённых в каталог Unity, администраторы рабочих областей по умолчанию имеют CREATE CONNECTION привилегии.
  • Чтобы создать внешний каталог, необходимо иметь разрешение CREATE CATALOG на хранилище метаданных и либо быть владельцем подключения, либо обладать привилегией CREATE FOREIGN CATALOG на подключение. В рабочих областях, автоматически включённых в каталог Unity, администраторы рабочих областей по умолчанию имеют CREATE CATALOG привилегии.

Дополнительные требования к разрешениям указываются в каждом последующем разделе, посвящённом задачам.

Создание подключения

Подключение задает путь и учетные данные для доступа к внешней системе базы данных. Чтобы создать подключение, можно использовать обозреватель каталогов или команду CREATE CONNECTION SQL в записной книжке Azure Databricks или редакторе sql-запросов Databricks.

Note

Вы также можете использовать REST API Databricks или CLI Databricks для создания соединения. См. POST /api/2.1/unity-catalog/connections и команды каталога Unity .

Необходимые разрешения: администратор хранилища метаданных или пользователь с привилегиями CREATE CONNECTION .

Обозреватель каталогов

  1. В рабочей области Azure Databricks щелкните Data icon.Catalog.

  2. В верхней части области каталога щелкните значок " и выберите "Создать подключение" в меню.

  3. Введите понятное имя подключения.

  4. Выберите тип подключения (поставщик базы данных, например MySQL или PostgreSQL).

  5. (Необязательно) Добавьте комментарий.

  6. Нажмите кнопку Далее.

  7. Введите свойства подключения (например, сведения о узле, пути и учетные данные доступа).

    Для каждого типа подключения требуются разные сведения о подключении. См. статью о типе подключения, указанную в оглавлении слева.

  8. Нажмите Create connection (Создать подключение).

  9. Введите имя внешнего каталога.

  10. (Необязательно) Нажмите кнопку "Проверить подключение" , чтобы убедиться, что она работает.

  11. Нажмите Создать каталог.

  12. Выберите рабочие области, в которых пользователи могут получить доступ к созданному каталогу. Вы можете выбрать Все рабочие области имеют доступ, или нажать Назначить рабочие области, выбрать рабочие области, а затем нажать Назначить.

  13. Измените владельца , чтобы он мог управлять доступом ко всем объектам в каталоге. Начните вводить адресата в текстовом поле, а затем выберите адресата в возвращенных результатах.

  14. Предоставьте привилегии на каталоге. Нажмите Grant:

    1. Укажите принципалов , у которых будет доступ к объектам в каталоге. Начните вводить адресата в текстовом поле, а затем выберите адресата в возвращенных результатах.
    2. Выберите предустановки привилегий , чтобы предоставить их каждому принципалу. Всем пользователям учетной записи предоставлено BROWSE по умолчанию.
      • В раскрывающемся меню выберите средство чтения данных , чтобы предоставить привилегии read объектам каталога.
      • Выберите редактор данных в раскрывающемся меню, чтобы предоставить read и modify привилегии для объектов в каталоге.
      • Вручную выберите привилегии для предоставления.
    3. Нажмите Grant.
    4. Нажмите кнопку Далее.
    5. На странице метаданных укажите пары "ключ-значение" для тегов. Дополнительные сведения см. в статье Применение тегов к защищаемым объектам каталога Unity.
    6. (Необязательно) Добавьте комментарий.
    7. Нажмите кнопку Сохранить.

SQL

Выполните следующую команду в записной книжке или редакторе sql-запросов. Этот пример предназначен для подключений к базе данных PostgreSQL. Параметры отличаются по типу подключения. См. статью о типе подключения, указанную в оглавлении слева.

CREATE CONNECTION <connection-name> TYPE postgresql
OPTIONS (
  host '<hostname>',
  port '<port>',
  user '<user>',
  password '<password>'
);

Мы рекомендуем использовать Azure Databricks secrets вместо строк обычного текста для конфиденциальных значений, таких как учетные данные. Рассмотрим пример.

CREATE CONNECTION <connection-name> TYPE postgresql
OPTIONS (
  host '<hostname>',
  port '<port>',
  user secret ('<secret-scope>','<secret-key-user>'),
  password secret ('<secret-scope>','<secret-key-password>')
)

Сведения о настройке секретов см. в разделе "Управление секретами".

Для получения сведений об управлении существующими подключениями см. статью Управление подключениями для федерации Lakehouse.

Создание внешнего каталога

Note

Если вы используете пользовательский интерфейс для создания подключения к источнику данных, создание внешнего каталога осуществляется автоматически, и вы можете пропустить этот шаг.

Внешний каталог зеркально отражает базу данных во внешней системе данных, чтобы можно было запрашивать и управлять доступом к данным в этой базе данных с помощью Azure Databricks и каталога Unity. Чтобы создать внешний каталог, вы используете подключение к источнику данных, который уже определен.

Чтобы создать внешний каталог, можно использовать обозреватель каталогов или команду CREATE FOREIGN CATALOG SQL в записной книжке Azure Databricks или редакторе запросов SQL. Вы также можете использовать API каталога Unity. См. справочную документацию Azure Databricks.

Метаданные внешнего каталога синхронизируются с каталогом Unity при каждом взаимодействии с каталогом. Сведения о сопоставлении типов данных между каталогом Unity и источником данных см. в разделе "Сопоставления типов данных" документации по каждому источнику данных.

Требуемые разрешения:CREATE CATALOG разрешение на метахранилище и либо владение соединением, либо привилегия на соединение.

Обозреватель каталогов

  1. В рабочей области Azure Databricks щелкните Data icon.Catalog, чтобы открыть обозреватель каталогов.

  2. В верхней части области каталога щелкните значок Add or plus icon"Добавить" или "Плюс"Добавить данные и выберите "Создать каталог" в меню.

    Кроме того, на странице быстрого доступа нажмите кнопку каталогов, а затем нажмите кнопку "Создать каталог".

  3. Следуйте инструкциям по созданию внешних каталогов в «Создание каталогов».

SQL

Выполните следующую SQL-команду в ноутбуке или редакторе запросов SQL. Элементы в квадратных скобках являются необязательными. Замените значения по умолчанию:

  • <catalog-name>: имя каталога в Azure Databricks.
  • <connection-name>: объект подключения , указывающий источник данных, путь и учетные данные доступа.
  • <database-name>: имя базы данных, которую вы хотите зеркально отражать в качестве каталога в Azure Databricks. Не требуется для MySQL, использующего двухуровневое пространство имен.
  • <external-catalog-name>: Databricks-to-Databricks только: Имя каталога во внешней рабочей области Databricks, который вы зеркалируете. См. Создатьвнешний каталог.
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');

Сведения об управлении и работе с иностранными каталогами см. в статье Управление и работа с иностранными каталогами.

Обновление метаданных

Каталог Unity автоматически обновляет метаданные для внешних таблиц во время запроса. Если схема внешнего каталога изменяется, каталог Unity получает последние метаданные при выполнении запроса. Это поведение сохраняет текущую схему и оптимально подходит для большинства рабочих нагрузок.

Однако Databricks рекомендует вручную обновлять метаданные в следующих случаях:

  • Обеспечение согласованности для внешних таблиц, к которым обращаются внешние движки. Пути, которые обходят Databricks Runtime, не запускают автоматическое обновление, что может привести к устареванию метаданных.
  • Чтобы повысить производительность рабочих нагрузок, в которых требуется избежать обновления метаданных во время выполнения запроса. Обновление метаданных упреждающим образом позволяет выполнять запросы быстрее с помощью кэшированных метаданных. Этот подход особенно полезен сразу после создания внешнего каталога, так как первый запрос в противном случае активирует полное обновление.

Автоматизация обновления метаданных с помощью заданий Lakeflow

Запланируйте периодическое обновление метаданных с использованием задания Lakeflow и команды SQL. Рассмотрим пример.

-- Refresh an entire catalog
> REFRESH FOREIGN CATALOG some_catalog;
-- Refresh a specific schema
> REFRESH FOREIGN SCHEMA some_catalog.some_schema;
-- Refresh a specific table
> REFRESH FOREIGN TABLE some_catalog.some_schema.some_table;

Настройте задание для выполнения с регулярными интервалами в зависимости от частоты ожидаемых изменений внешней схемы.

Загрузка данных из внешних таблиц с материализованными представлениями

Databricks рекомендует загружать внешние данные с помощью федерации запросов при создании материализованных представлений. См. материализованные представления.

При использовании федерации запросов пользователи могут ссылаться на федеративные данные следующим образом:

CREATE MATERIALIZED VIEW xyz AS SELECT * FROM federated_catalog.federated_schema.federated_table;

Просмотр системных федеративных запросов

Федерация запросов преобразует инструкции Databricks SQL в инструкции, которые можно отправить в федеративный источник данных. Чтобы просмотреть сформированный оператор SQL, щелкните узел сканирования источника внешних данных в графовом представлении профиля запросовили запустите оператор EXPLAIN FORMATTED SQL. Дополнительные сведения см. в разделе "Поддерживаемые pushdown " документации по каждому источнику данных.

Limitations

  • Запросы доступны только для чтения. Единственное исключение заключается в том, что федерация Lakehouse используется для интеграции устаревшего хранилища метаданных Hive рабочего пространства (федерация каталога). Внешние таблицы в этом сценарии доступны для записи. См. Что означает запись в внешний каталог в федеративном хранилище метаданных Hive?.
  • Определение регулирования подключений осуществляется с помощью ограничения на одновременные запросы в Databricks SQL. Для каждого подключения не существует ограничений между складами. См. логику очереди и автомасштабирования.
  • Кэширование запросов Databricks (кэш результатов и кэш дисков) не поддерживается для федеративных запросов. Это означает, что use_cached_result параметр не применяется к запросам к федеративным источникам.
  • Таблицы и схемы с именами, недопустимыми в каталоге Unity, не поддерживаются и игнорируются каталогом Unity при создании внешнего каталога. См. список правил именования и ограничений в разделе Ограничения.
  • Имена таблиц и имена схем преобразуются в нижний регистр в каталоге Unity. Если это приводит к конфликтам имен, Databricks не может гарантировать, какой объект импортируется в внешний каталог.
  • Для каждой внешней таблицы, на которую ссылаются, Databricks запускает подзапрос в удаленной системе, чтобы получить подмножество данных из этой таблицы и затем возвращает результат одному исполняющему устройству Databricks через единый поток. Если результирующий набор слишком большой, исполнитель может закончиться нехваткой памяти.
  • Выделенный режим доступа (прежнее название — режим доступа с одним пользователем) доступен только для пользователей, которым принадлежит подключение.
  • Федерация Lakehouse не может объединять внешние таблицы с учетом регистра для подключений к Azure Synapse или подключений к Redshift.

Квоты ресурсов

Azure Databricks применяет квоты ресурсов ко всем защищаемым объектам каталога Unity. Эти квоты перечислены в ограничениях ресурсов. Внешние каталоги и все объекты, которые они содержат, включаются в общее использование квоты.

Если вы ожидаете превысить эти ресурсные ограничения, обратитесь к команде учетной записи Azure Databricks.

Вы можете отслеживать использование своей квоты с помощью API квот ресурсов Unity Catalog. См. статью "Мониторинг использования квот ресурсов каталога Unity".

Дополнительные ресурсы