CREATE EXTERNAL DATA SOURCE (Transact-SQL) - Sistema piattaforma di analisi (PDW)

Si applica a:Piattaforma di strumenti analitici (PDW)

Crea un'origine dati esterna per l'esecuzione di query su dati esterni, usata per le funzionalità di virtualizzazione dei dati e PolyBase.

Le origini dati esterne vengono usate per stabilire la connettività e supportare il caso d'uso seguente: Virtualizzazione dei dati e caricamento dei dati tramite PolyBase in SQL Server.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

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

Specifica il nome definito dall'utente per l'origine dati. Il nome deve essere univoco all'interno del server nella piattaforma di strumenti analitici (PDW).

LOCATION = '<prefix>://<path[:p ort]>'

Fornisce il protocollo di connettività e il percorso dell'origine dati esterna.

Origine dati esterna Prefisso della posizione del connettore Percorso di posizione
Cloudera CDH o Hortonworks HDP hdfs <Namenode>[:port]
Conto di Archiviazione Azure wasb[s] <container>@<storage_account>.blob.core.windows.net

Percorso:

  • <Namenode> = nome del computer, URI del servizio dei nomi o indirizzo IP di Namenode nel cluster Hadoop. PolyBase deve risolvere tutti i nomi DNS usati dal cluster Hadoop.
  • port = porta su cui è in ascolto l'origine dati esterna. Per trovare la porta in Hadoop, si usa il parametro di configurazione fs.defaultFS. L'impostazione predefinita è 8020.
  • <container> = contenitore dell'account di archiviazione che include i dati. I contenitori radice sono di sola lettura, di conseguenza i dati non possono essere riscritti nel contenitore.
  • <storage_account> = nome dell'account di archiviazione della risorsa Azure.

Note aggiuntive e indicazioni utili per l'impostazione della posizione:

  • Il motore PDW non verifica l'esistenza dell'origine dati esterna quando viene creato l'oggetto. Per eseguire la convalida, creare una tabella esterna usando l'origine dati esterna.
  • Per garantire una semantica di esecuzione di query coerente, usare la stessa origine dati esterna per tutte le tabelle quando si eseguono query su Hadoop.
  • wasbs è consigliato quando i dati vengono inviati usando una connessione TLS protetta.
  • Gli spazi dei nomi gerarchici non sono supportati quando vengono usati con account Archiviazione di Azure in wasb://.
  • Per garantire la corretta esecuzione delle query di PolyBase durante un failover di Namenode di Hadoop, provare a usare un indirizzo IP virtuale per l'istanza di Namenode del cluster Hadoop. Se non lo fai, esegui ALTER EXTERNAL DATA SOURCE per indicare la nuova posizione.

CREDENTIAL = credential_name

Specifica una credenziale con ambito database per l'autenticazione nell'origine dati esterna.

Note aggiuntive e indicazioni utili per la creazione delle credenziali:

  • Per caricare dati da Archiviazione di Azure in Azure Synapse o PDW, usare una chiave Archiviazione di Azure.
  • CREDENTIAL è obbligatorio solo se i dati sono stati protetti. CREDENTIAL non è obbligatorio per i set di dati che consentono l'accesso anonimo.

TYPE = * [ HADOOP ] *

Specifica il tipo dell'origine dati esterna da configurare. Questo parametro non è sempre obbligatorio.

  • Usare HADOOP quando l'origine dati esterna è Cloudera CDH, Hortonworks HDP o Archiviazione di Azure.

Per un esempio di uso di TYPE = HADOOP per caricare dati da Archiviazione di Azure, vedere Creare un'origine dati esterna per fare riferimento a Hadoop.

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:p ort]'

In SQL Server 2019 (15.x), non specificare RESOURCE_MANAGER_LOCATION a meno che non ci si connetta a Cloudera CDH, Hortonworks HDP, un account Archiviazione di Azure.

Configurare questo valore facoltativo quando ci si connette a Cloudera CDH, Hortonworks HDP o solo un account Archiviazione di Azure. Per un elenco completo delle versioni di Hadoop supportate, vedere Configurazione della connettività PolyBase.

RESOURCE_MANAGER_LOCATION Quando viene definito, Query Optimizer prende una decisione basata sui costi per migliorare le prestazioni. È possibile usare un processo MapReduce per eseguire il pushdown del calcolo in Hadoop. Specificando il parametro RESOURCE_MANAGER_LOCATION, è possibile ridurre significativamente il volume dei dati trasferiti tra Hadoop e SQL e quindi migliorare le prestazioni delle query.

Se la Resource Manager non è specificata, il push del calcolo in Hadoop è disabilitato per le query PolyBase. In Creare un'origine dati esterna per fare riferimento a Hadoop con il pushdown abilitato viene fornito un esempio concreto, oltre a ulteriori indicazioni.

