Выполнение федеративных запросов в Oracle

На этой странице описывается, как настроить Федерацию Lakehouse для выполнения федеративных запросов к данным Oracle, которые не управляются Azure Databricks. Дополнительные сведения о Федерации Lakehouse см. в статье "Что такое Федерация Lakehouse?"

Чтобы подключиться к базе данных Oracle с помощью Lakehouse Federation, необходимо создать следующее в хранилище метаданных Azure Databricks Unity Catalog (рабочие области, созданные после 9 ноября 2023 г., уже имеют хранилище метаданных Unity Catalog автоматически подготовленное):

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

Limitations

  • Федерация Lakehouse поддерживает только подключения TLS к Oracle Cloud. Подключения к другим базам данных Oracle используют собственное сетевое шифрование (NNE).

  • Существует известная проблема при подключении к экземплярам 11.2.0.3.0 и более поздних версий, которые не имеют значения часовой зоны Etc/UTC (ошибка: ORA-01882: timezone region not found).

    • Обходной путь: используйте конфигурацию spark.databricks.connector.oracle.timezoneAsRegion, которая напрямую сопоставляется со свойством драйвера JDBC oracle.jdbc.timezoneAsRegion.
    • Предупреждение. Обходное решение может привести к неправильному поведению времени летнего времени (DST). Для получения справки обратитесь в службу поддержки Oracle.

License

Драйвер Oracle и другие необходимые jar-модули Oracle управляются лицензией FDHUT без щелчка.

Перед началом работы

Прежде чем начать, убедитесь, что выполнены требования в этом разделе.

Требования к Databricks

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

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

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

  • Сетевое подключение от вычислительной системы к целевым системам баз данных. См. рекомендации по сети для Федерации Lakehouse.
  • Вычислительные ресурсы Azure Databricks должны использовать Databricks Runtime 16.1 или более поздней версии и стандартный или выделенный режим доступа.
  • Хранилища SQL должны быть профессиональными или бессерверными и должны использовать 2024.50 или более поздней версии.

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

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

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

Требования Oracle

Для подключений, использующих собственное сетевое шифрование, необходимо включить NNE на стороне сервера (ACCEPTED как минимум). См. раздел Настройка шифрования сетевых данных в документации Oracle. Это не относится к подключениям Oracle Cloud, которые вместо этого используют TLS.

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

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

Note

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

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

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

  1. В рабочей области Azure Databricks щелкните значок данных.Каталог.
  2. Щелкните значок Подключитесь, а затем щелкните "Подключения".
  3. Нажмите кнопку "Создать подключение ".
  4. На странице мастера настройки подключения под названием Основы подключения введите понятное имя подключения.
  5. Выберите тип подключения Oracle.
  6. (Необязательно) Добавьте комментарий.
  7. Нажмите кнопку Далее.
  8. На странице проверки подлинности введите следующие данные для экземпляра Oracle:
    • узла: например, oracle-demo.123456.rds.amazonaws.com
    • порт: например, 1521
    • User: например, oracle_user
    • Пароль: например, password123
    • Протокол шифрования: Native Network Encryption (по умолчанию) или Transport Layer Security
  9. Щелкните Создать подключение.
  10. На странице основы каталога введите имя для внешнего каталога. Внешний каталог зеркально отражает базу данных во внешней системе данных, чтобы можно было запрашивать и управлять доступом к данным в этой базе данных с помощью Azure Databricks и каталога Unity.
  11. (Необязательно) Щелкните «Проверить подключение», чтобы убедиться, что оно работает.
  12. Щелкните Создать каталог.
  13. На странице Access выберите рабочие области, в которых пользователи могут получить доступ к созданному каталогу. Вы можете выбрать Предоставить доступ ко всем рабочим областямили щелкнуть Назначить рабочим областям, выбрать рабочие области, а затем щелкнуть Назначить.
  14. Измените владельца , который сможет управлять доступом ко всем объектам в каталоге. Начните вводить участника в текстовом поле, затем выберите участника в представленных результатах.
  15. Выдайте привилегию для каталога. Нажмите кнопку "Предоставить":
    1. Укажите субъекты , у которых будет доступ к объектам в каталоге. Начните вводить участника в текстовом поле, затем выберите участника в представленных результатах.
    2. Выберите предустановки привилегий для предоставления каждому субъекту. Всем пользователям учетной записи назначается BROWSE по умолчанию.
      • Выберите средство чтения данных в раскрывающемся меню, чтобы предоставить read привилегии для объектов в каталоге.
      • Выберите редактор данных в раскрывающемся меню, чтобы предоставить привилегии read и modify на объекты в каталоге.
      • Вручную выберите привилегии для предоставления.
    3. Нажмите Grant.
  16. Нажмите кнопку Далее.
  17. На странице "Метаданные" укажите пары "ключ-значение" для тегов. Дополнительные сведения см. в статье Применение тегов к защищаемым объектам каталога Unity.
  18. (Необязательно) Добавьте комментарий.
  19. Нажмите кнопку Сохранить.

