Выполнение федеративных запросов в PostgreSQL
В этой статье описывается, как настроить федерацию Lakehouse для выполнения федеративных запросов на запросы запуска данных PostgreSQL, которые не управляются Azure Databricks. Дополнительные сведения о Федерации Lakehouse см. в статье "Что такое Федерация Lakehouse?".
Чтобы подключиться к запросам запуска в базе данных PostgreSQL с помощью Федерации Lakehouse, необходимо создать следующее в хранилище метаданных каталога Azure Databricks Unity:
- Подключение к запросам запуска в базе данных PostgreSQL.
- Внешний каталог , который отражает запросы запуска в базе данных PostgreSQL в каталоге Unity, чтобы использовать синтаксис запросов каталога Unity и средства управления данными для управления доступом пользователей Azure Databricks к базе данных.
Подготовка к работе
Требования к рабочей области:
- Рабочая область включена для каталога Unity.
Требования к вычислениям:
- Сетевое подключение из кластера среды выполнения Databricks или хранилища SQL к целевым системам баз данных. См . рекомендации по сети для Федерации Lakehouse.
- Кластеры Azure Databricks должны использовать Databricks Runtime 13.3 LTS или более поздней версии и общий или единый режим доступа пользователей.
- Хранилища SQL должны быть профессиональными или бессерверными и должны использовать 2023.40 или более поздней версии.
Необходимые разрешения:
- Чтобы создать подключение, необходимо быть администратором хранилища метаданных или пользователем с
CREATE CONNECTION
привилегиями в хранилище метаданных каталога Unity, подключенном к рабочей области. - Чтобы создать внешний каталог, необходимо иметь
CREATE CATALOG
разрешение на хранилище метаданных и быть владельцем подключения или иметьCREATE FOREIGN CATALOG
привилегии для подключения.
Дополнительные требования к разрешениям указываются в каждом разделе на основе задач, который следует выполнить.
Создание подключения
Подключение задает путь и учетные данные для доступа к внешней системе базы данных. Чтобы создать подключение, можно использовать обозреватель каталогов или команду SQL в записной книжке Azure Databricks или CREATE CONNECTION
редакторе sql-запросов Databricks.
Примечание.
Для создания подключения можно также использовать REST API Databricks или интерфейс командной строки Databricks. См. статью POST /api/2.1/unity-catalog/connections и команды каталога Unity.
Необходимые разрешения: администратор хранилища метаданных или пользователь с привилегиями CREATE CONNECTION
.
Обозреватель каталогов
В рабочей области Azure Databricks щелкните "Каталог".
В верхней части области каталога щелкните значок "Добавить " и выберите " Добавить подключение " в меню.
Кроме того, на странице быстрого доступа нажмите кнопку "Внешние данные > ", перейдите на вкладку "Подключения " и нажмите кнопку "Создать подключение".
Введите понятное имя подключения.
Выберите тип подключения PostgreSQL.
Введите следующие свойства подключения для экземпляра PostgreSQL.
- Узел: например,
postgres-demo.lb123.us-west-2.rds.amazonaws.com
- Порт: например,
5432
- Пользователь: например,
postgres_user
- Пароль: например,
password123
- Узел: например,
(Необязательно) Нажмите кнопку "Проверить подключение" , чтобы убедиться, что она работает.
(Необязательно) Добавьте комментарий.
Нажмите кнопку Создать.
SQL
Выполните следующую команду в записной книжке или редакторе sql-запросов Databricks.
CREATE CONNECTION <connection-name> TYPE postgresql
OPTIONS (
host '<hostname>',
port '<port>',
user '<user>',
password '<password>'
);
Рекомендуется использовать секреты Azure Databricks вместо строк открытого текста для конфиденциальных значений, таких как учетные данные. Например:
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>')
)
Сведения о настройке секретов см. в разделе "Управление секретами".
Создание внешнего каталога
Внешний каталог зеркально отражает базу данных во внешней системе данных, чтобы можно было запрашивать и управлять доступом к данным в этой базе данных с помощью Azure Databricks и каталога Unity. Чтобы создать внешний каталог, вы используете подключение к источнику данных, который уже определен.
Чтобы создать внешний каталог, можно использовать обозреватель каталогов или CREATE FOREIGN CATALOG
команду SQL в записной книжке Azure Databricks или редакторе запросов SQL.
Примечание.
Для создания каталога можно также использовать REST API Databricks или интерфейс командной строки Databricks. См. статью POST /api/2.1/unity-catalog/catalogs и команды каталога Unity.
Необходимые разрешения: CREATE CATALOG
разрешение на хранилище метаданных и право владения подключением или CREATE FOREIGN CATALOG
привилегией подключения.
Обозреватель каталогов
В рабочей области Azure Databricks щелкните каталог , чтобы открыть обозреватель каталогов.
В верхней части области каталога щелкните значок "Добавить " и выберите " Добавить каталог " в меню.
Кроме того, на странице быстрого доступа нажмите кнопку "Каталоги" и нажмите кнопку "Создать каталог ".
Следуйте инструкциям по созданию внешних каталогов в каталогах 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:
- Фильтры
- Проекции.
- Лимит
- Функции: частичные, только для выражений фильтров. (Строковые функции, математические функции и другие прочие функции, такие как Псевдоним, Приведение, SortOrder)
Следующие pushdown поддерживаются в Databricks Runtime 13.3 LTS и выше, а также в хранилищах SQL:
- Следующие функции агрегирования: MIN, MAX, COUNT, SUM, AVG, VAR_POP, VAR_SAMP, STDDEV_POP, STDDEV_SAMP, MAX, COVAR_POP, COVAR_SAMP, CORR, REGR_INTERCEPT, REGR_R2, REGR_SLOPE, REGR_SXY
- Следующие логические функции: =, , =, <=, =, = <>><>
- Следующие математические функции (не поддерживаются при отключении ANSI): +, -, *, %, /
- Другие операторы | и~
- Сортировка при использовании с ограничением
Следующие pushdown не поддерживаются:
- Объединения
- Функции Windows
Сопоставление типов данных
При чтении из PostgreSQL в Spark типы данных сопоставляются следующим образом:
Тип PostgreSQL | Тип Spark |
---|---|
numeric | DecimalType |
int2 | ShortType |
int4 (если он не подписан) | IntegerType |
int8, oid, xid, int4 (если подписан) | LongType |
float4 | FloatType |
двойная точность, float8 | DoubleType |
char | CharType |
name, varchar, tid | VarcharType |
bpchar, символы разными, json, money, point, super, text | 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 |
Тип массива Postgresql** | ArrayType |
*При чтении из Postgresql Postgresql Postgresql Timestamp
сопоставляется с Spark TimestampType
, если preferTimestampNTZ = false
(по умолчанию). Postgresql Timestamp
сопоставляется с TimestampNTZType
значением if preferTimestampNTZ = true
.
**Поддерживаются ограниченные типы массивов.