Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Crée une source de données externe pour interroger des données externes, utilisée pour les fonctionnalités de virtualisation de données et PolyBase.
Cet article fournit la syntaxe, les arguments, les notes, les autorisations et des exemples associés au produit SQL que vous choisissez.
Sélectionner un produit
Sur la ligne suivante, sélectionnez le nom du produit qui vous intéresse afin d’afficher uniquement les informations qui le concernent.
* SQL Server *
Vue d’ensemble : SQL Server 2016
Applies à : SQL Server 2016 (13.x)
Crée une source de données externe pour des requêtes PolyBase. Des sources de données externes sont utilisées pour établir la connectivité et prendre en charge ces principaux cas d’utilisation :
- Virtualisation des données et chargement des données à l’aide de PolyBase dans SQL Server
- Les opérations de chargement en bloc à l’aide de
BULK INSERTouOPENROWSET
Notes
La syntaxe de CREATE EXTERNAL DATA SOURCE varie en différentes versions de la SQL Moteur de base de données. Utilisez la liste déroulante sélecteur de version pour choisir la version de produit appropriée.
Pour afficher les fonctionnalités de SQL Server 2019 (15.x), visitez CREATE EXTERNAL DATA SOURCE.
Pour afficher les fonctionnalités de SQL Server 2022 (16.x), visitez CREATE EXTERNAL DATA SOURCE.
conventions de syntaxe Transact-SQL
Syntaxe pour SQL Server 2016
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] TYPE = { HADOOP } ]
[ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' )
[ ; ]
Les arguments
data_source_name
Spécifie le nom défini par l’utilisateur de la source de données. Le nom doit être unique dans la base de données dans SQL Server.
LOCATION = '<prefix> ://<path[:p ort]>'
Fournit le protocole de connectivité et le chemin d’accès à la source de données externe.
| Source de données externe | Préfixe de l’emplacement du connecteur | Chemin d’emplacement | Emplacements pris en charge par produit / service | Authentification |
|---|---|---|---|---|
| Cloudera CDH ou Hortonworks HDP | hdfs |
<Namenode>[:port] |
SQL Server 2016 (13.x) à SQL Server 2019 (15.x) | Authentification anonyme ou de base |
| compte stockage Azure(V2) | wasb[s] |
<container>@<storage_account>.blob.core.windows.net |
À compter de SQL Server 2016 (13.x) Espace de noms hiérarchique pas pris en charge |
clé de compte stockage Azure |
Chemin d’emplacement :
-
<Namenode>= nom de l’ordinateur, URI du service de noms ou adresse IP deNamenodedans le cluster Hadoop. PolyBase doit résoudre tous les noms DNS utilisés par le cluster Hadoop. -
port= Le port d’écoute de la source de données externe. Dans Hadoop, le port se trouve à l’aide du paramètre de configurationfs.defaultFS. La valeur par défaut est 8020. -
<container>= le conteneur du compte de stockage contenant les données. Les conteneurs racines sont en lecture seule, donc les données ne peuvent pas être réécrites sur le conteneur. -
<storage_account>= nom du compte de stockage de la ressource Azure. -
<server_name>= le nom d’hôte. -
<instance_name>= le nom de l’instance nommée SQL Server. Utilisé si vous avez SQL Server service Browser s’exécutant sur l’instance cible.
Remarques et conseils supplémentaires lors de la définition de l’emplacement :
- Le Moteur de base de données SQL Server ne vérifie pas l'existence de la source de données externe lors de la création de l'objet. Pour valider, créez une table externe à l’aide d’une source de données externe.
- Utilisez la même source de données externe pour toutes les tables lors de l’interrogation de Hadoop afin de garantir la cohérence des paramètres sémantiques de requête.
-
wasbsest facultatif, mais recommandé dans SQL Server 2016 (13.x) pour accéder à Comptes de stockage Azure, car les données seront envoyées à l’aide d’une connexion TLS/SSL sécurisée. - Pour garantir la réussite des requêtes PolyBase lors du basculement du
NamenodeHadoop, envisagez d’utiliser une adresse IP virtuelle pour leNamenodedu cluster Hadoop. Si ce n’est pas le cas, exécutez ALTER EXTERNAL DATA SOURCE pour pointer vers le nouvel emplacement.
DIPLÔME = credential_name
Spécifie les informations d’identification limitées à la base de données servant à l’authentification auprès de la source de données externe.
CREDENTIAL est requis uniquement si les données ont été sécurisées.
CREDENTIAL n’est pas requis pour les jeux de données qui autorisent l’accès anonyme.
Pour créer des informations d’identification délimitées à la base de données, consultez CREATE DATABASE SCOPED CREDENTIAL.
TYPE = * [ HADOOP ] *
Spécifie le type de source de données externe en cours de configuration. Dans SQL Server 2016, ce paramètre est toujours obligatoire et ne doit être spécifié que comme HADOOP. Prend en charge les connexions à Cloudera CDH, Hortonworks HDP ou un compte stockage Azure. Le comportement de ce paramètre est différent dans les versions ultérieures de SQL Server.
Pour obtenir un exemple d’utilisation de TYPE = HADOOP pour charger des données à partir d’un compte stockage Azure, consultez Créer la source de données externe pour accéder aux données dans stockage Azure à l’aide de l’interface wasb://
RESOURCE_MANAGER_LOCATION = *'ResourceManager_URI[:p ort]'
Configurez cette valeur facultative lors de la connexion à Cloudera CDH, Hortonworks HDP ou à un compte stockage Azure uniquement. Pour obtenir la liste complète des versions Hadoop prises en charge, consultez la configuration de la connectivité PolyBase.
Lorsque RESOURCE_MANAGER_LOCATION est défini, l’optimiseur de requête prend une décision en fonction du coût pour améliorer les performances. Une tâche MapReduce peut être utilisée pour transmettre le calcul à Hadoop. La spécification du RESOURCE_MANAGER_LOCATION peut réduire considérablement le volume de données transférées entre Hadoop et SQL Server, ce qui peut entraîner une amélioration des performances des requêtes.
Si le Resource Manager n'est pas spécifié, l'envoi (push) du calcul vers Hadoop est désactivé pour les requêtes PolyBase. Créer une source de données externe pour faire référence à Hadoop avec la transmission activée fournit un exemple concret ainsi que des instructions complémentaires.
La valeur RESOURCE_MANAGER_LOCATION n’est pas validée lorsque vous créez la source de données externe. L’entrée d’une valeur incorrecte peut entraîner un échec de requête au moment de l’exécution chaque fois que la requête push-down est tentée, car la valeur fournie ne peut pas être résolue.
Pour que PolyBase fonctionne correctement avec une source de données externe Hadoop, les ports des composants de cluster Hadoop suivants doivent être ouverts :
- Ports HDFS
- Namenode
- Datanode
- Resource Manager
- Envoi du travail
- Historique des travaux
Si le port n’est pas spécifié, la valeur par défaut est déterminée d’après le paramètre actuel de la configuration de la « connexion à hadoop ».
| Connexion Hadoop | Port de Resource Manager par défaut |
|---|---|
1 |
50300 |
2 |
50300 |
3 |
8021 |
4 |
8032 |
5 |
8050 |
6 |
8032 |
7 |
8050 |
8 |
8032 |
La table suivante présente les ports par défaut de ces composants. Il existe une dépendance de version Hadoop ainsi que la possibilité d’une configuration personnalisée qui n’utilise pas l’attribution de port par défaut.
| Composant de cluster Hadoop | Port par défaut |
|---|---|
| NameNode | 8020 |
| DataNode (transfert de données, port IPC sans privilège) | 50010 |
| DataNode (transfert de données, port IPC avec privilège) | 1019 |
| soumission de travaux Resource Manager (Hortonworks 1.3) | 50300 |
| Resource Manager soumission de travaux (Cloudera 4.3) | 8021 |
| soumission de travaux Resource Manager (Hortonworks 2.0 sur Windows, Cloudera 5.x sur Linux) | 8032 |
| soumission de travaux Resource Manager (Hortonworks 2.x, 3.0 sur Linux, Hortonworks 2.1-3 sur Windows) | 8050 |
| historique des travaux Resource Manager | 10020 |
Autorisations
Nécessite l’autorisation CONTROL sur la base de données dans SQL Server.
Verrouillage
Prend un verrou partagé sur l’objet EXTERNAL DATA SOURCE.
Sécurité
PolyBase prend en charge l’authentification basée sur le proxy pour la plupart de ces sources de données externes. Créez des informations d’identification au niveau de la base de données pour créer le compte proxy.
Exemples
Important
Pour plus d’informations sur l’installation et l’activation de PolyBase, consultez Installer PolyBase sur Windows
R. Créer une source de données externe pour faire référence à Hadoop
Pour créer une source de données externe afin de référencer votre cluster Hortonworks HDP ou Cloudera CDH Hadoop, spécifiez le nom de l’ordinateur ou l’adresse IP du port et du Namenode Hadoop.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://10.10.10.10:8050'
);
B. Créer une source de données externe pour faire référence à Hadoop avec transmission activée
Spécifiez l’option RESOURCE_MANAGER_LOCATION pour activer le calcul transmis à Hadoop pour des requêtes PolyBase. Une fois activé, PolyBase prend une décision basée sur les coûts pour déterminer si le calcul de la requête doit être poussé vers Hadoop.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://10.10.10.10:8020',
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);
Chapitre C. Créer une source de données externe pour faire référence à Hadoop sécurisé par Kerberos
Pour vérifier si le cluster Hadoop est sécurisé par Kerberos, regardez la valeur de la propriété hadoop.security.authentication dans Hadoop core-site.xml. Pour faire référence à un cluster Hadoop sécurisé par Kerberos, vous devez spécifier des informations d’identification limitées à la base de données qui contiennent votre nom d’utilisateur et votre mot de passe Kerberos. La clé principale de la base de données est utilisée pour chiffrer le secret des informations d’identification limitées à la base de données.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Kerberos user name and password.
CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
WITH IDENTITY = '<hadoop_user_name>',
SECRET = '<hadoop_password>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://10.10.10.10:8050',
CREDENTIAL = HadoopUser1,
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);
D. Créer une source de données externe pour accéder aux données dans stockage Azure à l’aide de l’interface wasb://
Dans cet exemple, la source de données externe est un compte de stockage Azure V2 nommé logs. Le conteneur de stockage est nommé daily. La source de données externe stockage Azure concerne uniquement le transfert de données. Elle ne prend pas en charge le pushdown de prédicats. Les espaces de noms hiérarchiques ne sont pas pris en charge lors de l’accès aux données via l’interface wasb:// .
Cet exemple montre comment créer les informations d’identification délimitées à la base de données pour l’authentification auprès d’un compte de stockage Azure V2. Spécifiez la clé de compte stockage Azure dans le secret des informations d’identification de la base de données. Vous pouvez spécifier n'importe quelle chaîne dans l'identité d'informations d'identification délimitée à la base de données, car elle n'est pas utilisée lors de l'authentification pour stockage Azure. Lors de la connexion au stockage Azure via wasb ou wasbs, l’authentification doit être effectuée avec une clé de compte de stockage, et non avec une signature d’accès partagé (SAP).
Dans SQL Server 2016 (13.x), TYPE doit être défini sur HADOOP même lors de l’accès à stockage Azure.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH IDENTITY = '<my_account>',
SECRET = '<azure_storage_account_key>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
TYPE = HADOOP,
LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
CREDENTIAL = AzureStorageCredential
);
Contenu connexe
Vue d’ensemble : SQL Server 2017
Applies à : SQL Server 2017 (14.x)
Crée une source de données externe pour des requêtes PolyBase. Des sources de données externes sont utilisées pour établir la connectivité et prendre en charge ces principaux cas d’utilisation :
- Virtualisation des données et chargement des données à l’aide de PolyBase dans SQL Server
- Les opérations de chargement en bloc à l’aide de
BULK INSERTouOPENROWSET
Notes
La syntaxe de CREATE EXTERNAL DATA SOURCE varie en différentes versions de SQL Server sur Linux. Utilisez la liste déroulante sélecteur de version pour choisir la version appropriée.
Pour afficher les fonctionnalités de SQL Server 2019 (15.x), visitez CREATE EXTERNAL DATA SOURCE.
Pour afficher les fonctionnalités de SQL Server 2022 (16.x), visitez CREATE EXTERNAL DATA SOURCE.
Notes
La syntaxe de CREATE EXTERNAL DATA SOURCE varie en différentes versions de la SQL Moteur de base de données. Utilisez la liste déroulante sélecteur de version pour choisir la version de produit appropriée.
Pour afficher les fonctionnalités de SQL Server 2019 (15.x), visitez CREATE EXTERNAL DATA SOURCE.
Pour afficher les fonctionnalités de SQL Server 2022 (16.x), visitez CREATE EXTERNAL DATA SOURCE.
conventions de syntaxe Transact-SQL
Syntaxe pour SQL Server 2017
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] TYPE = { HADOOP | BLOB_STORAGE } ]
[ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' )
[ ; ]
Les arguments
data_source_name
Spécifie le nom défini par l’utilisateur de la source de données. Le nom doit être unique dans la base de données dans SQL Server.
LOCATION = '<prefix> ://<path[:p ort]>'
Fournit le protocole de connectivité et le chemin d’accès à la source de données externe.
| Source de données externe | Préfixe de l’emplacement du connecteur | Chemin d’emplacement | Emplacements pris en charge par produit / service | Authentification |
|---|---|---|---|---|
| Cloudera CDH ou Hortonworks HDP | hdfs |
<Namenode>[:port] |
SQL Server 2016 (13.x) à SQL Server 2019 (15.x) uniquement | Authentification anonyme ou de base |
| compte stockage Azure(V2) | wasb[s] |
<container>@<storage_account>.blob.core.windows.net |
À compter de SQL Server 2016 (13.x) Espace de noms hiérarchique pas pris en charge |
clé de compte stockage Azure |
| opérations en bloc | https |
<storage_account>.blob.core.windows.net/<container> |
À compter de SQL Server 2017 (14.x) | Signature d’accès partagé (SAP) |
Chemin d’emplacement :
-
<NameNode>= Nom de la machine, nom de l’URI de service ou adresse IP duNamenodedu cluster Hadoop. PolyBase doit résoudre tous les noms DNS utilisés par le cluster Hadoop. -
port= Le port d’écoute de la source de données externe. Dans Hadoop, le port se trouve à l’aide du paramètre de configurationfs.defaultFS. La valeur par défaut est 8020. -
<container>= le conteneur du compte de stockage contenant les données. Les conteneurs racines sont en lecture seule, donc les données ne peuvent pas être réécrites sur le conteneur. -
<storage_account>= nom du compte de stockage de la ressource Azure. -
<server_name>= le nom d’hôte. -
<instance_name>= le nom de l’instance nommée SQL Server. Utilisé si vous avez SQL Server service Browser s’exécutant sur l’instance cible.
Remarques et conseils supplémentaires lors de la définition de l’emplacement :
- Le Moteur de base de données SQL Server ne vérifie pas l'existence de la source de données externe lors de la création de l'objet. Pour valider, créez une table externe à l’aide d’une source de données externe.
- Utilisez la même source de données externe pour toutes les tables lors de l’interrogation de Hadoop afin de garantir la cohérence des paramètres sémantiques de requête.
- Spécifiez
Driver={<Name of Driver>}lors de la connexion viaODBC. -
wasbsest facultatif, mais recommandé dans SQL Server 2017 (14.x) pour accéder à Comptes de stockage Azure, car les données seront envoyées à l’aide d’une connexion TLS/SSL sécurisée. - Pour garantir la réussite des requêtes PolyBase lors du basculement du
NamenodeHadoop, envisagez d’utiliser une adresse IP virtuelle pour leNamenodedu cluster Hadoop. Si ce n’est pas le cas, exécutez ALTER EXTERNAL DATA SOURCE pour pointer vers le nouvel emplacement.
DIPLÔME = credential_name
Spécifie les informations d’identification limitées à la base de données servant à l’authentification auprès de la source de données externe.
Remarques et conseils supplémentaires lors de la création d’informations d’identification :
-
CREDENTIALest requis uniquement si les données ont été sécurisées.CREDENTIALn’est pas requis pour les jeux de données qui autorisent l’accès anonyme. - Quand
TYPE=BLOB_STORAGE, les informations d’identification doivent être créées avec l’identitéSHARED ACCESS SIGNATURE. -
TYPE=BLOB_STORAGEest autorisé uniquement pour les opérations en bloc ; vous ne pouvez pas créer de tables externes pour une source de données externe avecTYPE=BLOB_STORAGE. - Lors de la connexion au stockage Azure via
wasbouwasbs, l’authentification doit être effectuée avec une clé de compte de stockage, et non avec une signature d’accès partagé (SAP). - Quand
TYPE=HADOOP, les informations d’identification doivent être créées à l’aide de la clé de compte de stockage en tant queSECRET.
Il existe plusieurs façons de créer une signature d’accès partagé :
Vous pouvez créer un jeton SAS en accédant au portail Azure -><Your_Storage_Account> -> signature d’accès partagé -> Configurer les autorisations -> Générer une SAP et chaîne de connexion. Pour plus d’informations, consultez Générer une signature d’accès partagé.
Vous pouvez créer et configurer une SAP avec Explorateur Stockage Azure.
Vous pouvez créer un jeton SAP par programmation via PowerShell, Azure CLI, .NET et l’API REST. Pour plus d’informations, consultez Accès limité aux ressources stockage Azure à l’aide de signatures d’accès partagé (SAP).
Le jeton SAS doit être configuré comme suit :
- Lorsqu’un jeton SAP est généré, il inclut un point d’interrogation (' ?') au début du jeton. Retirez le caractère
?de début lorsqu’il est configuré en tant que SECRET. - Utilisez une période d’expiration valide (toutes les dates sont au format UTC).
- Lorsqu’un jeton SAP est généré, il inclut un point d’interrogation (' ?') au début du jeton. Retirez le caractère
Accordez au moins l’autorisation en lecture sur le fichier qui doit être chargé (par exemple
srt=o&sp=r). Plusieurs signatures d’accès partagé peuvent être créées pour différents cas d’usage. Les autorisations doivent être accordées comme suit :Action Autorisation Lire les données d’un fichier Lire Lire les données de plusieurs fichiers et sous-dossiers Lire et Liste
Pour obtenir un exemple d’utilisation d’un CREDENTIAL avec SHARED ACCESS SIGNATURE et TYPE = BLOB_STORAGE, consultez Créer une source de données externe pour exécuter des opérations en bloc et récupérer des données de stockage Azure dans SQL Database
Pour créer des informations d’identification délimitées à la base de données, consultez CREATE DATABASE SCOPED CREDENTIAL.
TYPE = * [ HADOOP | BLOB_STORAGE ] *
Spécifie le type de source de données externe en cours de configuration. Ce paramètre n'est pas toujours obligatoire et doit être spécifié uniquement lors de la connexion à Cloudera CDH, Hortonworks HDP, un compte stockage Azure ou un Azure Data Lake Storage Gen2.
- Utilisez
HADOOPlorsque la source de données externe est Cloudera CDH, Hortonworks HDP, un compte stockage Azure ou un Azure Data Lake Storage Gen2. - Utilisez
lors de l’exécution d’opérations en bloc à partir d’un compte stockage Azure à l’aide de BULK INSERT<>/c1> ou OPENROWSET BULK . Introduit avec SQL Server 2017 (14.x). UtilisezHADOOPlors de l’intention deCREATE EXTERNAL TABLEsur stockage Azure.
Notes
TYPE doit être défini sur HADOOP même lors de l’accès à stockage Azure.
Pour obtenir un exemple d’utilisation de TYPE = HADOOP pour charger des données à partir d’un compte stockage Azure, consultez Create external data source to access data in stockage Azure using the wasb:// interface
RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:p ort]'
Configurez cette valeur facultative lors de la connexion à Cloudera CDH, Hortonworks HDP ou à un compte stockage Azure uniquement. Pour obtenir la liste complète des versions Hadoop prises en charge, consultez la configuration de la connectivité PolyBase.
Lorsque RESOURCE_MANAGER_LOCATION est défini, l’optimiseur de requête prend une décision basée sur le coût pour améliorer les performances. Une tâche MapReduce peut être utilisée pour transmettre le calcul à Hadoop. La spécification du RESOURCE_MANAGER_LOCATION peut réduire considérablement le volume de données transférées entre Hadoop et SQL Server, ce qui peut entraîner une amélioration des performances des requêtes.
Si le Resource Manager n'est pas spécifié, l'envoi (push) du calcul vers Hadoop est désactivé pour les requêtes PolyBase. Créer une source de données externe pour faire référence à Hadoop avec la transmission activée fournit un exemple concret ainsi que des instructions complémentaires.
La RESOURCE_MANAGER_LOCATION valeur n’est pas validée lorsque vous créez la source de données externe. L’entrée d’une valeur incorrecte peut entraîner un échec de requête au moment de l’exécution chaque fois que la requête push-down est tentée, car la valeur fournie ne peut pas être résolue.
Pour que PolyBase fonctionne correctement avec une source de données externe Hadoop, les ports des composants de cluster Hadoop suivants doivent être ouverts :
- Ports HDFS
- Namenode
- Datanode
- Resource Manager
- Envoi du travail
- Historique des travaux
Si le port n’est pas spécifié, la valeur par défaut est déterminée d’après le paramètre actuel de la configuration de la « connexion à hadoop ».
| Connexion Hadoop | Port de Resource Manager par défaut |
|---|---|
1 |
50300 |
2 |
50300 |
3 |
8021 |
4 |
8032 |
5 |
8050 |
6 |
8032 |
7 |
8050 |
8 |
8032 |
La table suivante présente les ports par défaut de ces composants. Il existe une dépendance de version Hadoop ainsi que la possibilité d’une configuration personnalisée qui n’utilise pas l’attribution de port par défaut.
| Composant de cluster Hadoop | Port par défaut |
|---|---|
| NameNode | 8020 |
| DataNode (transfert de données, port IPC sans privilège) | 50010 |
| DataNode (transfert de données, port IPC avec privilège) | 1019 |
| soumission de travaux Resource Manager (Hortonworks 1.3) | 50300 |
| Resource Manager soumission de travaux (Cloudera 4.3) | 8021 |
| soumission de travaux Resource Manager (Hortonworks 2.0 sur Windows, Cloudera 5.x sur Linux) | 8032 |
| soumission de travaux Resource Manager (Hortonworks 2.x, 3.0 sur Linux, Hortonworks 2.1-3 sur Windows) | 8050 |
| historique des travaux Resource Manager | 10020 |
Autorisations
Nécessite l’autorisation CONTROL sur la base de données dans SQL Server.
Verrouillage
Prend un verrou partagé sur l’objet EXTERNAL DATA SOURCE.
Sécurité
PolyBase prend en charge l’authentification basée sur le proxy pour la plupart de ces sources de données externes. Créez des informations d’identification au niveau de la base de données pour créer le compte proxy.
Un jeton SAP avec type HADOOP n’est pas pris en charge. Il est uniquement pris en charge avec un type = BLOB_STORAGE lorsqu’une clé d’accès de compte de stockage est utilisée à la place. Toute tentative de créer une source de données externe avec le type HADOOP et les informations d’identification SAS échoue avec l’erreur :
Msg 105019, Level 16, State 1 - EXTERNAL TABLE access failed due to internal error: 'Java exception raised on call to HdfsBridge_Connect. Java exception message: Parameters provided to connect to the Azure storage account aren't valid.: Error [Parameters provided to connect to the Azure storage account aren't valid.] occurred while accessing external file.'
Exemples
Important
Pour plus d’informations sur l’installation et l’activation de PolyBase, consultez Installer PolyBase sur Windows
R. Créer une source de données externe pour faire référence à Hadoop
Pour créer une source de données externe afin de référencer votre cluster Hortonworks HDP ou Cloudera CDH Hadoop, spécifiez le nom de l’ordinateur ou l’adresse IP du port et du Namenode Hadoop.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://10.10.10.10:8050'
);
B. Créer une source de données externe pour faire référence à Hadoop avec transmission activée
Spécifiez l’option RESOURCE_MANAGER_LOCATION pour activer le calcul transmis à Hadoop pour des requêtes PolyBase. Une fois activé, PolyBase prend une décision basée sur les coûts pour déterminer si le calcul de la requête doit être poussé vers Hadoop.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://10.10.10.10:8020',
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);
Chapitre C. Créer une source de données externe pour faire référence à Hadoop sécurisé par Kerberos
Pour vérifier si le cluster Hadoop est sécurisé par Kerberos, regardez la valeur de la propriété hadoop.security.authentication dans Hadoop core-site.xml. Pour faire référence à un cluster Hadoop sécurisé par Kerberos, vous devez spécifier des informations d’identification limitées à la base de données qui contiennent votre nom d’utilisateur et votre mot de passe Kerberos. La clé principale de la base de données est utilisée pour chiffrer le secret des informations d’identification limitées à la base de données.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Kerberos user name and password.
CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
WITH IDENTITY = '<hadoop_user_name>',
SECRET = '<hadoop_password>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://10.10.10.10:8050',
CREDENTIAL = HadoopUser1,
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);
D. Créer une source de données externe pour accéder aux données dans stockage Azure à l’aide de l’interface wasb://
Dans cet exemple, la source de données externe est un compte de stockage Azure V2 nommé logs. Le conteneur de stockage est nommé daily. La source de données externe stockage Azure concerne uniquement le transfert de données. Elle ne prend pas en charge le pushdown de prédicats. Les espaces de noms hiérarchiques ne sont pas pris en charge lors de l’accès aux données via l’interface wasb:// . Lors de la connexion au stockage Azure via wasb ou wasbs, l’authentification doit être effectuée avec une clé de compte de stockage, et non avec une signature d’accès partagé (SAP).
Cet exemple montre comment créer les informations d’identification délimitées à la base de données pour l’authentification auprès d’un compte de stockage Azure V2. Spécifiez la clé de compte stockage Azure dans le secret des informations d’identification de la base de données. Vous pouvez spécifier n'importe quelle chaîne dans l'identité d'informations d'identification délimitée à la base de données, car elle n'est pas utilisée lors de l'authentification pour stockage Azure.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH IDENTITY = '<my_account>',
SECRET = '<azure_storage_account_key>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
TYPE = HADOOP,
LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
CREDENTIAL = AzureStorageCredential
);
Exemples : Opérations en bloc
Important
N’ajoutez pas de paramètres de signature de fin /, de nom de fichier ou d’accès partagé à la fin de l’URL lors de la LOCATION configuration d’une source de données externe pour les opérations en bloc.
E. Créer une source de données externe pour les opérations en bloc qui récupèrent des données à partir de stockage Azure
Applies to : SQL Server 2017 (14.x) et versions ultérieures.
Utilisez la source de données suivante pour les opérations en bloc à l’aide de BULK INSERT ou OPENROWSET BULK. L’identifiant utilisé doit donner à l’identité la valeur SHARED ACCESS SIGNATURE, ne doit pas avoir le premier ? dans le jeton SAS, doit avoir au moins les droits de lecture sur le fichier à charger (par exemple srt=o&sp=r), et doit présenter une période d’expiration valide (toutes les dates sont en heure UTC). Pour plus d’informations sur les signatures d’accès partagé, consultez Utilisation des signatures d’accès partagé (SAP).
CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = -- Remove ? from the beginning of the SAS token'<azure_storage_account_key>';
CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'https://newinvoices.blob.core.windows.net/week3',
CREDENTIAL = AccessAzureInvoices
);
Pour voir une utilisation de cet exemple, consultez BULK INSERT.
Contenu connexe
- ALTER EXTERNAL DATA SOURCE (Transact-SQL)
- CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREATE EXTERNAL TABLE (Transact-SQL)
- sys.external_data_sources (Transact-SQL)
- Utilisation des signatures d’accès partagé (SAP)
- configuration de connectivité PolyBase (Transact-SQL)
Vue d’ensemble : SQL Server 2019
Applies à : SQL Server 2019 (15.x)
Crée une source de données externe pour des requêtes PolyBase. Des sources de données externes sont utilisées pour établir la connectivité et prendre en charge ces principaux cas d’utilisation :
- Virtualisation des données et chargement des données à l’aide de PolyBase dans SQL Server
- Les opérations de chargement en bloc à l’aide de
BULK INSERTouOPENROWSET
Notes
La syntaxe de CREATE EXTERNAL DATA SOURCE varie en différentes versions de la SQL Moteur de base de données. Utilisez la liste déroulante sélecteur de version pour choisir la version de produit appropriée.
Pour afficher les fonctionnalités de SQL Server 2022 (16.x), visitez CREATE EXTERNAL DATA SOURCE.
Notes
La syntaxe de CREATE EXTERNAL DATA SOURCE varie en différentes versions de la SQL Moteur de base de données. Utilisez la liste déroulante sélecteur de version pour choisir la version de produit appropriée.
Pour afficher les fonctionnalités de SQL Server 2022 (16.x), visitez CREATE EXTERNAL DATA SOURCE.
conventions de syntaxe Transact-SQL
Syntaxe pour SQL Server 2019
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] PUSHDOWN = { ON | OFF } ]
[ [ , ] TYPE = { HADOOP | BLOB_STORAGE } ]
[ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' ]
)
[ ; ]
Les arguments
data_source_name
Spécifie le nom défini par l’utilisateur de la source de données. Le nom doit être unique dans la base de données dans SQL Server.
LOCATION = '<prefix> ://<path[:p ort]>'
Fournit le protocole de connectivité et le chemin d’accès à la source de données externe.
| Source de données externe | Préfixe de l’emplacement du connecteur | Chemin d’emplacement | Emplacements pris en charge par produit / service | Authentification |
|---|---|---|---|---|
| Cloudera CDH ou Hortonworks HDP | hdfs |
<Namenode>[:port] |
SQL Server 2016 (13.x) à SQL Server 2019 (15.x) | Authentification anonyme ou de base |
| compte stockage Azure(V2) | wasb[s] |
<container>@<storage_account>.blob.core.windows.net |
À compter de SQL Server 2016 (13.x) Espace de noms hiérarchique pas pris en charge |
clé de compte stockage Azure |
| SQL Server | sqlserver |
<server_name>[\<instance_name>][:port] |
À compter de SQL Server 2019 (15.x) | Authentification SQL uniquement |
| Oracle | oracle |
<server_name>[:port] |
À compter de SQL Server 2019 (15.x) | Authentification de base uniquement |
| Teradata | teradata |
<server_name>[:port] |
À compter de SQL Server 2019 (15.x) | Authentification de base uniquement |
| MongoDB ou API Cosmos DB pour MongoDB | mongodb |
<server_name>[:port] |
À compter de SQL Server 2019 (15.x) | Authentification de base uniquement |
| ODBC générique | odbc |
<server_name>[:port] |
À compter de SQL Server 2019 (15.x) - Windows uniquement | Authentification de base uniquement |
| opérations en bloc | https |
<storage_account>.blob.core.windows.net/<container> |
À compter de SQL Server 2017 (14.x) | Signature d’accès partagé (SAP) |
| Azure Data Lake Storage Gen2 | abfs[s] |
abfss://<container>@<storage_account>.dfs.core.windows.net |
À compter de SQL Server 2019 (15.x) CU11+. | Storage Access Key (Clé d’accès de stockage) |
| pool de données SQL Server Clusters Big Data | sqldatapool |
sqldatapool://controller-svc/default |
Uniquement pris en charge dans SQL Server 2019 Clusters Big Data | Authentification de base uniquement |
| pool de stockage SQL Server Clusters Big Data | sqlhdfs |
sqlhdfs://controller-svc/default |
Uniquement pris en charge dans SQL Server 2019 Clusters Big Data | Authentification de base uniquement |
Chemin d’emplacement :
-
<Namenode>= nom de l’ordinateur, URI du service de noms ou adresse IP deNamenodedans le cluster Hadoop. PolyBase doit résoudre tous les noms DNS utilisés par le cluster Hadoop. -
port= Le port d’écoute de la source de données externe. Dans Hadoop, le port se trouve à l’aide du paramètre de configurationfs.defaultFS. La valeur par défaut est 8020. -
<container>= le conteneur du compte de stockage contenant les données. Les conteneurs racines sont en lecture seule, donc les données ne peuvent pas être réécrites sur le conteneur. -
<storage_account>= nom du compte de stockage de la ressource Azure. -
<server_name>= le nom d’hôte. -
<instance_name>= le nom de l’instance nommée SQL Server. Utilisé si vous avez SQL Server service Browser s’exécutant sur l’instance cible.
Remarques et conseils supplémentaires lors de la définition de l’emplacement :
- Le Moteur de base de données SQL Server ne vérifie pas l'existence de la source de données externe lors de la création de l'objet. Pour valider, créez une table externe à l’aide d’une source de données externe.
- Utilisez la même source de données externe pour toutes les tables lors de l’interrogation de Hadoop afin de garantir la cohérence des paramètres sémantiques de requête.
- Vous pouvez utiliser le connecteur
sqlserverpour connecter SQL Server 2019 (15.x) à un autre SQL Server ou à Azure SQL Database. - Spécifiez
Driver={<Name of Driver>}lors de la connexion viaODBC. - L’utilisation de
wasbsouabfssest facultative, mais recommandée dans SQL Server 2019 (15.x) pour accéder à Comptes de stockage Azure en tant que données seront envoyées à l’aide d’une connexion TLS/SSL sécurisée. - Les API
abfsouabfsssont prises en charge lors de l’accès à Comptes de stockage Azure à partir de SQL Server 2019 (15.x) CU11. Pour plus d’informations, consultez the Azure pilote de système de fichiers blob (ABFS). - L’option Espace de noms hiérarchique pour Comptes de stockage Azure(V2) à l’aide de
abfs[s]est prise en charge via Azure Data Lake Storage Gen2 à partir de SQL Server 2019 (15.x) CU11+. Sinon, l’option d’espace de noms hiérarchique n’est pas prise en charge et doit rester désactivée. - Pour garantir la réussite des requêtes PolyBase lors du basculement du
NamenodeHadoop, envisagez d’utiliser une adresse IP virtuelle pour leNamenodedu cluster Hadoop. Si ce n’est pas le cas, exécutez ALTER EXTERNAL DATA SOURCE pour pointer vers le nouvel emplacement. - Les types
sqlhdfsetsqldatapoolsont pris en charge pour la connexion entre l’instance maître et le pool de stockage d’un cluster Big Data. Pour Cloudera CDH ou Hortonworks HDP, utilisezhdfs. Pour plus d’informations sur l’utilisation desqlhdfspour interroger des pools de stockage SQL Server Clusters Big Data, consultez Query HDFS dans SQL Server cluster Big Data 2019. - SQL Server prise en charge des sources de données externes HDFS Cloudera (CDP) et Hortonworks (HDP) a été supprimée et n'est pas incluse dans SQL Server 2022 (16.x) et versions ultérieures. Pour plus d’informations, consultez les options de données Big sur la plateforme Microsoft SQL Server.
CONNECTION_OPTIONS = key_value_pair
Spécifié pour SQL Server 2019 (15.x) et versions ultérieures. Spécifie des options supplémentaires lors de la connexion via ODBC à une source de données externe. Pour utiliser plusieurs options de connexion, séparez-les par un point-virgule.
S’applique aux connexions génériques ODBC, ainsi qu’aux connecteurs ODBC intégrés pour les connecteurs SQL Server, Oracle, Teradata, MongoDB et Azure Cosmos DB API pour MongoDB.
key_value_pair correspond au mot clé et à la valeur d’une option de connexion spécifique. Les mots clés et les valeurs disponibles dépendent du type de source de données externe. Au minimum, le nom du pilote est nécessaire, mais d’autres options telles que APP='<your_application_name>' ou ApplicationIntent= ReadOnly|ReadWrite s’avèrent également utiles à paramétrer et facilitent la résolution des problèmes.
Les paires clé-valeur possibles sont spécifiques au fournisseur pour le fournisseur de source de données externe. Pour plus d’informations sur chaque fournisseur, consultez CREATE EXTERNAL DATA SOURCE (Transact-SQL) CONNECTION_OPTIONS.
SQL Server 2019 (15.x) Mise à jour cumulative 19 et versions ultérieures introduisent des mots clés supplémentaires pour prendre en charge les fichiers TNS Oracle :
- Le mot clé
TNSNamesFilespécifie le chemin du fichiertnsnames.orasur le serveur Oracle. - Le mot clé
ServerNamespécifie l’alias utilisé dans le fichiertnsnames.oraqui sera utilisé pour remplacer le nom d’hôte et le port.
PUSHDOWN = ON | OFF
Spécifié pour SQL Server 2019 (15.x) uniquement. Indique si le calcul peut être transmis à la source de données externe. Il est activé par défaut.
PUSHDOWN est pris en charge lors de la connexion à SQL Server, Oracle, Teradata, MongoDB, l’API Azure Cosmos DB pour MongoDB ou ODBC au niveau de la source de données externe.
L’activation ou la désactivation d’un push-down au niveau de la requête est obtenue via l’indicateur EXTERNALPUSHDOWN.
DIPLÔME = credential_name
Spécifie les informations d’identification limitées à la base de données servant à l’authentification auprès de la source de données externe.
Remarques et conseils supplémentaires lors de la création d’informations d’identification :
-
CREDENTIALest requis uniquement si les données ont été sécurisées.CREDENTIALn’est pas requis pour les jeux de données qui autorisent l’accès anonyme. - Quand
TYPE=BLOB_STORAGE, les informations d’identification doivent être créées avec l’identitéSHARED ACCESS SIGNATURE. -
TYPE=BLOB_STORAGEest autorisé uniquement pour les opérations en bloc ; vous ne pouvez pas créer de tables externes pour une source de données externe avecTYPE=BLOB_STORAGE.
Il existe plusieurs façons de créer une signature d’accès partagé :
Vous pouvez créer un jeton SAS en accédant au portail Azure -><Your_Storage_Account> -> signature d’accès partagé -> Configurer les autorisations -> Générer une SAP et chaîne de connexion. Pour plus d’informations, consultez Générer une signature d’accès partagé.
Vous pouvez créer et configurer une SAP avec Explorateur Stockage Azure.
Vous pouvez créer un jeton SAP par programmation via PowerShell, Azure CLI, .NET et l’API REST. Pour plus d’informations, consultez Accès limité aux ressources stockage Azure à l’aide de signatures d’accès partagé (SAP).
Le jeton SAS doit être configuré comme suit :
- Lorsqu’un jeton SAP est généré, il inclut un point d’interrogation (' ?') au début du jeton. Retirez le caractère
?de début lorsqu’il est configuré en tant que SECRET. - Utilisez une période d’expiration valide (toutes les dates sont au format UTC).
- Lorsqu’un jeton SAP est généré, il inclut un point d’interrogation (' ?') au début du jeton. Retirez le caractère
Accordez au moins l’autorisation en lecture sur le fichier qui doit être chargé (par exemple
srt=o&sp=r). Plusieurs signatures d’accès partagé peuvent être créées pour différents cas d’usage. Les autorisations doivent être accordées comme suit :Action Autorisation Lire les données d’un fichier Lire Lire les données de plusieurs fichiers et sous-dossiers Lire et Liste
Pour obtenir un exemple d’utilisation d’un CREDENTIAL avec SHARED ACCESS SIGNATURE et TYPE = BLOB_STORAGE, consultez Créer une source de données externe pour exécuter des opérations en bloc et récupérer des données de stockage Azure dans SQL Database
Pour créer des informations d’identification délimitées à la base de données, consultez CREATE DATABASE SCOPED CREDENTIAL.
TYPE = * [ HADOOP | BLOB_STORAGE ] *
Spécifie le type de source de données externe en cours de configuration. Ce paramètre n'est pas toujours obligatoire et doit être spécifié uniquement lors de la connexion à Cloudera CDH, Hortonworks HDP, un compte stockage Azure ou un Azure Data Lake Storage Gen2.
- Dans SQL Server 2019 (15.x), ne spécifiez pas TYPE, sauf si vous vous connectez à Cloudera CDH, Hortonworks HDP, un compte stockage Azure.
- Utilisez
HADOOPlorsque la source de données externe est Cloudera CDH, Hortonworks HDP, un compte stockage Azure ou un Azure Data Lake Storage Gen2. - Utilisez
BLOB_STORAGElors de l’exécution d’opérations en bloc à partir d’un compte stockage Azure à l’aide de BULK INSERT ou OPENROWSET BULK avec SQL Server 2017 (14.x). UtilisezHADOOPlors de l’intention de CRÉER UNE TABLE EXTERNE sur stockage Azure. - SQL Server prise en charge des sources de données externes HDFS Cloudera (CDP) et Hortonworks (HDP) a été supprimée et n'est pas incluse dans SQL Server 2022 (16.x) et versions ultérieures. Pour plus d’informations, consultez les options de données Big sur la plateforme Microsoft SQL Server.
Pour obtenir un exemple d’utilisation de TYPE = HADOOP pour charger des données à partir d’un compte stockage Azure, consultez Créer la source de données externe pour accéder aux données dans stockage Azure à l’aide de l’interface wasb://.
RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:p ort]'
Dans SQL Server 2019 (15.x), ne spécifiez pas RESOURCE_MANAGER_LOCATION, sauf si vous vous connectez à Cloudera CDH, Hortonworks HDP, un compte stockage Azure.
Configurez cette valeur facultative lors de la connexion à Cloudera CDH, Hortonworks HDP ou à un compte stockage Azure uniquement. Pour obtenir la liste complète des versions Hadoop prises en charge, consultez la configuration de la connectivité PolyBase.
Lorsque RESOURCE_MANAGER_LOCATION est défini, l’optimiseur de requête prend une décision en fonction du coût pour améliorer les performances. Une tâche MapReduce peut être utilisée pour transmettre le calcul à Hadoop. La spécification du RESOURCE_MANAGER_LOCATION peut réduire considérablement le volume de données transférées entre Hadoop et SQL Server, ce qui peut entraîner une amélioration des performances des requêtes.
Si le Resource Manager n'est pas spécifié, l'envoi (push) du calcul vers Hadoop est désactivé pour les requêtes PolyBase. Créer une source de données externe pour faire référence à Hadoop avec la transmission activée fournit un exemple concret ainsi que des instructions complémentaires.
La valeur RESOURCE_MANAGER_LOCATION n’est pas validée lorsque vous créez la source de données externe. L’entrée d’une valeur incorrecte peut entraîner un échec de requête au moment de l’exécution chaque fois que la requête push-down est tentée, car la valeur fournie ne peut pas être résolue.
Pour que PolyBase fonctionne correctement avec une source de données externe Hadoop, les ports des composants de cluster Hadoop suivants doivent être ouverts :
- Ports HDFS
- Namenode
- Datanode
- Resource Manager
- Envoi du travail
- Historique des travaux
Si le port n’est pas spécifié, la valeur par défaut est déterminée d’après le paramètre actuel de la configuration de la « connexion à hadoop ».
| Connexion Hadoop | Port de Resource Manager par défaut |
|---|---|
1 |
50300 |
2 |
50300 |
3 |
8021 |
4 |
8032 |
5 |
8050 |
6 |
8032 |
7 |
8050 |
8 |
8032 |
La table suivante présente les ports par défaut de ces composants. Il existe une dépendance de version Hadoop ainsi que la possibilité d’une configuration personnalisée qui n’utilise pas l’attribution de port par défaut.
| Composant de cluster Hadoop | Port par défaut |
|---|---|
| NameNode | 8020 |
| DataNode (transfert de données, port IPC sans privilège) | 50010 |
| DataNode (transfert de données, port IPC avec privilège) | 1019 |
| soumission de travaux Resource Manager (Hortonworks 1.3) | 50300 |
| Resource Manager soumission de travaux (Cloudera 4.3) | 8021 |
| soumission de travaux Resource Manager (Hortonworks 2.0 sur Windows, Cloudera 5.x sur Linux) | 8032 |
| soumission de travaux Resource Manager (Hortonworks 2.x, 3.0 sur Linux, Hortonworks 2.1-3 sur Windows) | 8050 |
| historique des travaux Resource Manager | 10020 |
Autorisations
Nécessite l’autorisation CONTROL sur la base de données dans SQL Server.
Verrouillage
Prend un verrou partagé sur l’objet EXTERNAL DATA SOURCE.
Sécurité
PolyBase prend en charge l’authentification basée sur le proxy pour la plupart de ces sources de données externes. Créez des informations d’identification au niveau de la base de données pour créer le compte proxy.
Lorsque vous vous connectez au pool de données ou de stockage dans SQL Server cluster Big Data 2019, les informations d'identification de l'utilisateur sont transmises au système principal. Créez des connexions dans le pool de données lui-même pour activer l’authentification en transfert direct.
Un jeton SAP avec type HADOOP n’est pas pris en charge. Il est uniquement pris en charge avec un type = BLOB_STORAGE lorsqu’une clé d’accès de compte de stockage est utilisée à la place. Toute tentative de créer une source de données externe avec le type HADOOP et les informations d’identification SAS échoue avec l’erreur :
Msg 105019, Level 16, State 1 - EXTERNAL TABLE access failed due to internal error: 'Java exception raised on call to HdfsBridge_Connect. Java exception message: Parameters provided to connect to the Azure storage account aren't valid.: Error [Parameters provided to connect to the Azure storage account aren't valid.] occurred while accessing external file.'
Exemples
Important
Pour plus d’informations sur l’installation et l’activation de PolyBase, consultez Installer PolyBase sur Windows
R. Créer une source de données externe dans SQL Server 2019 pour référencer Oracle
Pour créer une source de données externe qui fait référence à Oracle, assurez-vous d’avoir des informations d’identification de niveau base de données. Vous pouvez également activer ou désactiver le push-down de calcul sur cette source de données.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL OracleProxyAccount
WITH IDENTITY = 'oracle_username',
SECRET = 'oracle_password';
CREATE EXTERNAL DATA SOURCE MyOracleServer
WITH (
LOCATION = 'oracle://145.145.145.145:1521',
PUSHDOWN = ON,
CREDENTIAL = OracleProxyAccount
);
Si vous le souhaitez, la source de données externe à Oracle peut utiliser l’authentification proxy pour fournir un contrôle d’accès affiné. Un utilisateur proxy peut être configuré pour disposer d’un accès limité par rapport à l’utilisateur dont l’identité est empruntée.
CREATE DATABASE SCOPED CREDENTIAL [OracleProxyCredential]
WITH IDENTITY = 'oracle_username',
SECRET = 'oracle_password';
CREATE EXTERNAL DATA SOURCE [OracleSalesSrvr]
WITH (
LOCATION = 'oracle://145.145.145.145:1521',
CONNECTION_OPTIONS = 'ImpersonateUser=%CURRENT_USER',
CREDENTIAL = [OracleProxyCredential]
);
Vous pouvez aussi utiliser l’authentification TNS.
À compter de SQL Server 2019 (15.x) Mise à jour cumulative 19, CREATE EXTERNAL DATA SOURCE prend désormais en charge l’utilisation de fichiers TNS lors de la connexion à Oracle.
Le paramètre CONNECTION_OPTIONS a été étendu et utilise désormais TNSNamesFile et ServerName comme variables pour parcourir le fichier tnsnames.ora et établir une connexion avec le serveur.
Dans l’exemple ci-dessous, pendant l’exécution SQL Server recherche l’emplacement du fichier tnsnames.ora spécifié par TNSNamesFile et recherche le port hôte et réseau spécifié par ServerName.
CREATE EXTERNAL DATA SOURCE [external_data_source_name]
WITH (
LOCATION = N'oracle://XE',
CREDENTIAL = [OracleCredentialTest],
CONNECTION_OPTIONS = N'TNSNamesFile=C:\Temp\tnsnames.ora;ServerName=XE'
);
Pour obtenir des exemples supplémentaires pour d’autres sources de données telles que MongoDB, consultez Configurer PolyBase pour accéder aux données externes dans MongoDB.
B. Créer une source de données externe pour faire référence à Hadoop
Pour créer une source de données externe afin de référencer votre cluster Hortonworks HDP ou Cloudera CDH Hadoop, spécifiez le nom de l’ordinateur ou l’adresse IP du port et du Namenode Hadoop.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://10.10.10.10:8050'
);
Chapitre C. Créer une source de données externe pour faire référence à Hadoop avec transmission activée
Spécifiez l’option RESOURCE_MANAGER_LOCATION pour activer le calcul transmis à Hadoop pour des requêtes PolyBase. Une fois activé, PolyBase prend une décision basée sur les coûts pour déterminer si le calcul de la requête doit être poussé vers Hadoop.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://10.10.10.10:8020',
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);
D. Créer une source de données externe pour faire référence à Hadoop sécurisé par Kerberos
Pour vérifier si le cluster Hadoop est sécurisé par Kerberos, regardez la valeur de la propriété hadoop.security.authentication dans Hadoop core-site.xml. Pour faire référence à un cluster Hadoop sécurisé par Kerberos, vous devez spécifier des informations d’identification limitées à la base de données qui contiennent votre nom d’utilisateur et votre mot de passe Kerberos. La clé principale de la base de données est utilisée pour chiffrer le secret des informations d’identification limitées à la base de données.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Kerberos user name and password.
CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
WITH IDENTITY = '<hadoop_user_name>',
SECRET = '<hadoop_password>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://10.10.10.10:8050',
CREDENTIAL = HadoopUser1,
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);
E. Créer une source de données externe pour accéder aux données dans stockage Azure à l’aide de l’interface wasb://
Dans cet exemple, la source de données externe est un compte de stockage Azure V2 nommé logs. Le conteneur de stockage est nommé daily. La source de données externe stockage Azure concerne uniquement le transfert de données. Elle ne prend pas en charge le pushdown de prédicats. Les espaces de noms hiérarchiques ne sont pas pris en charge lors de l’accès aux données via l’interface wasb:// . Lors de la connexion au stockage Azure via wasb ou wasbs, l’authentification doit être effectuée avec une clé de compte de stockage, et non avec une signature d’accès partagé (SAP).
Cet exemple montre comment créer les informations d’identification délimitées à la base de données pour l’authentification auprès d’un compte de stockage Azure V2. Spécifiez la clé de compte stockage Azure dans le secret des informations d’identification de la base de données. Vous pouvez spécifier n'importe quelle chaîne dans l'identité d'informations d'identification délimitée à la base de données, car elle n'est pas utilisée lors de l'authentification pour stockage Azure.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH IDENTITY = '<my_account>',
SECRET = '<azure_storage_account_key>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
TYPE = HADOOP,
LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
CREDENTIAL = AzureStorageCredential
);
F. Créer une source de données externe pour référencer une instance nommée SQL Server via la connectivité PolyBase
Applies to : SQL Server 2019 (15.x) et versions ultérieures
Pour créer une source de données externe qui référence une instance nommée de SQL Server, utilisez CONNECTION_OPTIONS pour spécifier le nom de l’instance.
Dans l’exemple suivant, WINSQL2019 est le nom d’hôte, et SQL2019 le nom de l’instance.
'Server=%s\SQL2019' est la paire clé-valeur.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019',
CONNECTION_OPTIONS = 'Server=%s\SQL2019',
CREDENTIAL = SQLServerCredentials
);
Vous pouvez également utiliser un port pour vous connecter à une instance SQL Server par défaut.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019:58137',
CREDENTIAL = SQLServerCredentials
);
G. Créer une source de données externe pour référencer un réplica secondaire lisible de Always On groupe de disponibilité
Applies to : SQL Server 2019 (15.x) et versions ultérieures
Pour créer une source de données externe qui fait référence à un réplica secondaire lisible de SQL Server, utilisez CONNECTION_OPTIONS pour spécifier le ApplicationIntent=ReadOnly. En outre, vous devez définir la base de données de disponibilité comme Database={dbname} dans CONNECTION_OPTIONS, ou définir la base de données de disponibilité comme base de données par défaut de la connexion utilisée pour les informations d’identification délimitées à la base de données. Vous devez effectuer cette opération sur tous les réplicas de disponibilité du groupe de disponibilité.
Tout d’abord, créez les informations d’identification délimitées par la base de données, stockant les informations d’identification pour une connexion SQL authentifiée. Le connecteur ODBC SQL pour PolyBase prend uniquement en charge l’authentification de base. 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. L’exemple suivant crée des informations d’identification étendues à la base de données, fournissez votre propre connexion et mot de passe.
CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username',
SECRET = 'password';
Ensuite, créez la nouvelle source de données externe.
Que vous soyez inclus Database=dbname dans la CONNECTION_OPTIONS base de données de disponibilité ou défini comme base de données par défaut pour la connexion dans les informations d’identification délimitées à la base de données, vous devez toujours fournir le nom de la base de données via un nom en trois parties dans l’instruction CREATE EXTERNAL TABLE, dans le paramètre LOCATION. Pour un exemple, voir CREATE EXTERNAL TABLE
Dans l’exemple suivant, WINSQL2019AGL est le nom de l’écouteur de groupe de disponibilité, et dbname le nom de la base de données ciblée par l’instruction CREATE EXTERNAL TABLE.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
CREDENTIAL = SQLServerCredentials
);
Vous pouvez illustrer le comportement de redirection du groupe de disponibilité en spécifiant ApplicationIntent et en créant une table externe sur l’affichage sys.serverssystème. Dans l’exemple de script suivant, deux sources de données externes sont créées et une table externe est créée pour chacune d’elles. Utilisez les vues pour tester le serveur qui répond à la connexion. Des résultats similaires peuvent également être obtenus via la fonctionnalité de routage en lecture seule. Pour plus d'informations, consultez la section Configurer le routage en lecture seule pour un groupe de disponibilité Always On .
CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadOnlyIntent]
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
CREDENTIAL = [SQLServerCredentials]
);
GO
CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadWriteIntent]
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadWrite',
CREDENTIAL = [SQLServerCredentials]
);
GO
Dans la base de données du groupe de disponibilité, créez une vue pour retourner sys.servers et le nom de l’instance locale, ce qui vous permet d’identifier le réplica qui répond à la requête. Pour plus d’informations, consultez sys.servers.
CREATE VIEW vw_sys_servers
AS
SELECT [name]
FROM sys.servers
WHERE server_id = 0;
GO
Ensuite, créez une table externe sur l’instance source :
CREATE EXTERNAL TABLE vw_sys_servers_ro (name SYSNAME NOT NULL)
WITH (
DATA_SOURCE = [DataSource_SQLInstanceListener_ReadOnlyIntent],
LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO
CREATE EXTERNAL TABLE vw_sys_servers_rw (name SYSNAME NOT NULL)
WITH (
DATA_SOURCE = [DataSource_SQLInstanceListener_ReadWriteIntent],
LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO
SELECT [name]
FROM dbo.vw_sys_servers_ro;--should return secondary replica instance
SELECT [name]
FROM dbo.vw_sys_servers_rw;--should return primary replica instance
GO
Exemples : Opérations en bloc
Important
N’ajoutez pas de paramètres de signature de fin /, de nom de fichier ou d’accès partagé à la fin de l’URL lors de la LOCATION configuration d’une source de données externe pour les opérations en bloc.
H. Créer une source de données externe pour les opérations en bloc qui récupèrent des données à partir de stockage Azure
Applies to : SQL Server 2017 (14.x) et SQL Server 2019 (15.x)
Utilisez la source de données suivante pour les opérations en bloc à l’aide de BULK INSERT ou OPENROWSET BULK. L’identifiant utilisé doit donner à l’identité la valeur SHARED ACCESS SIGNATURE, ne doit pas avoir le premier ? dans le jeton SAS, doit avoir au moins les droits de lecture sur le fichier à charger (par exemple srt=o&sp=r), et doit présenter une période d’expiration valide (toutes les dates sont en heure UTC). Pour plus d’informations sur les signatures d’accès partagé, consultez Utilisation des signatures d’accès partagé (SAP).
CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = -- Remove ? from the beginning of the SAS token'<azure_shared_access_signature>';
CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'https://newinvoices.blob.core.windows.net/week3',
CREDENTIAL = AccessAzureInvoices
);
Pour voir une utilisation de cet exemple, consultez BULK INSERT.
Je. Créer une source de données externe pour accéder aux données dans stockage Azure à l’aide de l’interface abfs://
Applies to : SQL Server 2019 (15.x) CU11 et versions ultérieures
Dans cet exemple, la source de données externe est un compte Azure Data Lake Storage Gen2 logs, à l’aide de le pilote de système de fichiers blob Azure (ABFS). Le conteneur de stockage est nommé daily. La Azure Data Lake Storage Gen2 source de données externe est uniquement destinée au transfert de données, car le push-down de prédicat n'est pas pris en charge.
Cet exemple montre comment créer les informations d’identification délimitées à la base de données pour l’authentification auprès d’un compte Azure Data Lake Storage Gen2. Spécifiez la clé de compte stockage Azure dans le secret des informations d’identification de la base de données. Vous pouvez spécifier n'importe quelle chaîne dans l'identité d'informations d'identification délimitée à la base de données, car elle n'est pas utilisée lors de l'authentification pour stockage Azure.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH IDENTITY = '<my_account>',
SECRET = '<azure_storage_account_key>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
TYPE = HADOOP,
LOCATION = 'abfss://daily@logs.dfs.core.windows.net/',
CREDENTIAL = AzureStorageCredential
);
J. Créer une source de données externe avec ODBC générique vers PostgreSQL
Comme dans les exemples précédents, créez d’abord une clé principale de base de données et des informations d’identification délimitées à la base de données. Les informations d’identification incluses dans l’étendue de la base de données seront utilisées pour la source de données externe. Cet exemple suppose également qu’un fournisseur de données ODBC générique pour PostgreSQL est installé sur le serveur.
Dans cet exemple, le fournisseur de données ODBC générique est utilisé pour établir une connexion à un serveur de base de données PostgreSQL dans le même réseau, où le nom de domaine complet du serveur PostgreSQL est POSTGRES1, avec le port par défaut TCP 5432.
CREATE EXTERNAL DATA SOURCE POSTGRES1
WITH (
LOCATION = 'odbc://POSTGRES1.domain:5432',
CONNECTION_OPTIONS = 'Driver={PostgreSQL Unicode(x64)};',
CREDENTIAL = postgres_credential
);
Contenu connexe
- ALTER EXTERNAL DATA SOURCE (Transact-SQL)
- CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREATE EXTERNAL TABLE (Transact-SQL)
- sys.external_data_sources (Transact-SQL)
- Utilisation des signatures d’accès partagé (SAP)
- configuration de connectivité PolyBase (Transact-SQL)
Vue d’ensemble : SQL Server 2022
Applies à : SQL Server 2022 (16.x) et versions ultérieures
Crée une source de données externe pour des requêtes PolyBase. Des sources de données externes sont utilisées pour établir la connectivité et prendre en charge ces principaux cas d’utilisation :
- Virtualisation des données et chargement des données à l’aide de PolyBase dans SQL Server
- Les opérations de chargement en bloc à l’aide de
BULK INSERTouOPENROWSET
Notes
La syntaxe de CREATE EXTERNAL DATA SOURCE varie en différentes versions de la SQL Moteur de base de données. Utilisez la liste déroulante sélecteur de version pour choisir la version de produit appropriée. Ce contenu s’applique à SQL Server 2022 (16.x) et versions ultérieures.
Syntaxe pour SQL Server 2022
Syntaxe pour SQL Server 2022 et versions ultérieures
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] PUSHDOWN = { ON | OFF } ]
)
[ ; ]
Les arguments
data_source_name
Spécifie le nom défini par l’utilisateur de la source de données. Le nom doit être unique dans la base de données dans SQL Server.
LOCATION = '<prefix> ://<path[:p ort]>'
Fournit le protocole de connectivité et le chemin d’accès à la source de données externe.
| Source de données externe | Préfixe de l’emplacement du connecteur | Chemin d’emplacement | Emplacements pris en charge par produit / service | Authentification |
|---|---|---|---|---|
| compte stockage Azure(V2) | abs |
abs://<container_name>@<storage_account_name>.blob.core.windows.net/ou abs://<storage_account_name>.blob.core.windows.net/<container_name> |
À compter de SQL Server 2022 (16.x) L’espace de noms hiérarchique est pris en charge. |
Signature d’accès partagé (SAP) |
| Azure Data Lake Storage Gen2 | adls |
adls://<container_name>@<storage_account_name>.dfs.core.windows.net/ou adls://<storage_account_name>.dfs.core.windows.net/<container_name> |
À compter de SQL Server 2022 (16.x) | Signature d’accès partagé (SAP) |
| SQL Server | sqlserver |
<server_name>[\<instance_name>][:port] |
À compter de SQL Server 2019 (15.x) | Authentification SQL uniquement |
| Oracle | oracle |
<server_name>[:port] |
À compter de SQL Server 2019 (15.x) | Authentification de base uniquement |
| Teradata | teradata |
<server_name>[:port] |
À compter de SQL Server 2019 (15.x) | Authentification de base uniquement |
| MongoDB ou API Cosmos DB pour MongoDB | mongodb |
<server_name>[:port] |
À compter de SQL Server 2019 (15.x) | Authentification de base uniquement |
| ODBC générique | odbc |
<server_name>[:port] |
À compter de SQL Server 2019 (15.x) - Windows uniquement | Authentification de base uniquement |
| opérations en bloc | https |
<storage_account>.blob.core.windows.net/<container> |
À compter de SQL Server 2017 (14.x) | Signature d’accès partagé (SAP) |
| Stockage d’objets compatible S3 | s3 |
- Compatible S3 : s3://<server_name>:<port>/- AWS S3 : s3://<bucket_name>.S3.amazonaws.com[:port]/<folder>ou s3://s3.amazonaws.com[:port]/<bucket_name>/<folder> |
À compter de SQL Server 2022 (16.x) | De base ou pass-through (STS) * |
* Doit être des informations d’identification délimitées à la base de données, où l’IDENTITÉ est codée IDENTITY = 'S3 Access Key' en dur et où l’argument SECRET est au format = '<AccessKeyID>:<SecretKeyID>' ou utilise l’autorisation directe (STS). Pour plus d’informations, consultez Configurer PolyBase pour accéder aux données externes dans le stockage d’objets compatible S3.
Chemin d’emplacement :
-
port= Le port d’écoute de la source de données externe. Facultatif dans de nombreux cas, en fonction de la configuration réseau. -
<container_name>= le conteneur du compte de stockage contenant les données. Les conteneurs racines sont en lecture seule, donc les données ne peuvent pas être réécrites sur le conteneur. -
<storage_account>= nom du compte de stockage de la ressource Azure. -
<server_name>= le nom d’hôte. -
<instance_name>= le nom de l’instance nommée SQL Server. Utilisé si vous avez SQL Server service Browser s’exécutant sur l’instance cible. -
<ip_address>:<port>= Pour le stockage d’objets compatible S3 uniquement (à partir de SQL Server 2022 (16.x)), le point de terminaison et le port utilisés pour se connecter au stockage compatible S3. -
<bucket_name>= Pour le stockage d’objets compatible S3 uniquement (à partir de SQL Server 2022 (16.x)), propre à la plateforme de stockage. -
<region>= Pour le stockage d’objets compatible S3 uniquement (à partir de SQL Server 2022 (16.x)), propre à la plateforme de stockage. -
<folder>= Partie du chemin de stockage dans l’URL de stockage.
Remarques et conseils supplémentaires lors de la définition de l’emplacement :
- Le Moteur de base de données SQL Server ne vérifie pas l'existence de la source de données externe lors de la création de l'objet. Pour valider, créez une table externe à l’aide d’une source de données externe.
- Vous pouvez utiliser le connecteur
sqlserverpour connecter SQL Server 2019 (15.x) à un autre SQL Server ou à Azure SQL Database. - Spécifiez
Driver={<Name of Driver>}lors de la connexion viaODBC. - L’option Espace de noms hiérarchique pour Comptes de stockage Azure(V2) à l’aide du préfixe
adlsest prise en charge via Azure Data Lake Storage Gen2 dans SQL Server 2022 (16.x).
- SQL Server prise en charge des sources de données externes HDFS Cloudera (CDP) et Hortonworks (HDP) sont supprimées et non incluses dans SQL Server 2022 (16.x). Il n'est pas nécessaire d'utiliser l'argument TYPE dans SQL Server 2022 (16.x).
- Pour plus d’informations sur le stockage d’objets compatible S3 et PolyBase à partir de SQL Server 2022 (16.x), consultez Configure PolyBase pour accéder aux données externes dans le stockage d’objets compatible S3. Pour obtenir un exemple d’interrogation d’un fichier Parquet dans le stockage d’objets compatible S3, consultez Virtualisation de Parquet dans un stockage d’objets compatible S3 avec PolyBase.
- Différent des versions précédentes, dans SQL Server 2022 (16.x), le préfixe utilisé pour stockage Azure Compte (v2) est passé de
wasb[s]àabs. - Différent des versions précédentes, dans SQL Server 2022 (16.x), le préfixe utilisé pour Azure Data Lake Storage Gen2 est passé de
abfs[s]àadls. - Pour obtenir un exemple d’utilisation de PolyBase pour virtualiser un fichier CSV dans stockage Azure, consultez Virtualize CSV avec PolyBase.
- Pour obtenir un exemple utilisant PolyBase pour virtualiser une table delta dans ADLS Gen2, consultez Virtualiser une table delta avec PolyBase.
- SQL Server 2022 (16.x) prend entièrement en charge deux formats d’URL pour stockage Azure Compte v2 (
abs) et Azure Data Lake Gen2 (adls).- Le chemin LOCATION peut utiliser les formats suivants :
<container>@<storage_account_name>..(recommandé) ou<storage_account_name>../<container>. Par exemple :- stockage Azure Compte v2 :
abs://<container>@<storage_account_name>.blob.core.windows.net(recommandé) ouabs://<storage_account_name>.blob.core.windows.net/<container>.
- stockage Azure Compte v2 :
- Le chemin LOCATION peut utiliser les formats suivants :
- Azure Data Lake Gen2 prend en charge :
adls://<container>@<storage_account_name>.blob.core.windows.net(recommandé) ouadls://<storage_account_name>.dfs.core.windows.net/<container>.
CONNECTION_OPTIONS = key_value_pair
Spécifié pour SQL Server 2019 (15.x) et versions ultérieures. Spécifie des options supplémentaires lors de la connexion via ODBC à une source de données externe. Pour utiliser plusieurs options de connexion, séparez-les par un point-virgule.
S’applique aux connexions génériques ODBC, ainsi qu’aux connecteurs ODBC intégrés pour les connecteurs SQL Server, Oracle, Teradata, MongoDB et Azure Cosmos DB API pour MongoDB.
key_value_pair correspond au mot clé et à la valeur d’une option de connexion spécifique. Les mots clés et les valeurs disponibles dépendent du type de source de données externe. Au minimum, le nom du pilote est nécessaire, mais d’autres options telles que APP='<your_application_name>' ou ApplicationIntent= ReadOnly|ReadWrite s’avèrent également utiles à paramétrer et facilitent la résolution des problèmes.
Les paires clé-valeur possibles sont spécifiques au pilote. Pour plus d’informations sur chaque fournisseur, consultez CREATE EXTERNAL DATA SOURCE (Transact-SQL) CONNECTION_OPTIONS.
À compter de SQL Server 2022 (16.x) Mise à jour cumulative 2, des mots clés supplémentaires ont été introduits pour prendre en charge les fichiers TNS Oracle :
- Le mot clé
TNSNamesFilespécifie le chemin du fichiertnsnames.orasur le serveur Oracle. - Le mot clé
ServerNamespécifie l’alias utilisé dans le fichiertnsnames.oraqui sera utilisé pour remplacer le nom d’hôte et le port.
PUSHDOWN = ON | DE
S’applique à : SQL Server 2019 (15.x) et versions ultérieures. Indique si le calcul peut être transmis à la source de données externe. Elle est activée par défaut.
PUSHDOWN est pris en charge lors de la connexion à SQL Server, Oracle, Teradata, MongoDB, l’API Azure Cosmos DB pour MongoDB ou ODBC au niveau de la source de données externe.
L’activation ou la désactivation d’un push-down au niveau de la requête est obtenue via l’indicateur EXTERNALPUSHDOWN.
DIPLÔME = credential_name
Spécifie les informations d’identification limitées à la base de données servant à l’authentification auprès de la source de données externe.
Remarques et conseils supplémentaires lors de la création d’informations d’identification :
-
CREDENTIALest requis uniquement si les données ont été sécurisées.CREDENTIALn’est pas requis pour les jeux de données qui autorisent l’accès anonyme. - Lorsque vous accédez à stockage Azure compte (V2) ou Azure Data Lake Storage Gen2, le
IDENTITYdoit êtreSHARED ACCESS SIGNATURE. - Pour obtenir un exemple, consultez Créer une source de données externe pour exécuter des opérations en bloc et récupérer des données de stockage Azure dans SQL Database.
Il existe plusieurs façons de créer une signature d’accès partagé :
Vous pouvez créer un jeton SAS en accédant au portail Azure -><Your_Storage_Account> -> signature d’accès partagé -> Configurer les autorisations -> Générer une SAP et chaîne de connexion. Pour plus d’informations, consultez Générer une signature d’accès partagé.
Vous pouvez créer et configurer une SAP avec Explorateur Stockage Azure.
Vous pouvez créer un jeton SAP par programmation via PowerShell, Azure CLI, .NET et l’API REST. Pour plus d’informations, consultez Accès limité aux ressources stockage Azure à l’aide de signatures d’accès partagé (SAP).
Le jeton SAS doit être configuré comme suit :
- Lorsqu’un jeton SAP est généré, il inclut un point d’interrogation (' ?') au début du jeton. Retirez le caractère
?de début lorsqu’il est configuré en tant que SECRET. - Utilisez une période d’expiration valide (toutes les dates sont au format UTC).
- Lorsqu’un jeton SAP est généré, il inclut un point d’interrogation (' ?') au début du jeton. Retirez le caractère
Accordez au moins l’autorisation en lecture sur le fichier qui doit être chargé (par exemple
srt=o&sp=r). Plusieurs signatures d’accès partagé peuvent être créées pour différents cas d’usage. Les autorisations doivent être accordées comme suit :Action Autorisation Lire les données d’un fichier Lire Lire les données de plusieurs fichiers et sous-dossiers Lire et Liste Utiliser Create External Table as Select (CETAS) Lecture, Création, Liste et Écriture Pour Stockage Blob Azure et Azure Data Lake Gen2 :
- Services autorisés :
Blobdoit être sélectionné pour générer le jeton SAS
- Services autorisés :
Services autorisés :
ContaineretObjectdoivent être sélectionnés pour générer le jeton SAS
Pour obtenir un exemple d’utilisation de CREDENTIAL avec le stockage d’objets compatible S3 et PolyBase, consultez Configuration de PolyBase pour accéder à des données externes dans le stockage d’objets compatible S3.
Pour créer des informations d’identification délimitées à la base de données, consultez CREATE DATABASE SCOPED CREDENTIAL.
Autorisations
Nécessite l’autorisation CONTROL sur la base de données dans SQL Server.
Verrouillage
Prend un verrou partagé sur l’objet EXTERNAL DATA SOURCE.
Sécurité
PolyBase prend en charge l’authentification basée sur le proxy pour la plupart de ces sources de données externes. Créez des informations d’identification au niveau de la base de données pour créer le compte proxy.
Mise à niveau vers SQL Server 2022
À compter de SQL Server 2022 (16.x), les sources de données externes Hadoop ne sont plus prises en charge. Il est nécessaire de recréer manuellement des sources de données externes précédemment créées avec TYPE = HADOOP, et toute table externe qui utilise cette source de données externe.
Les utilisateurs devront également configurer leurs sources de données externes pour utiliser de nouveaux connecteurs lors de la connexion à stockage Azure.
| Source de données externe | Du | À |
|---|---|---|
| Stockage Blob Azure | wasb[s] |
abs |
| ADLS Gen2 | abfs[s] |
adls |
Exemples
Important
Pour plus d’informations sur l’installation et l’activation de PolyBase, consultez Installer PolyBase sur Windows
R. Créer une source de données externe dans SQL Server pour référencer Oracle
Pour créer une source de données externe qui fait référence à Oracle, assurez-vous d’avoir des informations d’identification de niveau base de données. Vous pouvez également activer ou désactiver le push-down de calcul sur cette source de données.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL OracleProxyAccount
WITH IDENTITY = 'oracle_username',
SECRET = 'oracle_password';
CREATE EXTERNAL DATA SOURCE MyOracleServer
WITH (
LOCATION = 'oracle://145.145.145.145:1521',
PUSHDOWN = ON,
CREDENTIAL = OracleProxyAccount
);
Si vous le souhaitez, la source de données externe à Oracle peut utiliser l’authentification proxy pour fournir un contrôle d’accès affiné. Un utilisateur proxy peut être configuré pour disposer d’un accès limité par rapport à l’utilisateur dont l’identité est empruntée.
CREATE DATABASE SCOPED CREDENTIAL [OracleProxyCredential]
WITH IDENTITY = 'oracle_username',
SECRET = 'oracle_password';
CREATE EXTERNAL DATA SOURCE [OracleSalesSrvr]
WITH (
LOCATION = 'oracle://145.145.145.145:1521',
CONNECTION_OPTIONS = 'ImpersonateUser=%CURRENT_USER',
CREDENTIAL = [OracleProxyCredential]
);
Vous pouvez aussi vous authentifier en utilisant TNS.
À compter de SQL Server 2022 (16.x) Mise à jour cumulative 2, CREATE EXTERNAL DATA SOURCE prend désormais en charge l’utilisation de fichiers TNS lors de la connexion à Oracle.
Le paramètre CONNECTION_OPTIONS a été étendu et utilise désormais TNSNamesFile et ServerName comme variables pour parcourir le fichier tnsnames.ora et établir une connexion avec le serveur.
Dans l’exemple ci-dessous, pendant l’exécution SQL Server recherche l’emplacement du fichier tnsnames.ora spécifié par TNSNamesFile et recherche le port hôte et réseau spécifié par ServerName.
CREATE EXTERNAL DATA SOURCE [external_data_source_name]
WITH (
LOCATION = N'oracle://XE',
CREDENTIAL = [OracleCredentialTest],
CONNECTION_OPTIONS = N'TNSNamesFile=C:\Temp\tnsnames.ora;ServerName=XE'
);
B. Créer une source de données externe pour référencer une instance nommée SQL Server via la connectivité PolyBase
Applies to : SQL Server 2019 (15.x) et versions ultérieures
Pour créer une source de données externe qui référence une instance nommée de SQL Server, utilisez CONNECTION_OPTIONS pour spécifier le nom de l’instance.
Tout d’abord, créez les informations d’identification délimitées par la base de données, stockant les informations d’identification pour une connexion SQL authentifiée. Le connecteur ODBC SQL pour PolyBase prend uniquement en charge l’authentification de base. 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. L’exemple suivant crée des informations d’identification étendues à la base de données, fournissez votre propre connexion et mot de passe.
CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username',
SECRET = 'password';
Dans l’exemple suivant, WINSQL2019 est le nom d’hôte, et SQL2019 le nom de l’instance.
'Server=%s\SQL2019' est la paire clé-valeur.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019',
CONNECTION_OPTIONS = 'Server=%s\SQL2019',
CREDENTIAL = SQLServerCredentials
);
Vous pouvez également utiliser un port pour vous connecter à une instance SQL Server par défaut.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019:58137',
CREDENTIAL = SQLServerCredentials
);
Chapitre C. Créer une source de données externe pour référencer un réplica secondaire lisible de Always On groupe de disponibilité
Applies to : SQL Server 2019 (15.x) et versions ultérieures
Pour créer une source de données externe qui fait référence à un réplica secondaire lisible de SQL Server, utilisez CONNECTION_OPTIONS pour spécifier le ApplicationIntent=ReadOnly. En outre, vous devez définir la base de données de disponibilité comme Database={dbname} dans CONNECTION_OPTIONS, ou définir la base de données de disponibilité comme base de données par défaut de la connexion utilisée pour les informations d’identification délimitées à la base de données. Vous devez effectuer cette opération sur tous les réplicas de disponibilité du groupe de disponibilité.
Tout d’abord, créez les informations d’identification délimitées par la base de données, stockant les informations d’identification pour une connexion SQL authentifiée. Le connecteur ODBC SQL pour PolyBase prend uniquement en charge l’authentification de base. 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. L’exemple suivant crée des informations d’identification étendues à la base de données, fournissez votre propre connexion et mot de passe.
CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username',
SECRET = 'password';
Ensuite, créez la nouvelle source de données externe.
Que vous soyez inclus Database=dbname dans la CONNECTION_OPTIONS base de données de disponibilité ou défini comme base de données par défaut pour la connexion dans les informations d’identification délimitées à la base de données, vous devez toujours fournir le nom de la base de données via un nom en trois parties dans l’instruction CREATE EXTERNAL TABLE, dans le paramètre LOCATION. Pour un exemple, voir CREATE EXTERNAL TABLE
Dans l’exemple suivant, WINSQL2019AGL est le nom de l’écouteur de groupe de disponibilité, et dbname le nom de la base de données ciblée par l’instruction CREATE EXTERNAL TABLE.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
CREDENTIAL = SQLServerCredentials
);
Vous pouvez illustrer le comportement de redirection du groupe de disponibilité en spécifiant ApplicationIntent et en créant une table externe sur l’affichage sys.serverssystème. Dans l’exemple de script suivant, deux sources de données externes sont créées et une table externe est créée pour chacune d’elles. Utilisez les vues pour tester le serveur qui répond à la connexion. Des résultats similaires peuvent également être obtenus via la fonctionnalité de routage en lecture seule. Pour plus d'informations, consultez la section Configurer le routage en lecture seule pour un groupe de disponibilité Always On .
CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadOnlyIntent]
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
CREDENTIAL = [SQLServerCredentials]
);
GO
CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadWriteIntent]
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadWrite',
CREDENTIAL = [SQLServerCredentials]
);
GO
Dans la base de données du groupe de disponibilité, créez une vue pour retourner sys.servers et le nom de l’instance locale, ce qui vous permet d’identifier le réplica qui répond à la requête. Pour plus d’informations, consultez sys.servers.
CREATE VIEW vw_sys_servers
AS
SELECT [name]
FROM sys.servers
WHERE server_id = 0;
GO
Ensuite, créez une table externe sur l’instance source :
CREATE EXTERNAL TABLE vw_sys_servers_ro (name SYSNAME NOT NULL)
WITH (
DATA_SOURCE = [DataSource_SQLInstanceListener_ReadOnlyIntent],
LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO
CREATE EXTERNAL TABLE vw_sys_servers_rw (name SYSNAME NOT NULL)
WITH (
DATA_SOURCE = [DataSource_SQLInstanceListener_ReadWriteIntent],
LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO
SELECT [name]
FROM dbo.vw_sys_servers_ro;--should return secondary replica instance
SELECT [name]
FROM dbo.vw_sys_servers_rw;--should return primary replica instance
GO
D. Créer une source de données externe pour interroger un fichier Parquet dans le stockage d’objets compatible S3 avec PolyBase
Applies to : SQL Server 2022 (16.x) et versions ultérieures
L’exemple de script suivant crée une source de données externe s3_ds dans la base de données utilisateur source dans SQL Server. La source de données externe fait référence aux informations d’identification de portée étendue à la base de données s3_dc.
CREATE DATABASE SCOPED CREDENTIAL s3_dc
WITH IDENTITY = 'S3 Access Key', -- for S3-compatible object storage the identity must always be S3 Access Key
SECRET = '<access_key_id>:<secret_key_id>' -- provided by the S3-compatible object storage
GO
CREATE EXTERNAL DATA SOURCE s3_ds
WITH (
LOCATION = 's3://<ip_address>:<port>/',
CREDENTIAL = s3_dc
);
GO
Vérifiez la nouvelle source de données externe avec sys.external_data_sources.
SELECT *
FROM sys.external_data_sources;
Ensuite, l’exemple suivant illustre l’utilisation de T-SQL pour interroger un fichier Parquet stocké dans le stockage d’objets compatible S3 au moyen d’une requête OPENROWSET. Pour plus d’informations, consultez Virtualisation d’un fichier Parquet dans un stockage d’objets compatible S3 avec PolyBase.
SELECT *
FROM OPENROWSET (
BULK '/<bucket>/<parquet_folder>',
FORMAT = 'PARQUET',
DATA_SOURCE = 's3_ds'
) AS [cc];
E. Créer une source de données externe avec ODBC générique vers PostgreSQL
Comme dans les exemples précédents, créez d’abord une clé principale de base de données et des informations d’identification délimitées à la base de données. Les informations d’identification incluses dans l’étendue de la base de données seront utilisées pour la source de données externe. Cet exemple suppose également qu’un fournisseur de données ODBC générique pour PostgreSQL est installé sur le serveur.
Dans cet exemple, le fournisseur de données ODBC générique est utilisé pour établir une connexion à un serveur de base de données PostgreSQL dans le même réseau, où le nom de domaine complet du serveur PostgreSQL est POSTGRES1, avec le port par défaut TCP 5432.
CREATE EXTERNAL DATA SOURCE POSTGRES1
WITH (
LOCATION = 'odbc://POSTGRES1.domain:5432',
CONNECTION_OPTIONS = 'Driver={PostgreSQL Unicode(x64)};',
CREDENTIAL = postgres_credential
);
stockage Azure
Créer une signature d’accès partagé
Pour Stockage Blob Azure et Azure Data Lake Storage (ADLS) Gen2, la méthode d’authentification prise en charge est une signature d’accès partagé (SAP). Pour générer facilement un jeton de signature d’accès partagé, procédez comme suit. Pour plus d’informations, consultez Informations d’identification.
Accédez au portail Azure et au compte de stockage souhaité.
Accédez au conteneur souhaité dans le menu Stockage des données.
Sélectionnez Jetons d’accès partagé.
Choisissez l’autorisation appropriée en fonction de l’action souhaitée :
Action Autorisation Lire les données d’un fichier Lire Lire les données de plusieurs fichiers et sous-dossiers Lire et Liste Utiliser Create External Table as Select (CETAS) Lire, Créer et Écrire Choisir la date d’expiration du jeton.
Générer un jeton SAS et une URL.
Copier le jeton SAS.
F. Créer une source de données externe pour accéder aux données dans Stockage Blob Azure à l’aide de l’interface abs://
Applies to : SQL Server 2022 (16.x) et versions ultérieures
À compter de SQL Server 2022 (16.x), utilisez un nouveau préfixe abs pour stockage Azure Compte v2. Le préfixe abs prend en charge l’authentification à l’aide de SHARED ACCESS SIGNATURE. Le préfixe abs remplace wasb utilisé dans les versions précédentes. HADOOP n’est plus pris en charge, il n’est plus nécessaire d’utiliser TYPE = BLOB_STORAGE.
La clé de compte de stockage Azure n’est plus nécessaire, à la place à l’aide du jeton SAP, comme nous pouvons le voir dans l’exemple suivant :
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
GO
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredentialv2
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', -- to use SAS the identity must be fixed as-is
SECRET = '<Blob_SAS_Token>';
GO
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/',
CREDENTIAL = AzureStorageCredentialv2
);
Pour obtenir un exemple plus détaillé sur l’accès aux fichiers CSV stockés dans Stockage Blob Azure, consultez Virtualize CSV avec PolyBase.
G. Créer une source de données externe pour accéder aux données dans Azure Data Lake Gen2
Applies to : SQL Server 2022 (16.x) et versions ultérieures
À compter de SQL Server 2022 (16.x), utilisez un nouveau préfixe adls pour Azure Data Lake Gen2, en remplaçant abfs utilisé dans les versions précédentes. Le préfixe adls prend également en charge le jeton SAP comme méthode d’authentification, comme le montre l’exemple suivant :
--Create a database scoped credential using SAS Token
CREATE DATABASE SCOPED CREDENTIAL datalakegen2
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<DataLakeGen2_SAS_Token>';
GO
CREATE EXTERNAL DATA SOURCE data_lake_gen2_dfs
WITH (
LOCATION = 'adls://<container>@<storage_account>.dfs.core.windows.net',
CREDENTIAL = datalakegen2
);
Pour obtenir un exemple plus détaillé sur l’accès aux fichiers delta stockés sur Azure Data Lake Gen2, consultez Virtualize delta table with PolyBase.
Exemples : opérations en bloc
Important
N’ajoutez pas de paramètres de signature de fin /, de nom de fichier ou d’accès partagé à la fin de l’URL lors de la LOCATION configuration d’une source de données externe pour les opérations en bloc.
H. Créer une source de données externe pour les opérations en bloc qui récupèrent des données à partir de stockage Azure
Applies to : SQL Server 2022 (16.x) et versions ultérieures.
Utilisez la source de données suivante pour les opérations en bloc à l’aide de BULK INSERT ou OPENROWSET BULK. L’identifiant utilisé doit donner à l’identité la valeur SHARED ACCESS SIGNATURE, ne doit pas avoir le premier ? dans le jeton SAS, doit avoir au moins les droits de lecture sur le fichier à charger (par exemple srt=o&sp=r), et doit présenter une période d’expiration valide (toutes les dates sont en heure UTC). Pour plus d’informations sur les signatures d’accès partagé, consultez Utilisation des signatures d’accès partagé (SAP).
CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
-- Remove ? from the beginning of the SAS token
SECRET = '<azure_shared_access_signature>';
CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/',
CREDENTIAL = AccessAzureInvoices,
);
Contenu connexe
- ALTER EXTERNAL DATA SOURCE (Transact-SQL)
- CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREATE EXTERNAL TABLE (Transact-SQL)
- sys.external_data_sources (Transact-SQL)
- Utilisation des signatures d’accès partagé (SAP)
- configuration de connectivité PolyBase (Transact-SQL)
Vue d’ensemble : SQL Server 2025
Applies à : SQL Server 2025 (17.x)
Crée une source de données externe pour des requêtes PolyBase. Des sources de données externes sont utilisées pour établir la connectivité et prendre en charge ces principaux cas d’utilisation :
- Virtualisation des données et chargement des données à l’aide de PolyBase dans SQL Server
- Les opérations de chargement en bloc à l’aide de
BULK INSERTouOPENROWSET
Prend en charge les connexions d’identité managée pour les instances activées par Azure Arc. Pour plus d’informations, consultez Connect to stockage Azure with managed identity from PolyBase.
Notes
La syntaxe de CREATE EXTERNAL DATA SOURCE varie en différentes versions de la SQL Moteur de base de données. Utilisez la liste déroulante sélecteur de version pour choisir la version de produit appropriée. Ce contenu s’applique à SQL Server 2025 (17.x) et versions ultérieures.
Syntaxe pour SQL Server 2025 et versions ultérieures
Pour plus d’informations sur les conventions de syntaxe, consultez Transact-SQL conventions de syntaxe.
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] PUSHDOWN = { ON | OFF } ]
)
[ ; ]
Les arguments
data_source_name
Spécifie le nom défini par l’utilisateur de la source de données. Le nom doit être unique dans la base de données dans SQL Server.
LOCATION = '<prefix> ://<path[:p ort]>'
Fournit le protocole de connectivité et le chemin d’accès à la source de données externe.
| Source de données externe | Préfixe de l’emplacement du connecteur | Chemin d’emplacement | Emplacements pris en charge par produit / service | Authentification |
|---|---|---|---|---|
| compte stockage Azure(V2) | abs |
abs://<container_name>@<storage_account_name>.blob.core.windows.net/ou abs://<storage_account_name>.blob.core.windows.net/<container_name> |
À compter de SQL Server 2022 (16.x) L’espace de noms hiérarchique est pris en charge. |
Signature d’accès partagé (SAP) ou PolyBase prend en charge Managed Identity à stockage Azure1 |
| Azure Data Lake Storage Gen2 | adls |
adls://<container_name>@<storage_account_name>.dfs.core.windows.net/ou adls://<storage_account_name>.dfs.core.windows.net/<container_name> |
À compter de SQL Server 2022 (16.x) | Signature d’accès partagé (SAP) ou PolyBase prend en charge Managed Identity à stockage Azure1 |
| SQL Server | sqlserver |
<server_name>[\<instance_name>][:port] |
À compter de SQL Server 2019 (15.x) | Authentification SQL uniquement |
| Oracle | oracle |
<server_name>[:port] |
À compter de SQL Server 2019 (15.x) | Authentification de base uniquement |
| Teradata | teradata |
<server_name>[:port] |
À compter de SQL Server 2019 (15.x) | Authentification de base uniquement |
| MongoDB ou API Cosmos DB pour MongoDB | mongodb |
<server_name>[:port] |
À compter de SQL Server 2019 (15.x) | Authentification de base uniquement |
| ODBC générique | odbc |
<server_name>[:port] |
À compter de SQL Server 2019 (15.x) - Windows uniquement | Authentification de base uniquement |
| opérations en bloc | https |
<storage_account>.blob.core.windows.net/<container> |
À compter de SQL Server 2017 (14.x) | Signature d’accès partagé (SAP) |
| Stockage d’objets compatible S3 | s3 |
- Compatible S3 : s3://<server_name>:<port>/- AWS S3 : s3://<bucket_name>.S3.amazonaws.com[:port]/<folder>ou s3://s3.amazonaws.com[:port]/<bucket_name>/<folder> |
À compter de SQL Server 2022 (16.x) | De base ou pass-through (STS) 2 |
1 Nécessite SQL Server 2025 (17.x) instance activée par Azure Arc. Pour plus d’informations, consultez Connect to stockage Azure with managed identity from PolyBase.
2 Doit être des informations d’identification délimitées à la base de données, où IDENTITY l’argument IDENTITY = 'S3 Access Key' est codé en dur et où l’argument SECRET est au format = '<AccessKeyID>:<SecretKeyID>' ou utiliser l’autorisation directe (STS). Pour plus d’informations, consultez Configurer PolyBase pour accéder aux données externes dans le stockage d’objets compatible S3.
Chemin d’emplacement :
| Chemin d’emplacement | Descriptif |
|---|---|
port |
Port sur lequel la source de données externe écoute. Facultatif dans de nombreux cas, en fonction de la configuration réseau. |
<container_name> |
Conteneur du compte de stockage contenant les données. Les conteneurs racines sont en lecture seule, donc les données ne peuvent pas être réécrites sur le conteneur. |
<storage_account> |
Nom du compte de stockage de la ressource Azure. |
<server_name> |
Nom d’hôte. |
<instance_name> |
Nom de l’instance nommée SQL Server. Utilisé si vous avez SQL Server service Browser s’exécutant sur l’instance cible. |
<ip_address>:<port>
1 |
Pour le stockage d’objets compatible S3 uniquement, le point de terminaison et le port utilisés pour se connecter au stockage compatible S3. |
<bucket_name>
1 |
Pour le stockage d’objets compatible S3 uniquement, spécifique à la plateforme de stockage. |
<region>
1 |
Pour le stockage d’objets compatible S3 uniquement, spécifique à la plateforme de stockage. |
<folder> |
Partie du chemin de stockage dans l’URL de stockage. |
1 SQL Server 2022 (16.x) et versions ultérieures.
Remarques et conseils supplémentaires lors de la définition de l’emplacement :
Le Moteur de base de données SQL Server ne vérifie pas l'existence de la source de données externe lors de la création de l'objet. Pour valider, créez une table externe à l’aide d’une source de données externe.
Vous pouvez utiliser le connecteur
sqlserverpour connecter SQL Server 2019 (15.x) à un autre SQL Server ou à Azure SQL Database.Spécifiez
Driver={<Name of Driver>}lors de la connexion viaODBC.L’option Espace de noms hiérarchique pour Comptes de stockage Azure(V2) à l’aide du préfixe
adlsest prise en charge via Azure Data Lake Storage Gen2 dans SQL Server 2022 (16.x) et versions ultérieures.SQL Server prise en charge des sources de données externes HDFS Cloudera (CDP) et Hortonworks (HDP) sont supprimées et non incluses dans SQL Server 2022 (16.x) et versions ultérieures. Il n'est pas nécessaire d'utiliser l'argument
TYPEdans SQL Server 2025 (17.x).Pour plus d’informations sur le stockage d’objets compatible S3 et PolyBase dans SQL Server 2022 (16.x) et versions ultérieures, consultez Configure PolyBase pour accéder aux données externes dans le stockage d’objets compatibleS S3. Pour obtenir un exemple d’interrogation d’un fichier Parquet dans le stockage d’objets compatible S3, consultez Virtualisation de Parquet dans un stockage d’objets compatible S3 avec PolyBase.
Dans SQL Server 2022 (16.x) et versions ultérieures :
le préfixe utilisé pour stockage Azure Compte (v2) est passé de
wasb[s]àabsle préfixe utilisé pour Azure Data Lake Storage Gen2 changé de
abfs[s]àadlsPour obtenir un exemple d’utilisation de PolyBase pour virtualiser un fichier CSV dans stockage Azure, consultez Virtualize CSV avec PolyBase.
Pour obtenir un exemple utilisant PolyBase pour virtualiser une table delta dans ADLS Gen2, consultez Virtualiser une table delta avec PolyBase.
SQL Server 2022 (16.x) et versions ultérieures prennent entièrement en charge deux formats d’URL pour stockage Azure Account v2 (
abs) et Azure Data Lake Gen2 (adls).Le
LOCATIONchemin d’accès peut utiliser les formats suivants :<container>@<storage_account_name>..(recommandé) ou<storage_account_name>../<container>. Par exemple:- stockage Azure Compte v2 :
abs://<container>@<storage_account_name>.blob.core.windows.net(recommandé) ouabs://<storage_account_name>.blob.core.windows.net/<container>.
- stockage Azure Compte v2 :
Azure Data Lake Gen2 prend en charge :
adls://<container>@<storage_account_name>.blob.core.windows.net(recommandé) ouadls://<storage_account_name>.dfs.core.windows.net/<container>.
CONNECTION_OPTIONS = key_value_pair
Applies à : SQL Server 2019 (15.x) et versions ultérieures.
Spécifie des options supplémentaires lors de la connexion via ODBC à une source de données externe. Pour utiliser plusieurs options de connexion, séparez-les par un point-virgule.
S’applique aux connexions génériques ODBC, ainsi qu’aux connecteurs ODBC intégrés pour les connecteurs SQL Server, Oracle, Teradata, MongoDB et Azure Cosmos DB API pour MongoDB.
key_value_pair correspond au mot clé et à la valeur d’une option de connexion spécifique. Les mots clés et les valeurs disponibles dépendent du type de source de données externe. Au minimum, le nom du pilote est nécessaire, mais d’autres options telles que APP='<your_application_name>' ou ApplicationIntent= ReadOnly|ReadWrite s’avèrent également utiles à paramétrer et facilitent la résolution des problèmes.
Les paires clé-valeur possibles sont spécifiques au pilote. Pour plus d’informations sur chaque fournisseur, consultez CREATE EXTERNAL DATA SOURCE (Transact-SQL) CONNECTION_OPTIONS.
À compter de SQL Server 2022 (16.x) Mise à jour cumulative 2, des mots clés supplémentaires ont été introduits pour prendre en charge les fichiers TNS Oracle :
- Le mot clé
TNSNamesFilespécifie le chemin du fichiertnsnames.orasur le serveur Oracle. - Le mot clé
ServerNamespécifie l’alias utilisé dans le fichiertnsnames.oraqui sera utilisé pour remplacer le nom d’hôte et le port.
options Encryption dans SQL Server 2025 (17.x)
À compter de SQL Server 2025 (17.x), lors de l’utilisation de sqlserver comme source de données, le pilote ODBC Microsoft version 18 pour SQL Server est le pilote par défaut. L’option Encryption est requise (Yes, Noou Strict) et TrustServerCertificate est disponible (Yes ou No). Si Encryption ce n’est pas spécifié, le comportement par défaut est Encrypt=Yes;TrustServerCertificate=No;et nécessite un certificat de serveur.
Pour vous connecter à l’aide du protocole TDS 8.0, le mode strict (Encrypt=Strict) a été ajouté. Dans ce mode, un certificat de serveur approuvé doit être installé et est toujours vérifié (TrustServerCertificate est ignoré). Un nouveau mot clé, HostnameInCertificate, peut être utilisé pour spécifier le nom d’hôte attendu trouvé dans le certificat s’il diffère du serveur spécifié.
HostnameInCertificate est utilisable dans tous les modes de chiffrement et s’applique également si l’option Forcer le chiffrement côté serveur est activée, ce qui entraîne la vérification du certificat dans les modes facultatifs ou obligatoires , sauf si elle est désactivée à l’aide TrustServerCertificate.
Pour plus d’informations sur les options Encryption, les certificats de serveur et TrustServerCertificate, consultez Features du pilote ODBC Microsoft pour SQL Server sur Windows.
Vous devez toujours utiliser le pilote le plus récent. Toutefois, SQL Server 2025 (17.x) prend également en charge Microsoft pilote ODBC version 17 pour SQL Server pour la compatibilité descendante. Pour plus d’informations sur la modification de la version du pilote utilisée par PolyBase, consultez Changer la version du pilote SQL Server pour PolyBase.
PUSHDOWN = ON | DE
Applies à : SQL Server 2019 (15.x) et versions ultérieures.
Indique si le calcul peut être transmis à la source de données externe. Activé par défaut.
PUSHDOWN est pris en charge lors de la connexion à SQL Server, Oracle, Teradata, MongoDB, l’API Azure Cosmos DB pour MongoDB ou ODBC au niveau de la source de données externe.
L’activation ou la désactivation de la transmission au niveau de la requête s’effectue au moyen d’un indicateur.
DIPLÔME = credential_name
Spécifie les informations d’identification limitées à la base de données servant à l’authentification auprès de la source de données externe.
Remarques et conseils supplémentaires lors de la création d’informations d’identification :
CREDENTIALest requis uniquement si les données ont été sécurisées.CREDENTIALn’est pas requis pour les jeux de données qui autorisent l’accès anonyme.Lorsque vous accédez à stockage Azure compte (V2) ou Azure Data Lake Storage Gen2, le
IDENTITYdoit êtreSHARED ACCESS SIGNATURE.Pour obtenir un exemple, consultez Créer une source de données externe pour exécuter des opérations en bloc et récupérer des données de stockage Azure dans SQL Database.
Il existe plusieurs façons de créer une signature d’accès partagé :
Vous pouvez créer un jeton SAP en accédant au portail Azure><Your_Storage_Account>> Signature d’accès partagé> Autorisations de configuration>Generate SAS et chaîne de connexion. Pour plus d’informations, consultez Générer une signature d’accès partagé.
Vous pouvez créer et configurer une SAP avec Explorateur Stockage Azure.
Vous pouvez créer un jeton SAP par programmation via PowerShell, Azure CLI, .NET et l’API REST. Pour plus d’informations, consultez Accès limité aux ressources stockage Azure à l’aide de signatures d’accès partagé (SAP).
Le jeton SAS doit être configuré comme suit :
Lorsqu’un jeton SAP est généré, il inclut un point d’interrogation (' ?') au début du jeton. Excluez le début
?lorsqu’il est configuré en tant queSECRET.Utilisez une période d’expiration valide (toutes les dates sont au format UTC).
Accordez au moins l’autorisation en lecture sur le fichier qui doit être chargé (par exemple
srt=o&sp=r). Plusieurs signatures d’accès partagé peuvent être créées pour différents cas d’usage. Les autorisations doivent être accordées comme suit :Action Autorisation Lire les données d’un fichier Lire Lire les données de plusieurs fichiers et sous-dossiers Lire et Liste Utiliser Create External Table as Select (CETAS) Lecture, Création, Liste et Écriture Pour Stockage Blob Azure et Azure Data Lake Gen2 :
- Services autorisés :
Blobdoit être sélectionné pour générer le jeton SAS
- Services autorisés :
Services autorisés :
ContaineretObjectdoivent être sélectionnés pour générer le jeton SAS
Pour obtenir un exemple d’utilisation de CREDENTIAL avec le stockage d’objets compatible S3 et PolyBase, consultez Configuration de PolyBase pour accéder à des données externes dans le stockage d’objets compatible S3.
Pour créer des informations d’identification délimitées à la base de données, consultez CREATE DATABASE SCOPED CREDENTIAL.
Autorisations
Nécessite l’autorisation CONTROL sur la base de données dans SQL Server.
Verrouillage
Prend un verrou partagé sur l’objet EXTERNAL DATA SOURCE.
Sécurité
PolyBase prend en charge l’authentification basée sur le proxy pour la plupart de ces sources de données externes. Créez des informations d’identification au niveau de la base de données pour créer le compte proxy.
Mise à niveau vers SQL Server 2025
Dans SQL Server 2022 (16.x) et versions ultérieures, les sources de données externes Hadoop ne sont pas prises en charge. Il est nécessaire de recréer manuellement des sources de données externes précédemment créées avec TYPE = HADOOP, et toute table externe qui utilise cette source de données externe.
Les utilisateurs devront également configurer leurs sources de données externes pour utiliser de nouveaux connecteurs lors de la connexion à stockage Azure.
| Source de données externe | Du | À |
|---|---|---|
| Stockage Blob Azure | wasb[s] | ABS |
| ADLS Gen2 | abfs[s] | adls |
Exemples
Important
Pour plus d’informations sur l’installation et l’activation de PolyBase, consultez Installer PolyBase sur Windows.
R. Créer une source de données externe dans SQL Server pour référencer Oracle
Pour créer une source de données externe qui fait référence à Oracle, assurez-vous d’avoir des informations d’identification de niveau base de données. Vous pouvez également activer ou désactiver le push-down de calcul sur cette source de données.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL OracleProxyAccount
WITH IDENTITY = 'oracle_username',
SECRET = 'oracle_password';
CREATE EXTERNAL DATA SOURCE MyOracleServer
WITH (
LOCATION = 'oracle://145.145.145.145:1521',
PUSHDOWN = ON,
CREDENTIAL = OracleProxyAccount
);
Si vous le souhaitez, la source de données externe à Oracle peut utiliser l’authentification proxy pour fournir un contrôle d’accès affiné. Un utilisateur proxy peut être configuré pour disposer d’un accès limité par rapport à l’utilisateur dont l’identité est empruntée.
CREATE DATABASE SCOPED CREDENTIAL [OracleProxyCredential]
WITH IDENTITY = 'oracle_username',
SECRET = 'oracle_password';
CREATE EXTERNAL DATA SOURCE [OracleSalesSrvr]
WITH (
LOCATION = 'oracle://145.145.145.145:1521',
CONNECTION_OPTIONS = 'ImpersonateUser=%CURRENT_USER',
CREDENTIAL = [OracleProxyCredential]
);
Vous pouvez aussi vous authentifier en utilisant TNS.
À compter de SQL Server 2022 (16.x) Mise à jour cumulative 2, CREATE EXTERNAL DATA SOURCE prend désormais en charge l’utilisation de fichiers TNS lors de la connexion à Oracle.
Le paramètre CONNECTION_OPTIONS a été étendu et utilise désormais TNSNamesFile et ServerName comme variables pour parcourir le fichier tnsnames.ora et établir une connexion avec le serveur.
Dans l’exemple ci-dessous, pendant l’exécution SQL Server recherche l’emplacement du fichier tnsnames.ora spécifié par TNSNamesFile et recherche le port hôte et réseau spécifié par ServerName.
CREATE EXTERNAL DATA SOURCE [external_data_source_name]
WITH (
LOCATION = N'oracle://XE',
CREDENTIAL = [OracleCredentialTest],
CONNECTION_OPTIONS = N'TNSNamesFile=C:\Temp\tnsnames.ora;ServerName=XE'
);
B. Créer une source de données externe pour référencer une instance nommée SQL Server via la connectivité PolyBase
Applies to : SQL Server 2019 (15.x) et versions ultérieures.
Pour créer une source de données externe qui référence une instance nommée de SQL Server, utilisez CONNECTION_OPTIONS pour spécifier le nom de l’instance.
Tout d’abord, créez les informations d’identification délimitées par la base de données, stockant les informations d’identification pour une connexion SQL authentifiée. Le connecteur ODBC SQL pour PolyBase prend uniquement en charge l’authentification de base. 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. L’exemple suivant crée des informations d’identification étendues à la base de données, fournissez votre propre connexion et mot de passe.
CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username',
SECRET = 'password';
Dans l’exemple suivant, WINSQL2019 est le nom d’hôte, et SQL2019 le nom de l’instance.
'Server=%s\SQL2019' est la paire clé-valeur.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019',
CONNECTION_OPTIONS = 'Server=%s\SQL2019',
CREDENTIAL = SQLServerCredentials
);
Vous pouvez également utiliser un port pour vous connecter à une instance SQL Server par défaut.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019:58137',
CREDENTIAL = SQLServerCredentials
);
Chapitre C. Créer une source de données externe pour référencer un réplica secondaire lisible de Always On groupe de disponibilité
Applies to : SQL Server 2019 (15.x) et versions ultérieures.
Pour créer une source de données externe qui fait référence à un réplica secondaire lisible de SQL Server, utilisez CONNECTION_OPTIONS pour spécifier le ApplicationIntent=ReadOnly. En outre, vous devez définir la base de données de disponibilité comme Database={dbname} dans CONNECTION_OPTIONS, ou définir la base de données de disponibilité comme base de données par défaut de la connexion utilisée pour les informations d’identification délimitées à la base de données. Vous devez effectuer cette opération sur tous les réplicas de disponibilité du groupe de disponibilité.
Tout d’abord, créez les informations d’identification délimitées par la base de données, stockant les informations d’identification pour une connexion SQL authentifiée. Le connecteur ODBC SQL pour PolyBase prend uniquement en charge l’authentification de base. 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. L’exemple suivant crée des informations d’identification étendues à la base de données, fournissez votre propre connexion et mot de passe.
CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username',
SECRET = 'password';
Ensuite, créez la nouvelle source de données externe.
Que vous soyez inclus Database=dbname dans la CONNECTION_OPTIONS base de données de disponibilité ou défini comme base de données par défaut pour la connexion dans les informations d’identification délimitées à la base de données, vous devez toujours fournir le nom de la base de données via un nom en trois parties dans l’instruction CREATE EXTERNAL TABLE, dans le paramètre LOCATION. Pour un exemple, voir CREATE EXTERNAL TABLE
Dans l’exemple suivant, WINSQL2019AGL est le nom de l’écouteur de groupe de disponibilité, et dbname le nom de la base de données ciblée par l’instruction CREATE EXTERNAL TABLE.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
CREDENTIAL = SQLServerCredentials
);
Vous pouvez illustrer le comportement de redirection du groupe de disponibilité en spécifiant ApplicationIntent et en créant une table externe sur l’affichage sys.serverssystème. Dans l’exemple de script suivant, deux sources de données externes sont créées et une table externe est créée pour chacune d’elles. Utilisez les vues pour tester le serveur qui répond à la connexion. Des résultats similaires peuvent également être obtenus via la fonctionnalité de routage en lecture seule. Pour plus d'informations, consultez la section Configurer le routage en lecture seule pour un groupe de disponibilité Always On .
CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadOnlyIntent]
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
CREDENTIAL = [SQLServerCredentials]
);
GO
CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadWriteIntent]
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadWrite',
CREDENTIAL = [SQLServerCredentials]
);
GO
Dans la base de données du groupe de disponibilité, créez une vue pour retourner sys.servers et le nom de l’instance locale, ce qui vous permet d’identifier le réplica qui répond à la requête. Pour plus d’informations, consultez sys.servers.
CREATE VIEW vw_sys_servers AS
SELECT [name]
FROM sys.servers
WHERE server_id = 0;
GO
Ensuite, créez une table externe sur l’instance source :
CREATE EXTERNAL TABLE vw_sys_servers_ro
(
name SYSNAME NOT NULL
)
WITH (
DATA_SOURCE = [DataSource_SQLInstanceListener_ReadOnlyIntent],
LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO
CREATE EXTERNAL TABLE vw_sys_servers_rw
(
name SYSNAME NOT NULL
)
WITH (
DATA_SOURCE = [DataSource_SQLInstanceListener_ReadWriteIntent],
LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO
SELECT [name]
FROM dbo.vw_sys_servers_ro;
--should return secondary replica instance
SELECT [name]
FROM dbo.vw_sys_servers_rw;
--should return primary replica instance
GO
D. Créer une source de données externe pour interroger un fichier Parquet dans le stockage d’objets compatible S3 avec PolyBase
Applies to : SQL Server 2022 (16.x) et versions ultérieures.
L’exemple de script suivant crée une source de données externe s3_ds dans la base de données utilisateur source dans SQL Server. La source de données externe fait référence aux informations d’identification de portée étendue à la base de données s3_dc.
CREATE DATABASE SCOPED CREDENTIAL s3_dc
WITH IDENTITY = 'S3 Access Key', -- for S3-compatible object storage the identity must always be S3 Access Key
SECRET = '<access_key_id>:<secret_key_id>'; -- provided by the S3-compatible object storage
GO
CREATE EXTERNAL DATA SOURCE s3_ds
WITH (
LOCATION = 's3://<ip_address>:<port>/',
CREDENTIAL = s3_dc
);
GO
Vérifiez la nouvelle source de données externe avec sys.external_data_sources.
SELECT *
FROM sys.external_data_sources;
Ensuite, l’exemple suivant illustre l’utilisation de T-SQL pour interroger un fichier Parquet stocké dans le stockage d’objets compatible S3 au moyen d’une requête OPENROWSET. Pour plus d’informations, consultez Virtualisation d’un fichier Parquet dans un stockage d’objets compatible S3 avec PolyBase.
SELECT *
FROM OPENROWSET (
BULK '/<bucket>/<parquet_folder>',
FORMAT = 'PARQUET',
DATA_SOURCE = 's3_ds'
) AS [cc];
E. Créer une source de données externe avec ODBC générique vers PostgreSQL
Comme dans les exemples précédents, créez d’abord une clé principale de base de données et des informations d’identification délimitées à la base de données. Les informations d’identification incluses dans l’étendue de la base de données seront utilisées pour la source de données externe. Cet exemple suppose également qu’un fournisseur de données ODBC générique pour PostgreSQL est installé sur le serveur.
Dans cet exemple, le fournisseur de données ODBC générique est utilisé pour établir une connexion à un serveur de base de données PostgreSQL dans le même réseau, où le nom de domaine complet du serveur PostgreSQL est POSTGRES1, avec le port par défaut TCP 5432.
CREATE EXTERNAL DATA SOURCE POSTGRES1
WITH (
LOCATION = 'odbc://POSTGRES1.domain:5432',
CONNECTION_OPTIONS = 'Driver={PostgreSQL Unicode(x64)};',
CREDENTIAL = postgres_credential
);
stockage Azure
Créer une signature d’accès partagé
Pour Stockage Blob Azure et Azure Data Lake Gen2, la méthode d’authentification prise en charge est une signature d’accès partagé (SAP). Pour générer facilement un jeton de signature d’accès partagé, procédez comme suit. Pour plus d’informations, consultez Informations d’identification.
- Accédez au portail Azure et au compte de stockage souhaité.
- Accédez au conteneur souhaité dans le menu Stockage des données.
- Sélectionnez Jetons d’accès partagé.
- Choisissez l’autorisation appropriée en fonction de l’action souhaitée. Pour référence, utilisez le tableau suivant :
| Action | Autorisation |
|---|---|
| Lire les données d’un fichier | Lire |
| Lire les données de plusieurs fichiers et sous-dossiers | Lire et Liste |
| Utiliser Create External Table as Select (CETAS) | Lire, Créer et Écrire |
- Choisir la date d’expiration du jeton.
- Générer un jeton SAS et une URL.
- Copier le jeton SAS.
F. Créer une source de données externe pour accéder aux données dans Stockage Blob Azure à l’aide de l’interface abs://
Applies to : SQL Server 2022 (16.x) et versions ultérieures.
Utilisez un nouveau préfixe abs pour stockage Azure Compte v2. Le préfixe abs prend en charge l’authentification à l’aide de SHARED ACCESS SIGNATURE. Le préfixe abs remplace wasb utilisé dans les versions précédentes. HADOOP n’est plus pris en charge, il n’est plus nécessaire d’utiliser TYPE = BLOB_STORAGE.
La clé de compte de stockage Azure n’est plus nécessaire, à la place à l’aide du jeton SAP, comme nous pouvons le voir dans l’exemple suivant :
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD= '<password>';
GO
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredentialv2
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', -- to use SAS the identity must be fixed as-is
SECRET = '<Blob_SAS_Token>';
GO
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/',
CREDENTIAL = AzureStorageCredentialv2
);
Pour obtenir un exemple plus détaillé sur l’accès aux fichiers CSV stockés dans Stockage Blob Azure, consultez Virtualize CSV avec PolyBase.
G. Créer une source de données externe pour accéder aux données dans Azure Data Lake Gen2
Applies to : SQL Server 2022 (16.x) et versions ultérieures.
Utilisez un nouveau préfixe adls pour Azure Data Lake Gen2, en remplaçant abfs utilisé dans les versions précédentes. Le préfixe adls prend également en charge le jeton SAP comme méthode d’authentification, comme le montre l’exemple suivant :
--Create a database scoped credential using SAS Token
CREATE DATABASE SCOPED CREDENTIAL datalakegen2
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<DataLakeGen2_SAS_Token>';
GO
CREATE EXTERNAL DATA SOURCE data_lake_gen2_dfs
WITH (
LOCATION = 'adls://<container>@<storage_account>.dfs.core.windows.net',
CREDENTIAL = datalakegen2
);
Pour obtenir un exemple plus détaillé sur l’accès aux fichiers delta stockés sur Azure Data Lake Gen2, consultez Virtualize delta table with PolyBase.
Exemples : opérations en bloc
Important
N’ajoutez pas de paramètres de signature de fin /, de nom de fichier ou d’accès partagé à la fin de l’URL lors de la LOCATION configuration d’une source de données externe pour les opérations en bloc.
H. Créer une source de données externe pour les opérations en bloc qui récupèrent des données à partir de stockage Azure
Applies to : SQL Server 2022 (16.x) et versions ultérieures.
Utilisez la source de données suivante pour les opérations en bloc à l’aide de BULK INSERT ou OPENROWSET. L’identifiant utilisé doit donner à l’identité la valeur SHARED ACCESS SIGNATURE, ne doit pas avoir le premier ? dans le jeton SAS, doit avoir au moins les droits de lecture sur le fichier à charger (par exemple srt=o&sp=r), et doit présenter une période d’expiration valide (toutes les dates sont en heure UTC). Pour plus d’informations sur les signatures d’accès partagé, consultez Utilisation des signatures d’accès partagé (SAP).
CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
-- Remove ? from the beginning of the SAS token
SECRET = '<azure_shared_access_signature>';
CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/',
CREDENTIAL = AccessAzureInvoices,
);
Je. Créez une source de données externe à l’aide de TDS 8.0 pour vous connecter à un autre SQL Server
Applies à : SQL Server 2025 (17.x) et versions ultérieures.
Lorsque vous utilisez la dernière Microsoft ODBC Driver 18 pour SQL Server, vous devez utiliser l’option Encryption sous CONNECTION_OPTIONS et TrustServerCertificate est également prise en charge. Si Encryption ce n’est pas spécifié, le comportement par défaut est Encrypt=Yes;TrustServerCertificate=No;et vous avez besoin d’un certificat de serveur.
Dans cet exemple, l’authentification SQL est utilisée. Pour protéger les informations d’identification, vous avez besoin d’une clé principale de base de données (DMK). Pour plus d’informations, consultez CREATE MASTER KEY. L’exemple suivant crée des informations d’identification délimitées à la base de données, avec une connexion personnalisée et un mot de passe.
CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = '<username>',
SECRET = '<password>';
Le nom du serveur cible est WINSQL2022, le port 58137et il s’agit d’une instance par défaut. En spécifiant Encrypt=Strict, la connexion utilise TDS 8.0 et le certificat de serveur est toujours vérifié. Dans cet exemple, l’utilisation HostnameinCertificate est WINSQL2022:
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2022:58137',
CONNECTION_OPTIONS = 'Encrypt=Strict;HostnameInCertificate=WINSQL2022;'
CREDENTIAL = SQLServerCredentials
);
J. Créer une source de données externe à l’aide de l’option chiffrement et TrustServerCertificate
À la suite de l’exemple précédent, voici deux exemples de code. Le premier extrait de code a Encryption et TrustServerCertificate est défini.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2022:58137',
CONNECTION_OPTIONS = 'Encrypt=Yes;HostnameInCertificate=WINSQL2022;TrustServerCertificate=Yes;'
CREDENTIAL = SQLServerCredentials
);
L’extrait de code suivant n’a Encryption pas été activé.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2022:58137',
CONNECTION_OPTIONS = 'Encrypt=no;'
CREDENTIAL = SQLServerCredentials
);
Contenu connexe
- ALTER EXTERNAL DATA SOURCE (Transact-SQL)
- CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREATE EXTERNAL TABLE (Transact-SQL)
- sys.external_data_sources (Transact-SQL)
- Utilisation des signatures d’accès partagé (SAP)
- configuration de connectivité PolyBase (Transact-SQL)
* Base de données SQL *
Vue d’ensemble : Azure SQL Database
Applies à : Azure SQL Database
Crée une source de données externe pour des requêtes élastiques. Des sources de données externes sont utilisées pour établir la connectivité et prendre en charge ces principaux cas d’utilisation :
- Virtualisation des données (préversion)
- Les opérations de chargement en bloc à l’aide de
BULK INSERTouOPENROWSET - Interroger une base de données SQL distante ou des instances de Azure Synapse à l’aide de SQL Database avec requêteelastique
- Interrogation d’une base SQL Database partitionnée à l’aide de requêtes élastiques
conventions de syntaxe Transact-SQL
Syntaxe
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] TYPE = { BLOB_STORAGE | RDBMS | SHARD_MAP_MANAGER } ]
[ [ , ] DATABASE_NAME = '<database_name>' ]
[ [ , ] SHARD_MAP_NAME = '<shard_map_manager>' ] )
[ ; ]
Les arguments
data_source_name
Spécifie le nom défini par l’utilisateur de la source de données. Ce nom doit être unique dans la base de données de SQL Database.
LOCATION = '<prefix> ://<path[:p ort]>'
Fournit le protocole de connectivité et le chemin d’accès à la source de données externe.
| Source de données externe | Préfixe de l’emplacement du connecteur | Chemin d’emplacement | Disponibilité |
|---|---|---|---|
| opérations en bloc | https |
<storage_account>.blob.core.windows.net/<container> |
|
| Requête élastique (partition) | Non requis | <shard_map_server_name>.database.windows.net |
|
| Requête élastique (distant) | Non requis | <remote_server_name>.database.windows.net |
|
| EdgeHub | edgehub |
edgehub:// |
Disponible dans Azure SQL Edgeonly. EdgeHub est toujours local sur l’instance de Azure SQL Edge. Par conséquent, il n’est pas nécessaire de spécifier un chemin d’accès ou une valeur de port. |
| Kafka | kafka |
kafka://<kafka_bootstrap_server_name_ip>:<port_number> |
Disponible dans Azure SQL Edgeonly. |
| compte stockage Azure (v2) | abs |
abs://<container_name>@<storage_account_name>.blob.core.windows.net/ou abs://<storage_account_name>.blob.core.windows.net/
<container_name> |
|
| Azure Data Lake Storage Gen2 | adls |
adls://<container_name>@<storage_account_name>.dfs.core.windows.net/ou adls://<storage_account_name>.dfs.core.windows.net/<container_name> |
Chemin d’emplacement :
-
<shard_map_server_name>= Nom du serveur logique dans Azure qui héberge le gestionnaire de cartes de partitions. L’argumentDATABASE_NAMEfournit la base de données utilisée pour héberger la carte de partitions et l’argumentSHARD_MAP_NAMEest utilisé pour la carte de partitions proprement dite. -
<remote_server_name>= le nom du serveur logique cible pour la requête élastique. Le nom de la base de données est spécifié avec l’argumentDATABASE_NAME.
Remarques et conseils supplémentaires lors de la définition de l’emplacement :
- Le Moteur de base de données ne vérifie pas l'existence de la source de données externe lors de la création de l'objet. Pour valider, créez une table externe à l’aide d’une source de données externe.
DIPLÔME = credential_name
Spécifie les informations d’identification limitées à la base de données servant à l’authentification auprès de la source de données externe.
Remarques et conseils supplémentaires lors de la création d’informations d’identification :
- Pour charger des données de stockage Azure dans Azure SQL Database, utilisez une signature d’accès partagé (jeton SAP).
-
CREDENTIALest requis uniquement si les données ont été sécurisées.CREDENTIALn’est pas requis pour les jeux de données qui autorisent l’accès anonyme. - Quand
TYPE=BLOB_STORAGE, les informations d’identification doivent être créées avec l’identitéSHARED ACCESS SIGNATURE. - Lorsque la connexion à stockage Azure utilise le connecteur WASB[s], l’authentification doit être effectuée avec une clé de compte de stockage, et non avec une signature d’accès partagé (SAP).
- Quand
TYPE=HADOOP, les informations d’identification doivent être créées à l’aide de la clé de compte de stockage en tant queSECRET. -
TYPE=BLOB_STORAGEest autorisé uniquement pour les opérations en bloc ; vous ne pouvez pas créer de tables externes pour une source de données externe avecTYPE=BLOB_STORAGE.
Il existe plusieurs façons de créer une signature d’accès partagé :
Vous pouvez créer un jeton SAS en accédant au portail Azure -><Your_Storage_Account> -> signature d’accès partagé -> Configurer les autorisations -> Générer une SAP et chaîne de connexion. Pour plus d’informations, consultez Générer une signature d’accès partagé.
Vous pouvez créer et configurer une SAP avec Explorateur Stockage Azure.
Vous pouvez créer un jeton SAP par programmation via PowerShell, Azure CLI, .NET et l’API REST. Pour plus d’informations, consultez Accès limité aux ressources stockage Azure à l’aide de signatures d’accès partagé (SAP).
Le jeton SAS doit être configuré comme suit :
- Lorsqu’un jeton SAP est généré, il inclut un point d’interrogation (' ?') au début du jeton. Retirez le caractère
?de début lorsqu’il est configuré en tant que SECRET. - Utilisez une période d’expiration valide (toutes les dates sont au format UTC).
- Lorsqu’un jeton SAP est généré, il inclut un point d’interrogation (' ?') au début du jeton. Retirez le caractère
Accordez au moins l’autorisation en lecture sur le fichier qui doit être chargé (par exemple
srt=o&sp=r). Plusieurs signatures d’accès partagé peuvent être créées pour différents cas d’usage. Les autorisations doivent être accordées comme suit :Action Autorisation Lire les données d’un fichier Lire Lire les données de plusieurs fichiers et sous-dossiers Lire et Liste Utiliser Create External Table as Select (CETAS) Lire, Créer et Écrire
Pour obtenir un exemple d’utilisation d’un CREDENTIAL avec SHARED ACCESS SIGNATURE et TYPE = BLOB_STORAGE, consultez Créer une source de données externe pour exécuter des opérations en bloc et récupérer des données de stockage Azure dans SQL Database
Pour créer des informations d’identification délimitées à la base de données, consultez CREATE DATABASE SCOPED CREDENTIAL.
TYPE = * [ BLOB_STORAGE | SGBDR | SHARD_MAP_MANAGER ] *
Spécifie le type de source de données externe en cours de configuration. Ce paramètre n’est pas toujours obligatoire et doit uniquement être fourni pour certaines sources de données externes.
- Utilisez
RDBMSpour les requêtes sur plusieurs bases de données utilisant les requêtes élastiques à partir d’une base de données SQL. - Utilisez
SHARD_MAP_MANAGERlors de la création d’une source de données externe lorsque vous vous connectez à une base de données SQL partitionnée.
Important
La requête élastique en mode gestionnaire de cartes de partitions (partitionnement horizontal), à l’aide EXTERNAL DATA SOURCE du type SHARD_MAP_MANAGER, atteint la fin de la prise en charge le 31 mars 2027. Après cette date, les charges de travail existantes continueront de fonctionner, mais ne recevront plus de prise en charge, et la création de nouvelles sources de données externes de type SHARD_MAP_MANAGER ne sera plus possible. Pour connaître les options de migration, consultez le guide de migration à partir du mode gestionnaire de cartes de partitions de requêtes élastiques.
- L’utilisation
BLOB_STORAGEest utilisée uniquement avec lehttpspréfixe. Pourabdetadlsles préfixes, ne fournissezTYPEpas .
Important
Ne définissez TYPE pas si vous utilisez une autre source de données externe.
DATABASE_NAME = database_name
Configurez cet argument lorsque TYPE a la valeur RDBMS ou SHARD_MAP_MANAGER.
| TYPE | Valeur de DATABASE_NAME |
|---|---|
RDBMS |
Le nom de la base de données distante sur le serveur fourni à l’aide de LOCATION |
SHARD_MAP_MANAGER |
Nom de la base de données faisant office de Gestionnaire de la carte de partitions |
Pour obtenir un exemple montrant comment créer une source de données externe où TYPE = RDBMS, reportez-vous à Créer une source de données externe SGBDR.
SHARD_MAP_NAME = shard_map_name
Utilisé lorsque l’argument TYPE a la valeur SHARD_MAP_MANAGER uniquement pour définir le nom de la carte de partitions.
Pour un exemple montrant comment créer une source de données externe où TYPE = SHARD_MAP_MANAGER, consultez Créer une source de données externe de Gestionnaire de la carte des partitions
Autorisations
Nécessite l’autorisation CONTROL sur la base de données dans Azure SQL Database.
Verrouillage
Prend un verrou partagé sur l’objet EXTERNAL DATA SOURCE.
Exemples
R. Créer une source de données externe de Gestionnaire de cartes de partitions
Important
La requête élastique en mode gestionnaire de cartes de partitions (partitionnement horizontal), à l’aide EXTERNAL DATA SOURCE du type SHARD_MAP_MANAGER, atteint la fin de la prise en charge le 31 mars 2027. Après cette date, les charges de travail existantes continueront de fonctionner, mais ne recevront plus de prise en charge, et la création de nouvelles sources de données externes de type SHARD_MAP_MANAGER ne sera plus possible. Pour connaître les options de migration, consultez le guide de migration à partir du mode gestionnaire de cartes de partitions de requêtes élastiques.
Pour créer une source de données externe pour référencer un SHARD_MAP_MANAGER, spécifiez le nom du serveur SQL Database qui héberge le gestionnaire de cartes de partitions dans SQL Database ou une base de données SQL Server sur une machine virtuelle.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
CREATE DATABASE SCOPED CREDENTIAL ElasticDBQueryCred
WITH IDENTITY = '<username>',
SECRET = '<password>';
CREATE EXTERNAL DATA SOURCE MyElasticDBQueryDataSrc
WITH (
TYPE = SHARD_MAP_MANAGER,
LOCATION = '<server_name>.database.windows.net',
DATABASE_NAME = 'ElasticScaleStarterKit_ShardMapManagerDb',
CREDENTIAL = ElasticDBQueryCred,
SHARD_MAP_NAME = 'CustomerIDShardMap'
);
Pour un tutoriel détaillé, consultez Bien démarrer avec les requêtes élastiques pour le partitionnement (partitionnement horizontal).
B. Créer une source de données externe de SGBDR
Pour créer une source de données externe pour faire référence à un SGBDR, spécifie le nom du serveur SQL Database de la base de données distante dans SQL Database.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
CREATE DATABASE SCOPED CREDENTIAL SQL_Credential
WITH IDENTITY = '<username>',
SECRET = '<password>';
CREATE EXTERNAL DATA SOURCE MyElasticDBQueryDataSrc
WITH (
TYPE = RDBMS,
LOCATION = '<server_name>.database.windows.net',
DATABASE_NAME = 'Customers',
CREDENTIAL = SQL_Credential
);
Pour un tutoriel détaillé sur le SGBDR, consultez Prise en main des requêtes de bases de données croisées (partitionnement vertical).
Exemples : Opérations en bloc
Important
N’ajoutez pas de paramètres de signature de fin /, de nom de fichier ou d’accès partagé à la fin de l’URL lors de la LOCATION configuration d’une source de données externe pour les opérations en bloc.
Chapitre C. Créer une source de données externe pour les opérations en bloc qui récupèrent des données à partir de stockage Azure
Utilisez la source de données suivante pour les opérations en bloc à l’aide de BULK INSERT ou OPENROWSET BULK. L’identifiant utilisé doit donner à l’identité la valeur SHARED ACCESS SIGNATURE, ne doit pas avoir le premier ? dans le jeton SAS, doit avoir au moins les droits de lecture sur le fichier à charger (par exemple srt=o&sp=r), et doit présenter une période d’expiration valide (toutes les dates sont en heure UTC). Pour plus d’informations sur les signatures d’accès partagé, consultez Utilisation des signatures d’accès partagé (SAP).
Créez une source de données externe pour Stockage Blob Azure (ABS) à l’aide de l’identité managée :
CREATE DATABASE SCOPED CREDENTIAL DSC_MI
WITH IDENTITY = 'Managed Identity';
--Create external data source pointing to the file path, and referencing database-scoped credential:
CREATE EXTERNAL DATA SOURCE PrivateABS
WITH (
LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/',
CREDENTIAL = [DSC_MI]
);
Créez une source de données externe pour Azure Data Lake Gen2 (ADLS) à l’aide de l’identité utilisateur :
CREATE DATABASE SCOPED CREDENTIAL DSC_ADLS
WITH IDENTITY = 'User Identity';
--Create external data source pointing to the file path, and referencing database-scoped credential:
CREATE EXTERNAL DATA SOURCE PrivateADLS
WITH (
LOCATION = 'adls://<container>@<storage_account_name>.dfs.core.windows.net/',
CREDENTIAL = [DSC_ADLS]
);
Pour voir une utilisation de cet exemple, consultez BULK INSERT.
Exemples : Azure SQL Edge
Important
Pour plus d’informations sur la configuration des données externes pour Azure SQL Edge, consultez Data streaming dans Azure SQL Edge.
R. Créer une source de données externe pour faire référence à Kafka
Applies to :Azure SQL Edgeonly
Dans cet exemple, la source de données externe est un serveur Kafka avec l’adresse IP xxx.xxx.xxx.xxx et à l’écoute sur le port 1900. La source de données externe Kafka est uniquement destinée au streaming de données et ne prend pas en charge la transmission de prédicats.
-- Create an External Data Source for Kafka
CREATE EXTERNAL DATA SOURCE MyKafkaServer
WITH (
LOCATION = 'kafka://xxx.xxx.xxx.xxx:1900'
);
B. Créer une source de données externe pour faire référence à EdgeHub
Applies to :Azure SQL Edgeonly
Dans cet exemple, la source de données externe est un EdgeHub s’exécutant sur le même appareil de périphérie que Azure SQL Edge. La source de données externe edgeHub est uniquement destinée à la diffusion en continu des données et ne prend pas en charge la transmission de prédicats.
-- Create an External Data Source for Kafka
CREATE EXTERNAL DATA SOURCE MyEdgeHub
WITH (
LOCATION = 'edgehub://'
);
Contenu connexe
* Azure Synapse
Analytique*
Vue d’ensemble : Azure Synapse Analytics
Applies à : Azure Synapse Analytics
Crée une source de données externe pour la virtualisation des données. Les sources de données externes sont utilisées pour établir la connectivité et prendre en charge le cas d’usage principal de la virtualisation et du chargement des données à partir de sources externes. Pour plus d’informations, consultez Utilisation de tables externes avec Synapse SQL.
Important
Pour créer une source de données externe pour interroger une ressource Azure Synapse Analytics à l’aide de Azure SQL Database avec , voir CREATE EXTERNAL DATA SOURCE for Azure SQL Database.
conventions de syntaxe Transact-SQL
Syntaxe
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] TYPE = HADOOP ]
)
[ ; ]
Les arguments
data_source_name
Spécifie le nom défini par l’utilisateur de la source de données. Le nom doit être unique dans le Azure SQL Database dans Azure Synapse Analytics.
LOCATION = '<prefix> ://<path>'
Fournit le protocole de connectivité et le chemin d’accès à la source de données externe.
| Source de données externe | Préfixe de l’emplacement du connecteur | Chemin d’emplacement |
|---|---|---|
| Data Lake Storage* Gen1 | adl |
<storage_account>.azuredatalake.net |
| Data Lake Storage Gen2 | abfs[s] |
<container>@<storage_account>.dfs.core.windows.net |
| Stockage Blob Azure | wasbs |
<container>@<storage_account>.blob.core.windows.net |
| Stockage Blob Azure | https |
<storage_account>.blob.core.windows.net/<container>/subfolders |
| Data Lake Storage Gen1 | http[s] |
<storage_account>.azuredatalakestore.net/webhdfs/v1 |
| Data Lake Storage Gen2 | http[s] |
<storage_account>.dfs.core.windows.net/<container>/subfolders |
| Data Lake Storage Gen2 | wasb[s] |
<container>@<storage_account>.blob.core.windows.net |
* Microsoft Azure Data Lake Storage Gen1 a un support limité, Gen2 est recommandé pour tous les nouveaux développements.
| Source de données externe | Préfixe de l’emplacement du connecteur | Pools SQL dédiés : PolyBase | Pools SQL dédiés : native* | Pools SQL serverless |
|---|---|---|---|---|
| Data Lake Storage** Gen1 | adl |
Non | Non | Oui |
| Data Lake Storage Gen2 | abfs[s] |
Oui | Oui | Oui |
| Stockage Blob Azure | wasbs |
Oui | Oui*** | Oui |
| Stockage Blob Azure | https |
Non | Oui | Oui |
| Data Lake Storage Gen1 | http[s] |
Non | Non | Oui |
| Data Lake Storage Gen2 | http[s] |
Oui | Oui | Oui |
| Data Lake Storage Gen2 | wasb[s] |
Oui | Oui | Oui |
* Les pools SQL serverless et dédiés dans Azure Synapse Analytics utilisent différentes bases de code pour la virtualisation des données. Les pools SQL serverless prennent en charge une technologie native de virtualisation de données. Les pools SQL dédiés, eux, sont compatibles avec la virtualisation des données native et PolyBase. La virtualisation des données PolyBase est utilisée lorsque la source de données externe (EXTERNAL DATA SOURCE) est créée avec TYPE=HADOOP.
** Microsoft Azure Data Lake Storage Gen1 a un support limité, Gen2 est recommandé pour tous les nouveaux développements.
*** Le connecteur wasbs, plus sécurisé que wasb, est recommandé. Seule la virtualisation des données natives dans les pools SQL dédiés (où TYPE n’est pas égal à HADOOP) prend en charge wasb.
Chemin d’emplacement :
-
<container>= le conteneur du compte de stockage contenant les données. Les conteneurs racines sont en lecture seule, donc les données ne peuvent pas être réécrites sur le conteneur. -
<storage_account>= nom du compte de stockage de la ressource Azure.
Remarques et conseils supplémentaires lors de la définition de l’emplacement :
- L’option par défaut consiste à utiliser
enable secure SSL connectionslors de l’approvisionnement Azure Data Lake Storage Gen2. Lorsque cette option est activée, vous devez utiliserabfsslorsqu’une connexion TLS/SSL sécurisée est sélectionnée, bien queabfsscela fonctionne également pour les connexions TLS non sécurisées. Pour plus d’informations, consultez the Azure pilote de système de fichiers blob (ABFS). - Azure Synapse ne vérifie pas l'existence de la source de données externe lors de la création de l'objet. Pour valider, créez une table externe à l’aide d’une source de données externe.
- Utilisez la même source de données externe pour toutes les tables lors de l’interrogation de Hadoop afin de garantir la cohérence des paramètres sémantiques de requête.
- Le préfixe
https:vous permet d’utiliser un sous-dossier dans le chemin.httpsn’est pas disponible pour toutes les méthodes d’accès aux données. -
wasbsest recommandé, car il permet d’envoyer les données au moyen d’une connexion TLS sécurisée. - Les espaces de noms hiérarchiques ne sont pas pris en charge avec Azure comptes de stockage V2 lors de l'accès aux données à l'aide de l'interface héritée
wasb://, mais l'utilisation dewasbs://prend en charge les espaces de noms hiérarchiques.
DIPLÔME = credential_name
facultatif. Spécifie des informations d’identification délimitées à la base de données pour l’authentification auprès de la source de données externe. Une source de données externe sans informations d'identification peut accéder au compte de stockage public ou utiliser l'identité Microsoft Entra de l'appelant pour accéder aux fichiers sur Azure stockage.
Remarques et conseils supplémentaires lors de la création d’informations d’identification :
- Pour charger des données de stockage Azure ou de Azure Data Lake Store (ADLS) Gen2 dans Azure Synapse Analytics, utilisez une clé stockage Azure.
-
CREDENTIALest requis uniquement si les données ont été sécurisées.CREDENTIALn’est pas requis pour les jeux de données qui autorisent l’accès anonyme.
Pour créer des informations d’identification délimitées à la base de données, consultez CREATE DATABASE SCOPED CREDENTIAL.
Dans le pool SQL serverless, les informations d’identification délimitées à la base de données peuvent spécifier l’identité managée de l’espace de travail, le nom du principal de service ou le jeton de signature d’accès partagé (SAP). L’accès via une identité utilisateur, également appelée Microsoft Entra passthrough, est également possible dans les informations d’identification délimitées par la base de données, comme l’accès anonyme au stockage disponible publiquement. Pour plus d’informations, consultez Types d’autorisation de stockage pris en charge.
Dans un pool SQL dédié, les informations d’identification délimitées à la base de données peuvent spécifier le jeton de signature d’accès partagé (SAP), la clé d’accès au stockage, le principal de service, l’identité managée de l’espace de travail ou Microsoft Entra passthrough.
TYPE = HADOOP
Facultatif, mais recommandé.
TYPE ne peut être spécifié qu’avec des pools SQL dédiés.
HADOOP représente alors la seule valeur autorisée. Les sources de données externes avec TYPE=HADOOP sont disponibles uniquement dans les pools SQL dédiés.
Utilisez HADOOP pour les implémentations héritées, sinon il est recommandé d’utiliser l’accès aux données natives plus récent. Ne spécifiez pas l’argument TYPE pour utiliser l’accès aux données natives plus récent.
Pour obtenir un exemple d’utilisation de TYPE = HADOOP pour charger des données à partir de stockage Azure, consultez Créer la source de données externe pour référencer Azure Data Lake Store Gen 1 ou 2 à l’aide d’un principal de service.
Les pools SQL serverless et dédiés dans Azure Synapse Analytics utilisent différentes bases de code pour la virtualisation des données. Les pools SQL serverless prennent en charge une technologie native de virtualisation de données. Les pools SQL dédiés, eux, sont compatibles avec la virtualisation des données native et PolyBase. La virtualisation des données PolyBase est utilisée lorsque la source de données externe (EXTERNAL DATA SOURCE) est créée avec TYPE=HADOOP.
Autorisations
Requiert l'autorisation CONTROL sur la base de données.
Verrouillage
Prend un verrou partagé sur l’objet EXTERNAL DATA SOURCE.
Sécurité
La plupart des sources de données externes prennent en charge l’authentification du proxy, en utilisant des informations d’identification au niveau de la base de données pour créer le compte proxy.
Les clés SAP (Shared Access Signature) sont prises en charge pour l’authentification auprès Azure Data Lake Comptes de stockage Store Gen 2. Les clients qui souhaitent s’authentifier à l’aide d’une signature d’accès partagé doivent créer des informations d’identification limitées à la base de données où IDENTITY = "Shared Access Signature" et entrer un jeton SAS comme secret.
Si vous créez des informations d’identification limitées à la base de données où IDENTITY = "Shared Access Signature" et que vous utilisez une valeur de clé de stockage comme secret, vous obtenez le message d’erreur suivant :
'HdfsBridge::isDirExist - Unexpected error encountered checking whether directory exists or not: AbfsRestOperationException: Operation failed: "Server failed to authenticate the request. Please refer to the information in the www-authenticate header.", 401, HEAD, [Storage path URL]'
Exemples
R. Créer une source de données externe pour accéder aux données dans stockage Azure à l’aide de l’interface wasb://
Dans cet exemple, la source de données externe est un compte stockage Azure V2 nommé logs. Le conteneur de stockage est nommé daily. La source de données externe stockage Azure concerne uniquement le transfert de données. Elle ne prend pas en charge le pushdown de prédicats. Les espaces de noms hiérarchiques ne sont pas pris en charge lors de l’accès aux données via l’interface wasb:// . Lors de la connexion au stockage Azure via wasb ou wasbs, l’authentification doit être effectuée avec une clé de compte de stockage, et non avec une signature d’accès partagé (SAP).
Cet exemple utilise la méthode d’accès héritée HADOOP Java. L’exemple suivant montre comment créer les informations d’identification délimitées à la base de données pour l’authentification à stockage Azure. Spécifiez la clé de compte stockage Azure dans le secret des informations d’identification de la base de données. Vous pouvez spécifier n'importe quelle chaîne dans l'identité d'informations d'identification délimitée à la base de données, car elle n'est pas utilisée pendant l'authentification pour Azure stockage.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH IDENTITY = '<my_account>',
SECRET = '<azure_storage_account_key>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
TYPE = HADOOP,
LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
CREDENTIAL = AzureStorageCredential
);
B. Créer une source de données externe pour référencer Azure Data Lake Store Gen 1 ou 2 à l’aide d’un principal de service
Azure Data Lake connectivité du Store peut être basée sur votre URI ADLS et le principal de service de votre application Microsoft Entra. Vous trouverez la documentation relative à la création de cette application dans l’authentification data lake store à l’aide de Microsoft Entra ID.
-- If you do not have a Master Key on your DW you will need to create one.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- These values come from your Microsoft Entra application used to authenticate to ADLS
CREATE DATABASE SCOPED CREDENTIAL ADLS_credential
WITH
-- IDENTITY = '<clientID>@<OAuth2.0TokenEndPoint>' ,
IDENTITY = '536540b4-4239-45fe-b9a3-629f97591c0c@https://login.microsoftonline.com/42f988bf-85f1-41af-91ab-2d2cd011da47/oauth2/token',
-- SECRET = '<KEY>'
SECRET = 'BjdIlmtKp4Fpyh9hIvr8HJlUida/seM5kQ3EpLAmeDI=';
-- For Gen 1 - Create an external data source
-- TYPE: HADOOP - PolyBase uses Hadoop APIs to access data in Azure Data Lake Storage.
-- LOCATION: Provide Data Lake Storage Gen 1 account name and URI
-- CREDENTIAL: Provide the credential created in the previous step
CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH (
TYPE = HADOOP,
LOCATION = 'adl://newyorktaxidataset.azuredatalakestore.net',
CREDENTIAL = ADLS_credential
);
-- For Gen2 - Create an external data source
-- TYPE: HADOOP - PolyBase uses Hadoop APIs to access data in Azure Data Lake Storage.
-- LOCATION: Provide Data Lake Storage Gen2 account name and URI
-- CREDENTIAL: Provide the credential created in the previous step
CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH (
-- Note the abfss endpoint when your account has secure transfer enabled
TYPE = HADOOP,
LOCATION = 'abfss://data@newyorktaxidataset.dfs.core.windows.net',
CREDENTIAL = ADLS_credential
);
Chapitre C. Créer une source de données externe pour référencer Azure Data Lake Store Gen2 à l’aide de la clé de compte de stockage
-- If you do not have a Master Key on your DW you will need to create one.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
CREATE DATABASE SCOPED CREDENTIAL ADLS_credential
WITH
-- IDENTITY = '<storage_account_name>' ,
IDENTITY = 'newyorktaxidata',
-- SECRET = '<storage_account_key>'
SECRET = 'yz5N4+bxSb89McdiysJAzo+9hgEHcJRJuXbF/uC3mhbezES/oe00vXnZEl14U0lN3vxrFKsphKov16C0w6aiTQ==';
-- Note this example uses a Gen2 secured endpoint (abfss)
CREATE EXTERNAL DATA SOURCE < data_source_name >
WITH (
LOCATION = 'abfss://2013@newyorktaxidataset.dfs.core.windows.net',
CREDENTIAL = ADLS_credential,
TYPE = HADOOP
);
D. Créer une source de données externe pour Azure Data Lake Store Gen2 à l’aide de abfs://
Il n'est pas nécessaire de spécifier SECRET lors de la connexion à Azure Data Lake compte Store Gen2 avec des identités managed.
-- If you do not have a Master Key on your DW you will need to create one
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
--Create database scoped credential with **IDENTITY = 'Managed Service Identity'**
CREATE DATABASE SCOPED CREDENTIAL msi_cred
WITH IDENTITY = 'Managed Service Identity';
--Create external data source with abfss:// scheme for connecting to your Azure Data Lake Store Gen2 account
CREATE EXTERNAL DATA SOURCE ext_datasource_with_abfss
WITH (
TYPE = HADOOP,
LOCATION = 'abfss://myfile@mystorageaccount.dfs.core.windows.net',
CREDENTIAL = msi_cred
);
Contenu connexe
- CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREATE EXTERNAL TABLE (Transact-SQL)
- CREATE EXTERNAL TABLE AS SELECT (Azure Synapse Analytics)
- CREATE TABLE AS SELECT (Azure Synapse Analytics)
- sys.external_data_sources (Transact-SQL)
- Utilisation des signatures d’accès partagé (SAP)
*Analytique
Système de plateforme (PDW) *
Présentation : Système de la plateforme d'analyse
S’applique à : Système de plateforme Analytics (PDW)
Crée une source de données externe pour des requêtes PolyBase. Les sources de données externes sont utilisées pour établir la connectivité et prendre en charge le cas d’usage suivant : virtualisation des données et chargement des données à l’aide de PolyBase dans SQL Server.
conventions de syntaxe Transact-SQL
Syntaxe
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] TYPE = HADOOP ]
[ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' )
[ ; ]
Les arguments
data_source_name
Spécifie le nom défini par l’utilisateur de la source de données. Le nom doit être unique au sein du serveur dans Analytics Platform System (PDW).
LOCATION = '<prefix> ://<path[:p ort]>'
Fournit le protocole de connectivité et le chemin d’accès à la source de données externe.
| Source de données externe | Préfixe de l’emplacement du connecteur | Chemin d’emplacement |
|---|---|---|
| Cloudera CDH ou Hortonworks HDP | hdfs |
<Namenode>[:port] |
| compte stockage Azure | wasb[s] |
<container>@<storage_account>.blob.core.windows.net |
Chemin d’emplacement :
-
<Namenode>= nom de l’ordinateur, URI du service de noms ou adresse IP deNamenodedans le cluster Hadoop. PolyBase doit résoudre tous les noms DNS utilisés par le cluster Hadoop. -
port= Le port d’écoute de la source de données externe. Dans Hadoop, le port se trouve à l’aide du paramètre de configurationfs.defaultFS. La valeur par défaut est 8020. -
<container>= le conteneur du compte de stockage contenant les données. Les conteneurs racines sont en lecture seule, donc les données ne peuvent pas être réécrites sur le conteneur. -
<storage_account>= nom du compte de stockage de la ressource Azure.
Remarques et conseils supplémentaires lors de la définition de l’emplacement :
- Le moteur PDW ne vérifie pas l’existence de la source de données externe lorsque l’objet est créé. Pour valider, créez une table externe à l’aide d’une source de données externe.
- Utilisez la même source de données externe pour toutes les tables lors de l’interrogation de Hadoop afin de garantir la cohérence des paramètres sémantiques de requête.
-
wasbsest recommandé, car il permet d’envoyer les données au moyen d’une connexion TLS sécurisée. - Les espaces de noms hiérarchiques ne sont pas pris en charge lorsqu'ils sont utilisés avec des comptes stockage Azure sur wasb://.
- Pour garantir la réussite des requêtes PolyBase lors du basculement du
NamenodeHadoop, envisagez d’utiliser une adresse IP virtuelle pour leNamenodedu cluster Hadoop. Si ce n’est pas le cas, exécutez ALTER EXTERNAL DATA SOURCE pour pointer vers le nouvel emplacement.
DIPLÔME = credential_name
Spécifie les informations d’identification limitées à la base de données servant à l’authentification auprès de la source de données externe.
Remarques et conseils supplémentaires lors de la création d’informations d’identification :
- Pour charger des données de stockage Azure dans Azure Synapse ou PDW, utilisez une clé stockage Azure.
-
CREDENTIALest requis uniquement si les données ont été sécurisées.CREDENTIALn’est pas requis pour les jeux de données qui autorisent l’accès anonyme.
TYPE = * [ HADOOP ] *
Spécifie le type de source de données externe en cours de configuration. Ce paramètre n’est pas toujours requis.
- Utilisez HADOOP lorsque la source de données externe est Cloudera CDH, Hortonworks HDP ou stockage Azure.
Pour obtenir un exemple d’utilisation de TYPE = HADOOP pour charger des données à partir de stockage Azure, consultez Créer une source de données externe pour référencer Hadoop.
RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:p ort]'
Dans SQL Server 2019 (15.x), ne spécifiez pas RESOURCE_MANAGER_LOCATION, sauf si vous vous connectez à Cloudera CDH, Hortonworks HDP, un compte stockage Azure.
Configurez cette valeur facultative lors de la connexion à Cloudera CDH, Hortonworks HDP ou à un compte stockage Azure uniquement. Pour obtenir la liste complète des versions Hadoop prises en charge, consultez la configuration de la connectivité PolyBase.
Lorsque RESOURCE_MANAGER_LOCATION est défini, l’optimiseur de requête prend une décision en fonction du coût pour améliorer les performances. Une tâche MapReduce peut être utilisée pour transmettre le calcul à Hadoop. En spécifiant RESOURCE_MANAGER_LOCATION, il est possible de considérablement réduire le volume des données transférées entre Hadoop et SQL, ce qui peut donc améliorer les performances des requêtes.
Si le Resource Manager n'est pas spécifié, l'envoi (push) du calcul vers Hadoop est désactivé pour les requêtes PolyBase. Créer une source de données externe pour faire référence à Hadoop avec la transmission activée fournit un exemple concret ainsi que des instructions complémentaires.
La valeur RESOURCE_MANAGER_LOCATION n’est pas validée lorsque vous créez la source de données externe. L’entrée d’une valeur incorrecte peut entraîner un échec de requête au moment de l’exécution chaque fois que la requête push-down est tentée, car la valeur fournie ne peut pas être résolue.
Pour que PolyBase fonctionne correctement avec une source de données externe Hadoop, les ports des composants de cluster Hadoop suivants doivent être ouverts :
- Ports HDFS
- Namenode
- Datanode
- Resource Manager
- Envoi du travail
- Historique des travaux
Si le port n’est pas spécifié, la valeur par défaut est déterminée d’après le paramètre actuel de la configuration de la « connexion à hadoop ».
| Connexion Hadoop | Port de Resource Manager par défaut |
|---|---|
1 |
50300 |
2 |
50300 |
3 |
8021 |
4 |
8032 |
5 |
8050 |
6 |
8032 |
7 |
8050 |
La table suivante présente les ports par défaut de ces composants. Il existe une dépendance de version Hadoop ainsi que la possibilité d’une configuration personnalisée qui n’utilise pas l’attribution de port par défaut.
| Composant de cluster Hadoop | Port par défaut |
|---|---|
| NameNode | 8020 |
| DataNode (transfert de données, port IPC sans privilège) | 50010 |
| DataNode (transfert de données, port IPC avec privilège) | 1019 |
| soumission de travaux Resource Manager (Hortonworks 1.3) | 50300 |
| Resource Manager soumission de travaux (Cloudera 4.3) | 8021 |
| soumission de travaux Resource Manager (Hortonworks 2.0 sur Windows, Cloudera 5.x sur Linux) | 8032 |
| soumission de travaux Resource Manager (Hortonworks 2.x, 3.0 sur Linux, Hortonworks 2.1-3 sur Windows) | 8050 |
| historique des travaux Resource Manager | 10020 |
Autorisations
Nécessite l’autorisation CONTROL sur la base de données dans Analytics Platform System (PDW).
Notes
Dans les versions précédentes de PDW, la création d’une source de données externe nécessitait des autorisations ALTER ANY EXTERNAL DATA SOURCE.
Verrouillage
Prend un verrou partagé sur l’objet EXTERNAL DATA SOURCE.
Sécurité
PolyBase prend en charge l’authentification basée sur le proxy pour la plupart de ces sources de données externes. Créez des informations d’identification au niveau de la base de données pour créer le compte proxy.
Un jeton SAP avec type HADOOP n’est pas pris en charge. Il est uniquement pris en charge avec un type = BLOB_STORAGE lorsqu’une clé d’accès de compte de stockage est utilisée à la place. Toute tentative de créer une source de données externe avec le type HADOOP et les informations d’identification SAS échoue avec l’erreur :
Msg 105019, Level 16, State 1 - EXTERNAL TABLE access failed due to internal error: 'Java exception raised on call to HdfsBridge_Connect. Java exception message: Parameters provided to connect to the Azure storage account aren't valid.: Error [Parameters provided to connect to the Azure storage account aren't valid.] occurred while accessing external file.'
Exemples
R. Créer une source de données externe pour faire référence à Hadoop
Pour créer une source de données externe afin de référencer Hortonworks HDP ou Cloudera CDH, spécifiez le nom de l’ordinateur ou l’adresse IP du port et du Namenode Hadoop.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://10.10.10.10:8050'
);
B. Créer une source de données externe pour faire référence à Hadoop avec transmission activée
Spécifiez l’option RESOURCE_MANAGER_LOCATION pour activer le calcul transmis à Hadoop pour des requêtes PolyBase. Une fois activé, PolyBase prend une décision basée sur les coûts pour déterminer si le calcul de la requête doit être poussé vers Hadoop.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://10.10.10.10:8020',
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);
Chapitre C. Créer une source de données externe pour faire référence à Hadoop sécurisé par Kerberos
Pour vérifier si le cluster Hadoop est sécurisé par Kerberos, regardez la valeur de la propriété hadoop.security.authentication dans Hadoop core-site.xml. Pour faire référence à un cluster Hadoop sécurisé par Kerberos, vous devez spécifier des informations d’identification limitées à la base de données qui contiennent votre nom d’utilisateur et votre mot de passe Kerberos. La clé principale de la base de données est utilisée pour chiffrer le secret des informations d’identification limitées à la base de données.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Kerberos user name and password.
CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
WITH IDENTITY = '<hadoop_user_name>',
SECRET = '<hadoop_password>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://10.10.10.10:8050',
CREDENTIAL = HadoopUser1,
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);
D. Créer une source de données externe pour accéder aux données dans stockage Azure à l’aide de l’interface wasb://
Dans cet exemple, la source de données externe est un compte de stockage Azure V2 nommé logs. Le conteneur de stockage est nommé daily. La source de données externe stockage Azure concerne uniquement le transfert de données. Elle ne prend pas en charge le pushdown de prédicats. Les espaces de noms hiérarchiques ne sont pas pris en charge lors de l’accès aux données via l’interface wasb:// . Lors de la connexion au stockage Azure via wasb ou wasbs, l’authentification doit être effectuée avec une clé de compte de stockage, et non avec une signature d’accès partagé (SAP).
Cet exemple montre comment créer les informations d’identification délimitées à la base de données pour l’authentification dans Azure stockage. Spécifiez la clé de compte de stockage Azure dans le secret d’informations d’identification de la base de données. Vous pouvez spécifier n'importe quelle chaîne dans l'identité d'informations d'identification délimitée à la base de données, car elle n'est pas utilisée pendant l'authentification pour Azure stockage.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH IDENTITY = '<my_account>',
SECRET = '<azure_storage_account_key>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
TYPE = HADOOP,
LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
CREDENTIAL = AzureStorageCredential
);
Contenu connexe
* SQL Managed Instance *
Vue d’ensemble : Azure SQL Managed Instance
Applies à : Azure SQL Managed Instance
Crée une source de données externe dans Azure SQL Managed Instance. Pour plus d’informations, consultez la virtualisation Data avec Azure SQL Managed Instance.
La virtualisation des données dans Azure SQL Managed Instance permet d’accéder aux données externes dans divers formats de fichiers via OPENROWSET ou CREATE EXTERNAL TABLE.
conventions de syntaxe Transact-SQL
Syntaxe
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
)
[ ; ]
Les arguments
data_source_name
Spécifie le nom défini par l’utilisateur de la source de données. Le nom doit être unique au sein de la base de données.
LOCATION = '<prefix> ://<path[:p ort]>'
Fournit le protocole de connectivité et le chemin d’accès à la source de données externe.
| Source de données externe | Préfixe de l’emplacement | Chemin d’emplacement |
|---|---|---|
| Stockage Blob Azure | abs |
abs://<container>@<storage_account>.blob.core.windows.net/<path>/<file_name> |
| Azure Data Lake Service Gen2 | adls |
adls://<container>@<storage_account>.dfs.core.windows.net/<path>/<file_name> |
Le Moteur de base de données ne vérifie pas l'existence de la source de données externe lors de la création de l'objet. Pour valider, créez une table externe à l’aide d’une source de données externe.
N’ajoutez pas de paramètres de signature de fin /, de nom de fichier ou d’accès partagé à la fin de l’URL lors de la LOCATION configuration d’une source de données externe pour les opérations en bloc.
DIPLÔME = credential_name
Spécifie les informations d’identification limitées à la base de données servant à l’authentification auprès de la source de données externe.
Remarques et conseils supplémentaires lors de la création d’informations d’identification :
- Pour charger des données de stockage Azure dans Azure SQL Managed Instance, utilisez une signature d’accès partagé (jeton SAP).
-
CREDENTIALest requis uniquement si les données ont été sécurisées.CREDENTIALn’est pas requis pour les jeux de données qui autorisent l’accès anonyme. - Si des informations d’identification sont requises, elles doivent être créées en utilisant
Managed IdentityouSHARED ACCESS SIGNATUREcomme IDENTITY. Pour créer des informations d’identification délimitées à la base de données, consultez CREATE DATABASE SCOPED CREDENTIAL.
Pour utiliser l’identité de service managée pour les informations d’identification délimitées à la base de données :
Spécifier
WITH IDENTITY = 'Managed Identity'Utilisez l'identité de service managé affectée par le système du Azure SQL Managed Instance, qui doit être activée s'il doit être utilisé à cet effet.
- Accordez le rôle RBAC Reader Azure à l’identité de service managée affectée par le système du Azure SQL Managed Instance aux conteneurs de Stockage Blob Azure nécessaires. Par exemple, via le portail Azure, consultez Assigner des rôles Azure à l’aide du portail Azure.
Pour créer une signature d’accès partagé (SAS) pour les informations d’identification délimitées à la base de données :
Spécifier
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = ...Il existe plusieurs façons de créer une signature d’accès partagé :
- Vous pouvez obtenir un jeton SAP en accédant au portail Azure -><Your_Storage_Account> -> signature d’accès partagé -> Configurer les autorisations -> Générer une SAP et chaîne de connexion. Pour plus d’informations, consultez Générer une signature d’accès partagé.
- Vous pouvez créer et configurer une SAP avec Explorateur Stockage Azure.
- Vous pouvez créer un jeton SAP par programmation via PowerShell, Azure CLI, .NET et l’API REST. Pour plus d’informations, consultez Accès limité aux ressources stockage Azure à l’aide de signatures d’accès partagé (SAP).
Le jeton SAS doit être configuré comme suit :
- Lorsqu’un jeton SAP est généré, il inclut un point d’interrogation (' ?') au début du jeton. Retirez le caractère
?de début lorsqu’il est configuré en tant que SECRET. - Utilisez une période d’expiration valide (toutes les dates sont au format UTC).
- Lorsqu’un jeton SAP est généré, il inclut un point d’interrogation (' ?') au début du jeton. Retirez le caractère
Accordez au moins l’autorisation en lecture sur le fichier qui doit être chargé (par exemple
srt=o&sp=r). Plusieurs signatures d’accès partagé peuvent être créées pour différents cas d’usage. Les autorisations doivent être accordées comme suit :Action Autorisation Lire les données d’un fichier Lire Lire les données de plusieurs fichiers et sous-dossiers Lire et Liste Utiliser Create External Table as Select (CETAS) Lire, Créer et Écrire
Autorisations
Nécessite l’autorisation CONTROL sur la base de données dans Azure SQL Managed Instance.
Verrouillage
Prend un verrou partagé sur l’objet EXTERNAL DATA SOURCE.
Exemples
Pour plus d’exemples, consultez la virtualisation Data avec Azure SQL Managed Instance.
R. Interroger des données externes à partir de Azure SQL Managed Instance avec OPENROWSET ou une table externe
Pour plus d’exemples, consultez CREATE EXTERNAL DATA SOURCE ou consultez la virtualisation Data avec Azure SQL Managed Instance.
Créez la clé principale de la base de données si elle n’existe pas.
-- Optional: Create MASTER KEY if it doesn't exist in the database: CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Strong Password>' GOCréez les informations d’identification délimitées à la base de données en utilisant un jeton SAS. Vous pouvez également utiliser une identité managée.
CREATE DATABASE SCOPED CREDENTIAL MyCredential WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = '<KEY>' ; --Removing leading '?' GOCréez la source de données externe en utilisant les informations d’identification.
--Create external data source pointing to the file path, and referencing database-scoped credential: CREATE EXTERNAL DATA SOURCE MyPrivateExternalDataSource WITH ( LOCATION = 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest', CREDENTIAL = [MyCredential] );Interrogez le fichier de données parquet dans la source de données externe avec la syntaxe T-SQL OPENROWSET, en vous appuyant sur l’inférence de schéma pour explorer rapidement les données sans connaître le schéma.
--Query data with OPENROWSET, relying on schema inference. SELECT TOP 10 * FROM OPENROWSET ( BULK 'bing_covid-19_data.parquet', DATA_SOURCE = 'MyExternalDataSource', FORMAT = 'parquet' ) AS filerows;Ou, interrogez des données à l’aide d’OPENROWSET la clause WITH, au lieu de compter sur l’inférence de schéma, ce qui peut interroger le coût d’exécution. Sur un fichier CSV, l’inférence de schéma n’est pas prise en charge.
--Or, query data using the WITH clause on a CSV, where schema inference is not supported SELECT TOP 10 id, updated, confirmed, confirmed_change FROM OPENROWSET ( BULK 'bing_covid-19_data.csv', DATA_SOURCE = 'MyExternalDataSource', FORMAT = 'CSV', FIRSTROW = 2 ) WITH ( id INT, updated DATE, confirmed INT, confirmed_change INT ) AS filerows;Vous pouvez également créer un format de fichier externe (EXTERNAL FILE FORMAT) et une table externe (EXTERNAL TABLE) pour interroger les données comme une table locale.
-- Or, create an EXTERNAL FILE FORMAT and an EXTERNAL TABLE --Create external file format CREATE EXTERNAL FILE FORMAT DemoFileFormat WITH (FORMAT_TYPE = PARQUET) GO --Create external table: CREATE EXTERNAL TABLE tbl_TaxiRides ( vendorID VARCHAR(100) COLLATE Latin1_General_BIN2, tpepPickupDateTime DATETIME2, tpepDropoffDateTime DATETIME2, passengerCount INT, tripDistance FLOAT, puLocationId VARCHAR(8000), doLocationId VARCHAR(8000), startLon FLOAT, startLat FLOAT, endLon FLOAT, endLat FLOAT, rateCodeId SMALLINT, storeAndFwdFlag VARCHAR(8000), paymentType VARCHAR(8000), fareAmount FLOAT, extra FLOAT, mtaTax FLOAT, improvementSurcharge VARCHAR(8000), tipAmount FLOAT, tollsAmount FLOAT, totalAmount FLOAT ) WITH ( LOCATION = 'yellow/puYear=*/puMonth=*/*.parquet', DATA_SOURCE = NYCTaxiExternalDataSource, FILE_FORMAT = MyFileFormat\.\./\.\./\.\./azure-sql/ ); GO --Then, query the data via an external table with T-SQL: SELECT TOP 10 * FROM tbl_TaxiRides; GO
Contenu connexe
*Microsoft Fabric Data Warehouse *
Vue d’ensemble : Microsoft Fabric Data Warehouse
Applies à : Fabric Data Warehouse
Crée une source de données externe.
conventions de syntaxe Transact-SQL
Syntaxe
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( LOCATION = '<prefix>://<path>[:<port>]' )
[ ; ]
Les arguments
data_source_name
Spécifie le nom défini par l’utilisateur de la source de données. Le nom doit être unique au sein de la base de données.
LOCATION = '<prefix> ://<path[:p ort]>'
Fournit le protocole de connectivité et le chemin d’accès à la source de données externe.
| Source de données externe | Préfixe de l’emplacement | Chemin d’emplacement |
|---|---|---|
| Stockage Blob Azure | https |
https://<storage_account>.blob.core.windows.net/<container>/<path> |
| Azure Data Lake Service Gen2 | abfss |
abfss://<container>@<storage_account>.dfs.core.windows.net/<path> |
Le Moteur de base de données ne vérifie pas l'existence de la source de données externe lors de la création de l'objet.
N’ajoutez pas de paramètres de signature de fin /, de nom de fichier ou d’accès partagé à la fin de l’URL lors de la LOCATION configuration d’une source de données externe pour les opérations en bloc.
Autorisations
Si le compte de stockage cible est privé, le principal doit également disposer de l’autorisation relative aux fichiers référencés en lecture.
- Pour Azure Data Lake Storage et Stockage Blob Azure, le principal doit avoir Lecteur de données BlobStorage attribué au niveau du conteneur ou du compte de stockage.
- Pour Fabric Stockage One Lake, le principal doit disposer des autorisations « ReadAll ».
Verrouillage
Prend un verrou partagé sur l’objet EXTERNAL DATA SOURCE.
Exemples
R. Interroger des données externes avec OPENROWSET ou une table externe
Créez la source de données externe.
--Create external data source pointing to the file path, and referencing database-scoped credential: CREATE EXTERNAL DATA SOURCE MyPrivateExternalDataSource WITH ( LOCATION = 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest' );Interrogez le fichier de données parquet dans la source de données externe avec la syntaxe T-SQL OPENROWSET, en vous appuyant sur l’inférence de schéma pour explorer rapidement les données sans connaître le schéma.
--Query data with OPENROWSET, relying on schema inference. SELECT TOP 10 * FROM OPENROWSET ( BULK 'bing_covid-19_data.parquet', DATA_SOURCE = 'MyPrivateExternalDataSource' );Ou, interrogez des données à l’aide d’OPENROWSET la clause WITH, au lieu de compter sur l’inférence de schéma, ce qui peut interroger le coût d’exécution.
--Or, query data using the WITH clause on a CSV, where schema inference is not supported SELECT TOP 10 id, updated, confirmed, confirmed_change FROM OPENROWSET ( BULK 'bing_covid-19_data.csv', DATA_SOURCE = 'MyPrivateExternalDataSource' FIRSTROW = 2 ) WITH ( id INT, updated DATE, confirmed INT, confirmed_change INT ) AS filerows;
Contenu connexe
* Fabric base de données SQL *
Vue d’ensemble : Base de données SQL dans Microsoft Fabric
Applies à : base de données SQL dans Microsoft Fabric
Crée une source de données externe pour la virtualisation Data dans la base de données SQL dans Fabric.
conventions de syntaxe Transact-SQL
Syntaxe
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ ; ]
Les arguments
data_source_name
Spécifie le nom défini par l’utilisateur de la source de données. Le nom doit être unique au sein de la base de données.
LOCATION = '<prefix> ://<path[:p ort]>'
Fournit le protocole de connectivité et le chemin d’accès à la source de données externe.
Fabric base de données SQL prend uniquement en charge OneLake (abfss) comme source de données.
| Source de données externe | Préfixe de l’emplacement du connecteur | Chemin d’emplacement | Disponibilité |
|---|---|---|---|
| OneLake | abfss |
abfss://<workspaceid>@<tenant>.dfs.fabric.microsoft.com/ |
base de données SQL Fabric |
Remarques et conseils supplémentaires lors de la définition de l’emplacement :
- Le Moteur de base de données ne vérifie pas l'existence de la source de données externe lors de la création de l'objet. Pour valider, créez une table externe à l’aide d’une source de données externe.
Autorisations
Nécessite l’autorisation CONTROL sur la base de données dans Azure SQL Database.
Verrouillage
Prend un verrou partagé sur l’objet EXTERNAL DATA SOURCE.
Exemples
R. Créer une source de données externe dans un dossier Lakehouse
Cet exemple consiste à connecter une source de données externe nommée MyLakeHouse à un Lakehouse afin d’accéder aux fichiers Parquet et CSV qui ont été téléchargés. Ces fichiers de cet exemple se trouvent dans le Files répertoire sous le Contoso dossier.
Pour créer une source de données Fabric Lakehouse, vous devez fournir l’ID d’espace de travail, le locataire et l’ID lakehouse. Pour trouver l’emplacement du fichier ABFSS d’un lakehouse, accédez au portail Fabric. Naviguez jusqu’à votre Lakehouse, allez à l’emplacement du dossier souhaité, sélectionnez ..., Propriétés. Copiez le chemin ABFS, qui ressemble à ceci : abfss://<WorkSpaceID>@<Tenant>.dfs.fabric.microsoft.com/<LakehouseID>/Files/Contoso.
Étant donné que Fabric base de données SQL prend uniquement en charge l'authentification directe Microsoft Entra ID, aucune information d'identification délimitée à la base de données n'est nécessaire, la connexion utilise toujours les informations d'identification de connexion de l'utilisateur pour accéder à l'emplacement.
CREATE EXTERNAL DATA SOURCE MyLakeHouse
WITH (
LOCATION = 'abfss://<workspace id>@<tenant>.dfs.fabric.microsoft.com/<lakehouseid>/Files/Contoso'
);