Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Область применения:SQL Server
В этой статье объясняется, как использовать PolyBase в экземпляре SQL Server для запроса внешних данных в MongoDB.
Требования
Установите PolyBase в Windows.
Перед тем, как создать учетные данные, область действия которых ограничена базой данных, создайте главный ключ базы данных (DMK) для их защиты. Дополнительные сведения см. в статье CREATE MASTER KEY.
Настройка внешнего источника данных MongoDB
Чтобы запросить данные из источника данных MongoDB, необходимо создать внешние таблицы для ссылки на внешние данные. Этот раздел содержит пример кода для создания таких внешних таблиц.
В рамках этого раздела используются следующие команды Transact-SQL:
- СОЗДАТЬ УЧЕТНЫЕ ДАННЫЕ В ПРЕДЕЛАХ БАЗЫ ДАННЫХ
- СОЗДАТЬ ВНЕШНИЙ ИСТОЧНИК ДАННЫХ
- СОЗДАТЬ ВНЕШНЮЮ ТАБЛИЦУ
- СОЗДАНИЕ СТАТИСТИКИ
Создайте учетные данные на уровне базы данных для доступа к источнику MongoDB.
Следующий скрипт создает учетные данные с областью базы данных. Перед запуском скрипта обновите его для вашей среды:
- Замените
<credential_name>на имя для учетных данных. - Замените
<username>именем пользователя для внешнего источника. - Замените
<password>соответствующим паролем.
CREATE DATABASE SCOPED CREDENTIAL [<credential_name>] WITH IDENTITY = '<username>', SECRET = '<password>';Внимание
Соединитель ODBC MongoDB для PolyBase поддерживает только обычную проверку подлинности, но не проверку подлинности Kerberos.
- Замените
Создайте внешний источник данных.
Следующий скрипт создает внешний источник данных. Для справки см. раздел 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 } ]) [ ; ]- Обновите местоположение. Задайте
Запрос внешней схемы в MongoDB.
Используйте sp_data_source_objects для обнаружения схемы коллекции (столбцов) для коллекций MongoDB, содержащих массивы, и вручную создайте внешнюю таблицу. Хранимая
sp_data_source_table_columnsпроцедура также автоматически выполняет преобразование в плоскую структуру с помощью драйвера ODBC PolyBase для MongoDB.Создайте внешнюю таблицу.
Чтобы предоставить схему вручную, рассмотрим следующий пример сценария, чтобы создать внешнюю таблицу. Справочную информацию см. в разделе 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' );Необязательно. Создание статистики во внешней таблице.
Создайте статистику по столбцам внешней таблицы, особенно для соединений, фильтров и агрегатов, для оптимальной производительности запросов.
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. У каждого ресторана есть вложенное поле адреса и список оценок, полученных этим рестораном в разные дни. На следующем рисунке показан типичный ресторан с вложенным адресом и вложенными и повторяющимися оценками.
Адреса объектов сплощены следующим образом:
- Вложенное поле
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
);