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


Федеративные запросы (Федерация Lakehouse)

применимо:отмечено Databricks SQL отмечено Databricks Runtime 13.3 LTS и выше отмечено Только для каталога Unity

Федерация запросов позволяет Azure Databricks выполнять запросы к данным, обслуживаемыми другими хранилищами метаданных Azure Databricks, а также многими сторонними системами управления базами данных (СУБД), такими как PostgreSQL, mySQLи Snowflake.

Чтобы запросить данные из другой системы, необходимо:

  1. Создайте внешнее подключение. Это регистрирует конкретный федеративный сервер в каталоге Unity и устанавливает средства для взаимодействия с ним, например URL-адрес, порт и используемые учетные данные.
  2. Регистрация внешних каталогов с федеративного сервера с помощью каталога Unity
  3. предоставить пользователям доступ к зарубежным каталогам. Это можно сделать на уровне каталога, схемы или таблицы, так как это можно сделать с обычными защищаемыми объектами.

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

Внешнее подключение

Внешнее подключение — это защищаемый объект каталога Unity, который идентифицирует внешний сервер. В рамках CREATE CONNECTIONукажите URL-адрес, на котором можно получить доступ к серверу.

Кроме того, необходимо указать такие параметры, как имя пользователя и пароль или другая принятая проверка подлинности, которую Azure Databricks будет использовать для обмена данными.

Внешний каталог

Имея внешнее подключение, которое поддерживает три уровня пространств имен (catalog/database.schema.table), можно зарегистрировать все каталоги с помощью каталога Unity с помощью команды CREATE FOREIGN CATALOG. Azure Databricks сохраняет определение схем каталога и их отношения в синхронизации с внешним источником.

Примеры

-- Create a postgresql connection
> CREATE CONNECTION postgresql_connection
    TYPE POSTGRESQL
    OPTIONS (
       host 'qf-postgresql-demo.xxxxxx.us-west-2.rds.amazonaws.com',
       port '5432',
       user 'postgresql_user',
       password 'password123');

-- Alternatively create a postgresql connection with secret scope
> CREATE CONNECTION postgresql_connection
    TYPE POSTGRESQL
    OPTIONS (
       host 'qf-postgresql-demo.xxxxxx.us-west-2.rds.amazonaws.com',
       port '5432',
       user secret('secrets.r.us', 'postgresUser'),
       password secret('secrets.r.us', 'postgresPassword'));

-- Expose the "postgresdb" database with schemas and tables postgresql_user can access.
> CREATE FOREIGN CATALOG postgresql_catalog
    USING CONNECTION postgresql_connection
    OPTIONS (database 'postgresdb');

-- Execute a query across tables in the above catalog, schema, and table.
> SELECT * FROM postgresql_catalog.a_schema.table1
  UNION ALL
  SELECT * FROM default.postgresql_schema.table2
  UNION ALL
  SELECT * FROM default.postgresql.mytable
  UNION ALL
  SELECT local_table;
  ...