CREATE EXTERNAL DATA SOURCE (Transact-SQL) - Analytics Platform System (PDW)

S’applique à :Analytics Platform System (PDW)

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.

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 la 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>]' )
[ ; ]

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 de 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.

CREDENTIAL = 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

Permissions

Nécessite l’autorisation CONTROL sur la base de données dans Analytics Platform System (PDW).

Note

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.

Security

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

A. 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'
);

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