Бөлісу құралы:


Настройка PolyBase для доступа к внешним данным в MongoDB

Область применения:SQL Server

В этой статье объясняется, как использовать PolyBase в экземпляре SQL Server для запроса внешних данных в MongoDB.

Требования

Установите PolyBase в Windows.

Перед тем, как создать учетные данные, область действия которых ограничена базой данных, создайте главный ключ базы данных (DMK) для их защиты. Дополнительные сведения см. в статье CREATE MASTER KEY.

Настройка внешнего источника данных MongoDB

Чтобы запросить данные из источника данных MongoDB, необходимо создать внешние таблицы для ссылки на внешние данные. Этот раздел содержит пример кода для создания таких внешних таблиц.

В рамках этого раздела используются следующие команды Transact-SQL:

  1. Создайте учетные данные на уровне базы данных для доступа к источнику MongoDB.

    Следующий скрипт создает учетные данные с областью базы данных. Перед запуском скрипта обновите его для вашей среды:

    • Замените <credential_name> на имя для учетных данных.
    • Замените <username> именем пользователя для внешнего источника.
    • Замените <password> соответствующим паролем.
    CREATE DATABASE SCOPED CREDENTIAL [<credential_name>]
    WITH IDENTITY = '<username>',
         SECRET = '<password>';
    

    Внимание

    Соединитель ODBC MongoDB для PolyBase поддерживает только обычную проверку подлинности, но не проверку подлинности Kerberos.

  2. Создайте внешний источник данных.

    Следующий скрипт создает внешний источник данных. Для справки см. раздел CREATE EXTERNAL DATA SOURCE. Перед запуском скрипта обновите его для вашей среды:

    • Обновите местоположение. Задайте <server> и <port> для своей среды.
    • Замените <credential_name> именем учетных данных, созданных на предыдущем шаге.
    • При необходимости укажите PUSHDOWN = ON или PUSHDOWN = OFF, если хотите указать вычисление pushdown на внешний источник.
    CREATE EXTERNAL DATA SOURCE external_data_source_name
    WITH (LOCATION = '<mongodb://<server>[:<port>]>'
    [ [ , ] CREDENTIAL = <credential_name> ]
    [ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]]
    [ [ , ] PUSHDOWN = { ON | OFF } ])
    [ ; ]
    
  3. Запрос внешней схемы в MongoDB.

    Используйте sp_data_source_objects для обнаружения схемы коллекции (столбцов) для коллекций MongoDB, содержащих массивы, и вручную создайте внешнюю таблицу. Хранимая sp_data_source_table_columns процедура также автоматически выполняет преобразование в плоскую структуру с помощью драйвера ODBC PolyBase для MongoDB.

  4. Создайте внешнюю таблицу.

    Чтобы предоставить схему вручную, рассмотрим следующий пример сценария, чтобы создать внешнюю таблицу. Справочную информацию см. в разделе CREATE EXTERNAL TABLE.

    Перед запуском скрипта обновите его для вашей среды:

    • Обновите поля с их именем, сортировкой и, если они являются коллекциями, укажите имя коллекции и имя поля. В этом примере friends является пользовательским типом данных.

    • Обновите местоположение. Задайте имя базы данных и имя таблицы. Имена из трех частей не допускаются, поэтому её нельзя создать для system.profile таблицы. Кроме того, невозможно указать представление, так как он не может получить метаданные из него.

    • Обновите источник данных, указав имя того, который вы создали на предыдущем шаге.

    CREATE EXTERNAL TABLE [MongoDbRandomData]
    (
        [_id] NVARCHAR (24) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
        [RandomData_friends_id] INT,
        [RandomData_tags] NVARCHAR (MAX) COLLATE SQL_Latin1_General_CP1_CI_AS
    )
    WITH (
        DATA_SOURCE = [MongoDb],
        LOCATION = 'MyDb.RandomData'
    );
    
  5. Необязательно. Создание статистики во внешней таблице.

    Создайте статистику по столбцам внешней таблицы, особенно для соединений, фильтров и агрегатов, для оптимальной производительности запросов.

    CREATE STATISTICS statistics_name
        ON customer(C_CUSTKEY)
        WITH FULLSCAN;
    

Параметры подключения MongoDB

Сведения о параметрах подключения MongoDB см. в документации по MongoDB в разделе Connection String URI Format (Формат URI строки подключения).

Уплощение

Развёртывание включено для вложенных и повторяющихся данных из коллекций документов MongoDB. Необходимо включить create an external table и явно указать реляционную схему для коллекций документов MongoDB, которые могут содержать вложенные или повторяющиеся данные.

Вложенные и повторяющиеся типы данных JSON смощены следующим образом:

  • Объект: коллекция неупорядоченных ключей и значений, заключенная в фигурные скобки (вложенные данные)

    • SQL Server создаст столбец таблицы для каждого ключа объекта.

      • Имя столбца: <objectname>_<keyname>
  • Массив: упорядоченные значения, разделенные запятыми и заключенные в квадратные скобки (повторяющиеся данные)

    • SQL Server добавит новую строку таблицы для каждого элемента массива.

    • SQL Server создаст столбец для каждого массива, чтобы хранить индекс элементов массива.

      • Имя столбца: <arrayname>_index

      • Тип данных: bigint

Этот метод может вызвать несколько проблем, в том числе:

  • Пустое повторяющееся поле маскирует данные в неструктурированных полях одной записи.

  • Несколько повторяющихся полей увеличивают количество созданных строк.

Например, SQL Server оценивает коллекцию данных о ресторанах из примера MongoDB, хранящуюся в нереляционном формате JSON. У каждого ресторана есть вложенное поле адреса и список оценок, полученных этим рестораном в разные дни. На следующем рисунке показан типичный ресторан с вложенным адресом и вложенными и повторяющимися оценками.

Снимок экрана: выравнивание MongoDB.

Адреса объектов сплощены следующим образом:

  • Вложенное поле restaurant.address.building меняется на restaurant.address_building.
  • Вложенное поле restaurant.address.coord меняется на restaurant.address_coord.
  • Вложенное поле restaurant.address.street меняется на restaurant.address_street.
  • Вложенное поле restaurant.address.zipcode меняется на restaurant.address_zipcode.

Уровни массива упрощены следующим образом:

дата_оценок оценки_оценка счет игры
1393804800000 А 2
1378857600000 А 6
135898560000 А 10
1322006400000 А 9
1299715200000 Б 14

Подключение Cosmos DB

Вы можете использовать API Mongo Cosmos DB и соединитель MongoDB PolyBase для создания внешней таблицы для экземпляра Cosmos DB. Выполните те же действия, которые описаны ранее. Убедитесь, что учетные данные базы данных, адрес сервера, порт и строка расположения соответствуют серверу Cosmos DB.

Примеры

В следующем примере создается внешний источник данных со следующими параметрами:

Параметр Значение
Имя external_data_source_name
Служба mongodb0.example.com
Экземпляр 27017
Набор реплик myRepl
TLS true
Выталкивающее вычисление ON
CREATE EXTERNAL DATA SOURCE external_data_source_name
WITH (
    LOCATION = 'mongodb://mongodb0.example.com:27017',
    PUSHDOWN = ON,
    CONNECTION_OPTIONS = 'replicaSet = myRepl; tls = true',
    CREDENTIAL = credential_name
);