Partager via


CREATE EXTERNAL DATA SOURCE (Transact-SQL)

Applies to : SQL Server 2016 (13.x) et versions ultérieures Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL analytics endpoint in Microsoft Fabric< /c11>Warehouse dans Microsoft FabricSQL dans Microsoft Fabric

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 INSERT ou OPENROWSET

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 de Namenode dans 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 configuration fs.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.
  • wasbs est 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 Namenode Hadoop, envisagez d’utiliser une adresse IP virtuelle pour le Namenodedu 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
);

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 INSERT ou OPENROWSET

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 du Namenode du 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 configuration fs.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 via ODBC.
  • wasbs est 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 Namenode Hadoop, envisagez d’utiliser une adresse IP virtuelle pour le Namenodedu 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 :

  • 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.
  • Quand TYPE = BLOB_STORAGE, les informations d’identification doivent être créées avec l’identité SHARED ACCESS SIGNATURE.
  • TYPE = BLOB_STORAGE est autorisé uniquement pour les opérations en bloc ; vous ne pouvez pas créer de tables externes pour une source de données externe avec TYPE = BLOB_STORAGE.
  • 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).
  • Quand TYPE = HADOOP, les informations d’identification doivent être créées à l’aide de la clé de compte de stockage en tant que SECRET.

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).
  • 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 HADOOP lorsque 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). Utilisez HADOOP lors de l’intention de CREATE EXTERNAL TABLE sur 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.

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 INSERT ou OPENROWSET

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 de Namenode dans 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 configuration fs.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 sqlserver pour connecter SQL Server 2019 (15.x) à un autre SQL Server ou à Azure SQL Database.
  • Spécifiez Driver={<Name of Driver>} lors de la connexion via ODBC.
  • L’utilisation de wasbs ou abfss est 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 abfs ou abfss sont 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 Namenode Hadoop, envisagez d’utiliser une adresse IP virtuelle pour le Namenodedu cluster Hadoop. Si ce n’est pas le cas, exécutez ALTER EXTERNAL DATA SOURCE pour pointer vers le nouvel emplacement.
  • Les types sqlhdfs et sqldatapool sont 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, utilisez hdfs. Pour plus d’informations sur l’utilisation de sqlhdfs pour 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é TNSNamesFile spécifie le chemin du fichier tnsnames.ora sur le serveur Oracle.
  • Le mot clé ServerName spécifie l’alias utilisé dans le fichier tnsnames.ora qui 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 :

  • 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.
  • Quand TYPE = BLOB_STORAGE, les informations d’identification doivent être créées avec l’identité SHARED ACCESS SIGNATURE.
  • TYPE = BLOB_STORAGE est autorisé uniquement pour les opérations en bloc ; vous ne pouvez pas créer de tables externes pour une source de données externe avec TYPE = 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).
  • 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 HADOOP lorsque la source de données externe est Cloudera CDH, Hortonworks HDP, un compte stockage Azure ou un Azure Data Lake Storage Gen2.
  • Utilisez BLOB_STORAGE lors 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). Utilisez HADOOP lors 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
);

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 INSERT ou OPENROWSET

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 sqlserver pour connecter SQL Server 2019 (15.x) à un autre SQL Server ou à Azure SQL Database.
  • Spécifiez Driver={<Name of Driver>} lors de la connexion via ODBC.
  • L’option Espace de noms hiérarchique pour Comptes de stockage Azure(V2) à l’aide du préfixe adls est 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é) ou abs://<storage_account_name>.blob.core.windows.net/<container>.
  • Azure Data Lake Gen2 prend en charge : adls://<container>@<storage_account_name>.blob.core.windows.net (recommandé) ou adls://<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é TNSNamesFile spécifie le chemin du fichier tnsnames.ora sur le serveur Oracle.
  • Le mot clé ServerName spécifie l’alias utilisé dans le fichier tnsnames.ora qui 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 :

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).
  • 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 : Blob doit être sélectionné pour générer le jeton SAS
  • Services autorisés : Container et Object doivent ê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.

  1. Accédez au portail Azure et au compte de stockage souhaité.

  2. Accédez au conteneur souhaité dans le menu Stockage des données.

  3. Sélectionnez Jetons d’accès partagé.

  4. 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
  5. Choisir la date d’expiration du jeton.

  6. Générer un jeton SAS et une URL.

  7. 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,
);

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 INSERT ou OPENROWSET

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 sqlserver pour connecter SQL Server 2019 (15.x) à un autre SQL Server ou à Azure SQL Database.

  • Spécifiez Driver={<Name of Driver>} lors de la connexion via ODBC.

  • L’option Espace de noms hiérarchique pour Comptes de stockage Azure(V2) à l’aide du préfixe adls est 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 TYPE dans 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] à abs

  • le préfixe utilisé pour Azure Data Lake Storage Gen2 changé 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) 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 LOCATION chemin 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é) ou abs://<storage_account_name>.blob.core.windows.net/<container>.
  • Azure Data Lake Gen2 prend en charge : adls://<container>@<storage_account_name>.blob.core.windows.net (recommandé) ou adls://<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é TNSNamesFile spécifie le chemin du fichier tnsnames.ora sur le serveur Oracle.
  • Le mot clé ServerName spécifie l’alias utilisé dans le fichier tnsnames.ora qui 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 :

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 que SECRET.

    • 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 : Blob doit être sélectionné pour générer le jeton SAS
  • Services autorisés : Container et Object doivent ê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.

  1. Accédez au portail Azure et au compte de stockage souhaité.
  2. Accédez au conteneur souhaité dans le menu Stockage des données.
  3. Sélectionnez Jetons d’accès partagé.
  4. 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
  1. Choisir la date d’expiration du jeton.
  2. Générer un jeton SAS et une URL.
  3. 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
);

* 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 :

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’argument DATABASE_NAME fournit la base de données utilisée pour héberger la carte de partitions et l’argument SHARD_MAP_NAME est 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’argument DATABASE_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).
  • 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.
  • 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 que SECRET.
  • TYPE = BLOB_STORAGE est autorisé uniquement pour les opérations en bloc ; vous ne pouvez pas créer de tables externes pour une source de données externe avec TYPE = 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).
  • 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 RDBMS pour 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_MANAGER lors 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_STORAGE est utilisée uniquement avec le https préfixe. Pour abd et adls les préfixes, ne fournissez TYPEpas .

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://'
);

* 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 connections lors de l’approvisionnement Azure Data Lake Storage Gen2. Lorsque cette option est activée, vous devez utiliser abfss lorsqu’une connexion TLS/SSL sécurisée est sélectionnée, bien que abfss cela 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. https n’est pas disponible pour toutes les méthodes d’accès aux données.
  • wasbs est 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 de wasbs:// 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.
  • 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.

  • 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
);

*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 de Namenode dans 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 configuration fs.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.
  • wasbs est 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 Namenode Hadoop, envisagez d’utiliser une adresse IP virtuelle pour le Namenodedu 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.
  • 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.

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
);

* 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).
  • 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.
  • Si des informations d’identification sont requises, elles doivent être créées en utilisant Managed Identity ou SHARED ACCESS SIGNATURE comme 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é :

  • 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).
  • 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.

  1. 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>'
    GO
    
  2. Cré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 '?'
    GO
    
  3. Cré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]
    );
    
  4. 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;
    
  5. 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;
    
  6. 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
    

*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

  1. 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'
    );
    
  2. 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'
    );
    
  3. 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;
    

* 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'
);