Configurer PolyBase pour accéder à des données externes dans MongoDB
S'applique à : SQL Server
L’article explique comment utiliser PolyBase sur une instance SQL Server pour interroger des données externes dans MongoDB.
Prérequis
Si vous n’avez pas installé PolyBase, consultez Installation de PolyBase.
Avant que vous ne créiez des informations d’identification incluses dans l’étendue de la base de données, la base de données doit avoir une clé principale pour protéger les informations d’identification. Pour plus d’informations, consultez CREATE MASTER KEY.
Configurer une source de données externes MongoDB
Pour interroger les données d’une source de données MongoDB, vous devez créer des tables externes pour référencer les données externes. Cette section fournit un exemple de code pour créer ces tables externes.
Les commandes Transact-SQL suivantes sont utilisées dans cette section :
- CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
- CREATE EXTERNAL DATA SOURCE (Transact-SQL)
- CREATE EXTERNAL TABLE (Transact-SQL)
- CREATE STATISTICS (Transact-SQL)
Créez des informations d’identification incluses dans l’étendue de la base de données pour accéder à la source MongoDB.
Le script suivant crée des informations d’identification délimitées à la base de données. Avant d’exécuter le script, mettez-le à jour pour votre environnement :
- Remplacez
<credential_name>
par le nom des informations d‘identification. - Remplacez
<username>
par le nom d’utilisateur de la source externe. - Remplacez
<password>
par le mot de passe approprié.
CREATE DATABASE SCOPED CREDENTIAL [<credential_name>] WITH IDENTITY = '<username>', Secret = '<password>';
Important
Le connecteur ODBC MongoDB pour Polybase prend uniquement en charge l’authentification de base (l’authentification Kerberos n’est pas prise en charge).
- Remplacez
Créez une source de données externe.
Le script suivant crée la source de données externe. Pour référence, consultez CREATE EXTERNAL DATA SOURCE. Avant d’exécuter le script, mettez-le à jour pour votre environnement :
- Mettez à jour l’emplacement. Définissez
<server>
et<port>
pour votre environnement. - Remplacez
<credential_name>
par le nom des informations d‘identification que vous avez créées à l’étape précédente. - Vous pouvez également indiquer
PUSHDOWN = ON
ouPUSHDOWN = OFF
pour spécifier le calcul pushdown sur la source externe.
CREATE EXTERNAL DATA SOURCE external_data_source_name WITH (LOCATION = '<mongodb://<server>[:<port>]>' [ [ , ] CREDENTIAL = <credential_name> ] [ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]] [ [ , ] PUSHDOWN = { ON | OFF } ]) [ ; ]
- Mettez à jour l’emplacement. Définissez
Interrogez le schéma externe dans MongoDB.
Vous devez utiliser l’extension de virtualisation des données pour Azure Data Studio afin de connecter et générer une instruction CREATE EXTERNAL TABLE basée sur le schéma détecté par le pilote ODBC PolyBase pour le pilote MongoDB. Vous pouvez également personnaliser manuellement un script en fonction de la sortie de la procédure stockée système sp_data_source_objects (Transact-SQL). L’extension de virtualisation des données pour Azure Data Studio et
sp_data_source_table_columns
utilise les mêmes procédures stockées internes pour interroger le schéma externe.Pour créer des tables externes dans des collections MongoDB qui contiennent des tableaux, il est recommandé d’utiliser l’extension Data Virtualization pour Azure Data Studio. Les actions d’aplatissement sont effectuées automatiquement par le pilote. La procédure stockée
sp_data_source_table_columns
effectue également automatiquement l’aplatissement via le pilote ODBC PolyBase pour MongoDB.Créez une table externe.
Si vous utilisez l’extension Data Virtualization pour Azure Data Studio, vous pouvez ignorer cette étape, car l’instruction CREATE EXTERNAL TABLE est générée pour vous. Pour fournir le schéma manuellement, tenez compte de l’exemple de script suivant pour créer une table externe. Pour référence, consultez CREATE EXTERNAL TABLE.
Avant d’exécuter le script, mettez-le à jour pour votre environnement :
- Mettez à jour les champs avec leur nom et leur classement. S’il s’agit de collections, spécifiez le nom de la collection et le nom du champ. Dans l’exemple,
friends
est un type de données personnalisé. - Mettez à jour l’emplacement. Définissez le nom de la base de données et le nom de la table. Notez que les noms en trois parties ne sont pas autorisés. Vous ne pouvez donc pas en créer pour la table
system.profile
. Vous ne pouvez pas non plus spécifier une vue, car elle ne pourra pas obtenir les métadonnées à partir de celle-ci. - Remplacez le nom de la source de données par le nom de celle que vous avez créée à l’étape précédente.
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 ( LOCATION='MyDb.RandomData', DATA_SOURCE=[MongoDb])
- Mettez à jour les champs avec leur nom et leur classement. S’il s’agit de collections, spécifiez le nom de la collection et le nom du champ. Dans l’exemple,
Facultatif : Créez des statistiques sur une table externe.
Pour des performances de requêtes optimales, nous vous recommandons de créer des statistiques sur les colonnes de table externe, en particulier celles utilisées pour les jointures, les filtres et les agrégats.
CREATE STATISTICS statistics_name ON customer (C_CUSTKEY) WITH FULLSCAN;
Important
Une fois que vous avez créé une source de données externes, vous pouvez utiliser la commande CREATE EXTERNAL TABLE afin de créer une table requêtable sur cette source.
Pour obtenir un exemple, consultez Créer une table externe pour MongoDB.
Options de connexion MongoDB
Pour plus d’informations sur les options de connexion MongoDB, consultez la documentation MongoDB sur le format d’URI de la chaîne de connexion.
Aplanissement
L’aplanissement est activé pour les données imbriquées et répétées depuis des collections de document MongoDB. L’utilisateur doit activer create an external table
et spécifier explicitement un schéma relationnel sur des collections de documents MongoDB dont les données peuvent être imbriquées et/ou répétées.
Les types de données JSON imbriquées/répétées seront aplanis comme suit :
Objets : collection de clés/valeurs non ordonnées mises entre accolades (imbriquées)
SQL Server crée une colonne de table pour chaque clé d’objet
- Nom de colonne : objectname_keyname
Tableau : valeurs ordonnées, séparées par des virgules, mises entre crochets (répétées)
SQL Server ajoute une nouvelle ligne de table pour chaque élément de tableau
SQL Server crée une colonne par tableau pour stocker l’index d’élément de tableau
Nom de colonne : arrayname_index
Type de données : bigint
Cette technique peut occasionner plusieurs problèmes, notamment les deux suivants :
Un champ répété vide masque de facto les données contenues dans les champs plats du même enregistrement
La présence de plusieurs champs répétés peut entraîner une explosion du nombre de lignes générées
À titre d’exemple, SQL Server évalue la collection de restaurants de l’exemple de jeu de données MongoDB stockée dans un format JSON non relationnel. Chaque restaurant dispose d’un champ d’adresse imbriqué et d’un tableau de notes (« grades ») attribuées à des jours différents. La figure ci-dessous illustre un restaurant type avec une adresse imbriquée et des notes imbriquées/répétées.
L’adresse de l’objet sera aplanie comme suit :
- Le champ imbriqué
restaurant.address.building
devientrestaurant.address_building
- Le champ imbriqué
restaurant.address.coord
devientrestaurant.address_coord
- Le champ imbriqué
restaurant.address.street
devientrestaurant.address_street
- Le champ imbriqué
restaurant.address.zipcode
devientrestaurant.address_zipcode
Les notes du tableau seront aplanies comme suit :
grades_date | grades_grade | games_score |
---|---|---|
1393804800000 | A | 2 |
1378857600000 | A | 6 |
135898560000 | A | 10 |
1322006400000 | A | 9 |
1299715200000 | G | 14 |
Connexion Cosmos DB
À l’aide de l’API Mongo Cosmos DB et du connecteur PolyBase MongoDB, vous pouvez créer une table externe pour une instance Cosmos DB. Pour cela, vous devez suivre les étapes listées ci-dessus. Vérifiez que les informations d’identification incluses dans l’étendue de la base de données, l’adresse du serveur, le port et la chaîne d’emplacement sont bien ceux du serveur Cosmos DB.
Exemples
L’exemple suivant crée une source de données externe avec les paramètres suivants :
Paramètre | Valeur |
---|---|
Nom | external_data_source_name |
Service | mongodb0.example.com |
Instance | 27017 |
Jeu de réplicas | myRepl |
TLS | true |
Calcul pushdown | On |
CREATE EXTERNAL DATA SOURCE external_data_source_name
WITH (LOCATION = 'mongodb://mongodb0.example.com:27017',
CONNECTION_OPTIONS = 'replicaSet=myRepl; tls=true',
PUSHDOWN = ON ,
CREDENTIAL = credential_name);
Étapes suivantes
Pour plus de tutoriels sur la création de sources de données externes et de tables externes vers diverses sources de données, consultez référence PolyBase Transact-SQL.
Pour en savoir plus sur PolyBase, consultez Vue d’ensemble de SQL Server PolyBase.