Il valore RESOURCE_MANAGER_LOCATION non viene convalidato quando si crea l'origine dati esterna. L'immissione di un valore non corretto potrebbe causare un errore di query in fase di esecuzione ogni volta che si tenta il push-down perché il valore specificato non sarebbe in grado di risolvere.

Affinché PolyBase funzioni correttamente con un'origine dati esterna Hadoop, le porte per i componenti del cluster Hadoop seguenti devono essere aperte:

  • Porte HDFS
    • Namenode
    • Datanode
  • Resource Manager
    • Invio di processi
  • Cronologia lavorativa

Se la porta non è specificata, per la scelta del valore predefinito si usa l'impostazione corrente della configurazione 'hadoop connectivity'.

Connettività Hadoop Porta Resource Manager predefinita
1 50300
2 50300
3 8021
4 8032
5 8050
6 8032
7 8050

Nella tabella seguente vengono illustrate le porte predefinite per questi componenti. Esiste una dipendenza della versione di Hadoop e la possibilità di una configurazione personalizzata che non usa l'assegnazione di porta predefinita.

Componente cluster Hadoop Porta predefinita
NameNode 8020
DataNode (trasferimento di dati, porta IPC senza privilegi) 50010
DataNode (trasferimento dei dati, porta IPC con privilegi) 1019
invio di processi Resource Manager (Hortonworks 1.3) 50300
invio di processi Resource Manager (Cloudera 4.3) 8021
Resource Manager invio di processi (Hortonworks 2.0 in Windows, Cloudera 5.x in Linux) 8032
Resource Manager invio di processi (Hortonworks 2.x, 3.0 in Linux, Hortonworks 2.1-3 in Windows) 8050
cronologia processi Resource Manager 10020

Autorizzazioni

Richiede l'autorizzazione CONTROL per il database nella piattaforma di strumenti analitici (PDW).

Annotazioni

Nelle versioni precedenti di PDW creare le autorizzazioni ALTER ANY EXTERNAL DATA SOURCE richieste dell'origine dati esterna.

Bloccaggio

Acquisisce un blocco condiviso per l'oggetto EXTERNAL DATA SOURCE.

Security

PolyBase supporta l'autenticazione basata su proxy per la maggior parte delle origini dati esterne. Creare credenziali con ambito database per creare l'account proxy.

Un token di firma di accesso condiviso con tipo HADOOP non è supportato. È supportato solo il tipo BLOB_STORAGE quando viene usata una chiave di accesso dell'account di archiviazione. Il tentativo di creare un'origine dati esterna di tipo HADOOP e le credenziali di firma di accesso condiviso potrebbe non riuscire e potrebbe essere visualizzato l'errore:

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

Esempi

A. Creare un'origine dati esterna per fare riferimento a Hadoop

Per creare un'origine dati esterna per fare riferimento a Hortonworks HDP o Cloudera CDH, specificare il nome del computer o l'indirizzo IP di Namenode Hadoop e la porta.

CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
    TYPE = HADOOP,
    LOCATION = 'hdfs://10.10.10.10:8050'
);

B. Creare un'origine dati esterna per fare riferimento a Hadoop con il pushdown abilitato

Specificare l'opzione RESOURCE_MANAGER_LOCATION per abilitare il pushdown del calcolo in Hadoop per le query PolyBase. Dopo l'abilitazione, PolyBase prende una decisione basata sui costi per determinare se eseguire il push del calcolo delle query in 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. Creare un'origine dati esterna per fare riferimento a Hadoop con protezione Kerberos

Per verificare se il cluster Hadoop è protetto tramite Kerberos, controllare il valore della proprietà hadoop.security.authentication nel file core-site.xml di Hadoop. Per fare riferimento a un cluster Hadoop protetto tramite Kerberos, è necessario specificare una credenziale con ambito database che contiene il nome utente e la password di Kerberos. La chiave master del database viene usata per crittografare il segreto della credenziale con ambito database.

-- 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. Creare un'origine dati esterna per accedere ai dati in Archiviazione di Azure usando l'interfaccia wasb://

In questo esempio l'origine dati esterna è un account di archiviazione Azure V2 denominato logs. Il contenitore di stoccaggio è chiamato daily. Il Archiviazione di Azure'origine dati esterna è solo per il trasferimento dei dati. e non supporta il pushdown dei predicati. Gli spazi dei nomi gerarchici non sono supportati durante l'accesso ai dati tramite l'interfaccia wasb:// . Quando ci si connette al Archiviazione di Azure tramite wasb o wasbs, l'autenticazione deve essere eseguita con una chiave dell'account di archiviazione, non con una firma di accesso condiviso.

Questo esempio illustra come creare le credenziali con ambito database per l'autenticazione per Azure archiviazione. Specificare la chiave dell'account di archiviazione Azure nel segreto delle credenziali del database. È possibile specificare qualsiasi stringa nell'identità delle credenziali con ambito database perché non viene usata durante l'autenticazione per Azure archiviazione.

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