SQL

Выполните следующую команду в записной книжке или редакторе sql-запросов Databricks:

CREATE CONNECTION <connection-name> TYPE oracle
OPTIONS (
  host '<hostname>',
  port '<port>',
  user '<user>',
  password '<password>',
  encryption_protocol '<protocol>' -- optional
);

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

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

Если необходимо использовать текст без форматирования в командах SQL записной книжки, избегайте его обрезания, экранируя специальные символы, такие как $ с помощью \. Например, \$.

Для получения информации о настройке секретов см. раздел Управление секретами.

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

Note

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

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

Чтобы создать внешний каталог, можно использовать обозреватель каталогов или команду SQL CREATE FOREIGN CATALOG в записной книжке Azure Databricks или редакторе запросов SQL. Для создания каталога можно также использовать REST API Databricks или интерфейс командной строки Databricks. POST /api/2.1/unity-catalog/catalogs и команды Unity Catalog .

Необходимые разрешения:CREATE CATALOG разрешение на хранилище метаданных и либо владение подключением, либо привилегия CREATE FOREIGN CATALOG на подключение.

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

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

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

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

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

SQL

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

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

Поддерживаемые продвижения

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

Pushdown Поддерживаемые вычислительные ресурсы
Aggregates Поддерживаются Все вычислительные ресурсы
Cast Поддерживаются Все вычислительные ресурсы
Содержит, Начинается с, Заканчивается на Поддерживаются Все вычислительные ресурсы
Filters Поддерживаются Все вычислительные ресурсы
Limit Поддерживаются Все вычислительные ресурсы
Offset Поддерживаются Все вычислительные ресурсы
Projections Поддерживаются Все вычислительные ресурсы
Присоединения Поддерживаются Databricks Runtime 17.2 и более поздние версии, а также SQL-склады 2025.30 и более поздние версии.

Сопоставления типов данных

При выгрузке данных из Oracle в Spark, типы данных отображаются следующим образом:

Тип Oracle Тип Spark
Временная метка с TIMEZONE, Временная метка с местной TIMEZONE TimestampType
ДАТА, ВРЕМЕННАЯ МЕТКА TimestampType/TimestampNTZType*
ЧИСЛО, ВЕЩЕСТВЕННОЕ ЧИСЛО DecimalType**
ДВОИЧНЫЙ FLOAT FloatType
ДВОИЧНОЕ ДВОЙНОЕ DoubleType
CHAR, NCHAR, VARCHAR2, NVARCHAR2 StringType

* ДАТА и TIMESTAMP сопоставляются с Spark TimestampType, если spark.sql.timestampType = TIMESTAMP_LTZ (по умолчанию). Они сопоставляются с TimestampNTZType, если spark.sql.timestampType = TIMESTAMP_NTZ.

** ЧИСЛО без указания точности будет сопоставлено с DecimalType(38, 10), так как в Spark отсутствует поддержка для чисел с плавающей точкой типа Decimal.

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