Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 diNamenodenel 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 configurazionefs.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
Namenodedi Hadoop, provare a usare un indirizzo IP virtuale per l'istanza diNamenodedel 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.CREDENTIALnon è 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
);