Поделиться через


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

Внимание

Эта функция предоставляется в режиме общедоступной предварительной версии.

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

Чтобы подключиться к запросам запуска в базе данных Amazon Redshift с помощью Федерации Lakehouse, необходимо создать в хранилище метаданных каталога Unity Azure Databricks:

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

Подготовка к работе

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

  • Рабочая область включена для каталога Unity.

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

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

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

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

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

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

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

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

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

  1. В рабочей области Azure Databricks щелкните Значок каталога"Каталог".
  2. В левой области разверните меню "Внешние данные" и выберите "Подключения".
  3. Нажмите Create connection (Создать подключение).
  4. Введите понятное имя подключения.
  5. Выберите типподключения Redshift.
  6. Введите следующие свойства подключения для экземпляра Redshift.
    • Узел: например, redshift-demo.us-west-2.redshift.amazonaws.com
    • Порт: например, 5439
    • Пользователь: например, redshift_user
    • Пароль: например, password123
  7. (Необязательно) Нажмите кнопку "Проверить подключение" , чтобы убедиться, что она работает.
  8. (Необязательно) Добавьте комментарий.
  9. Нажмите кнопку Создать.

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>')
)

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

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

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

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

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

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

  1. В рабочей области Azure Databricks щелкните Значок каталогакаталог , чтобы открыть обозреватель каталогов.
  2. В правом верхнем углу нажмите кнопку "Создать каталог".
  3. Следуйте инструкциям по созданию внешних каталогов в каталогах create.

SQL

Выполните следующую команду SQL в редакторе запросов записной книжки или 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>');

Поддерживаемые pushdowns

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

  • Фильтры
  • Проекции.
  • Лимит
  • Объединения
  • Агрегаты (среднее, количество, макс, мин, StddevPop, StddevSamp, Sum, VarianceSamp)
  • Функции (строковые функции и другие другие функции, такие как Псевдоним, Приведение, SortOrder)
  • Сортировка

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

  • Функции Windows

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

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

Тип Redshift Тип Spark
numeric DecimalType
int2, int4 IntegerType
int8, oid, xid LongType
float4 FloatType
двойная точность, float8, деньги DoubleType
bpchar, char, символ переменный, имя, супер, текст, tid, varchar StringType
bytea, geometry, varbyte BinaryType
bit, bool BooleanType
Дата DateType
tabstime, time, time with time zone, timetz, timetz, timestamp with timestamp with timestamp, timestamptz, timestamptz, timestamptz без часового пояса* TimestampType/TimestampNTZType

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