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

На этой странице описывается, как настроить федерацию Lakehouse для выполнения федеративных запросов к данным Amazon Redshift, которые не управляются Azure Databricks. Дополнительные сведения о Федерации Lakehouse см. в статье "Подключение к внешним базам данных и каталогам"

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

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

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

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

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

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

  • Сетевое подключение вашего вычислительного ресурса к целевым системам баз данных. См. рекомендации по сетям для федерации Lakehouse.
  • Вычислительные ресурсы Azure Databricks должны использовать Databricks Runtime 13.3 LTS или более поздней версии, а также стандартный или выделенный режим доступа.
  • Хранилища 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 или интерфейс командной строки Databricks. См. POST /api/2.1/unity-catalog/connections и команды каталога Unity .

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

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

  1. В рабочей области Azure Databricks щелкните значок данных.Каталог.
  2. В верхней части области каталога щелкните значок " и выберите "Создать подключение" в меню.
  3. На странице сведений о подключении мастера настройки подключения введите понятное имя подключения.
  4. Выберите тип подключения Redshift.
  5. (Необязательно) Добавьте комментарий.
  6. Нажмите кнопку Далее.
  7. На странице проверки подлинности введите следующие свойства подключения для экземпляра Redshift.
    • Узел: например, redshift-demo.us-west-2.redshift.amazonaws.com
    • Порт: например, 5439
    • Пользователь: например, redshift_user
    • Пароль: например, password123
  8. (Необязательно) Отключить проверку SSL имени хоста.
  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 redshift
OPTIONS (
  host '<hostname>',
  port '<port>',
  user '<user>',
  password '<password>'
);

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

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

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

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

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 в Jupyter Notebook или в редакторе запросов SQL. Элементы в квадратных скобках необязательны. Замените значения по умолчанию:

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

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

Поддерживаются следующие pushdown функции:

  • Filters
  • Projections
  • Limit
  • Joins
  • Агрегаты (среднее, количество, макс., мин., StddevPop, StddevSamp, сумма, VariancePop, VarianceSamp)
  • Арифметические операторы (например+, -, , */)
  • Сравнение и логические операторы
  • Содержит, Начинается с, Заканчивается на, Похоже на
  • Функции (ASCII, Cast, Coalesce, Concat, Lower, LPad, Reverse, RPad, Substring с положительными литеральными позициями, Translate, Trim, Upper и другие функции, такие как Alias, SortOrder)
  • Sorting

Следующие pushdown не поддерживаются:

  • Функции окна
  • Offset

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

При чтении из Redshift в Spark типы данных сопоставляются следующим образом:

Тип Redshift Тип Spark
numeric DecimalType
int2, int4 IntegerType
int8, oid, xid LongType
float4 FloatType
double precision, float8, money DoubleType
bpchar, char, character varyingnamesupertexttidvarchar StringType
bytea, geometry, varbyte BinaryType
bit, bool BooleanType
date DateType
tabstime, time, time с часовым поясом, timetz, time без часового пояса, timestamp с часовым поясом, timestamp, timestamptz, timestamp без часового пояса* TimestampType/TimestampNTZType

*При чтении из Redshift Timestamp сопоставляется с Spark TimestampType , если infer_timestamp_ntz_type = false (по умолчанию). Redshift Timestamp сопоставляется с TimestampNTZType, если infer_timestamp_ntz_type = true.

Limitations

  • Федеративные запросы нельзя выполнять во внешних данных Amazon Redshift.