CREATE EXTERNAL DATA SOURCE (Transact-SQL)CREATE EXTERNAL DATA SOURCE (Transact-SQL)

Crea un'origine dati esterna per l'esecuzione di query tramite SQL Server, il database SQL, SQL Data Warehouse o la piattaforma di strumenti analitici (Parallel Data Warehouse o PDW).Creates an external data source for querying using SQL Server, SQL Database, SQL Data Warehouse, or Analytics Platform System (Parallel Data Warehouse or PDW).

Questo articolo fornisce la sintassi, gli argomenti, la sezione Osservazioni, le autorizzazioni ed esempi per qualsiasi prodotto SQL scelto.This article provides the syntax, arguments, remarks, permissions, and examples for whichever SQL product you choose.

Per altre informazioni sulle convenzioni di sintassi, vedere Convenzioni della sintassi Transact-SQL.For more information about the syntax conventions, see Transact-SQL Syntax Conventions.

Fare clic su un prodotto.Click a product!

Nella riga seguente fare clic su qualsiasi nome di prodotto.In the following row, click whichever product name you are interested in. Verrà visualizzato un contenuto diverso in questa pagina Web, appropriato per il prodotto su cui si fa clic.The click displays different content here on this webpage, appropriate for whichever product you click.

* SQL Server *  * SQL Server *   Database SQLSQL Database SQL Data
Warehouse
SQL Data
Warehouse
Piattaforma di strumenti
analitici (PDW)
Analytics Platform
System (PDW)

 

Panoramica: SQL ServerOverview: SQL Server

Crea un'origine dati esterna per le query PolyBase.Creates an external data source for PolyBase queries. Le origini dati esterne vengono usate per stabilire la connettività e supportano questi casi d'uso principali:External data sources are used to establish connectivity and support these primary use cases:

  • Virtualizzazione dati e caricamento dati con PolyBaseData virtualization and data load using PolyBase
  • Operazioni di caricamento bulk con BULK INSERT o OPENROWSETBulk load operations using BULK INSERT or OPENROWSET

SI APPLICA A: SQL Server 2016 (o versione successiva)APPLIES TO: SQL Server 2016 (or higher)

SintassiSyntax

CREATE EXTERNAL DATA SOURCE <data_source_name>  
WITH
(    LOCATION                  = '<prefix>://<path>[:<port>]'
[,   CONNECTION_OPTIONS        = '<name_value_pairs>']
[,   CREDENTIAL                = <credential_name> ]
[,   PUSHDOWN                  = ON | OFF]
[,   TYPE                      = HADOOP | BLOB_STORAGE ]
[,   RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]'
)
[;]

ArgomentiArguments

data_source_namedata_source_name

Specifica il nome definito dall'utente per l'origine dati.Specifies the user-defined name for the data source. Il nome deve essere univoco all'interno del database in SQL Server.The name must be unique within the database in SQL Server.

LOCATION = '<prefix>://<path[:port]>'LOCATION = '<prefix>://<path[:port]>'

Fornisce il protocollo di connettività e il percorso dell'origine dati esterna.Provides the connectivity protocol and path to the external data source.

Origine dati esternaExternal Data Source Prefisso della posizioneLocation prefix PercorsoLocation path Posizioni supportate per prodotto/servizioSupported locations by product / service
Cloudera o HortonworksCloudera or Hortonworks hdfs <Namenode>[:port] SQL Server (2016 e versioni successive)SQL Server (2016+)
Archiviazione BLOB di AzureAzure Blob Storage wasb[s] <container>@<storage_account>.blob.core.windows.net SQL Server (2016 e versioni successive)SQL Server (2016+)
SQL ServerSQL Server sqlserver <server_name>[\<instance_name>][:port] SQL Server (2019 e versioni successive)SQL Server (2019+)
OracleOracle oracle <server_name>[:port] SQL Server (2019 e versioni successive)SQL Server (2019+)
TeradataTeradata teradata <server_name>[:port] SQL Server (2019 e versioni successive)SQL Server (2019+)
MongoDB o CosmosDBMongoDB or CosmosDB mongodb <server_name>[:port] SQL Server (2019 e versioni successive)SQL Server (2019+)
ODBCODBC odbc <server_name>[:port] SQL Server (2019 e versioni successive) - solo WindowsSQL Server (2019+) - Windows only
Operazioni bulkBulk Operations https <storage_account>.blob.core.windows.net/<container> SQL Server (2017 e versioni successive)SQL Server (2017+)

Percorso:Location path:

  • <Namenode> = nome del computer, URI del servizio dei nomi o indirizzo IP di Namenode nel cluster Hadoop.<Namenode> = the machine name, name service URI, or IP address of the Namenode in the Hadoop cluster. PolyBase deve risolvere tutti i nomi DNS usati dal cluster Hadoop.PolyBase must resolve any DNS names used by the Hadoop cluster.
  • port = porta su cui è in ascolto l'origine dati esterna.port = The port that the external data source is listening on. Per trovare la porta in Hadoop, si usa il parametro di configurazione fs.defaultFS.In Hadoop, the port can be found using the fs.defaultFS configuration parameter. L'impostazione predefinita è 8020.The default is 8020.
  • <container> = contenitore dell'account di archiviazione che include i dati.<container> = the container of the storage account holding the data. I contenitori radice sono di sola lettura, di conseguenza i dati non possono essere riscritti nel contenitore.Root containers are read-only, data can't be written back to the container.
  • <storage_account> = nome dell'account di archiviazione della risorsa di Azure.<storage_account> = the storage account name of the azure resource.
  • <server_name> = nome host.<server_name> = the host name.
  • <instance_name> = nome dell'istanza denominata di SQL Server.<instance_name> = the name of the SQL Server named instance. Usato se il servizio SQL Server Browser Service è in esecuzione nell'istanza di destinazione.Used if you have SQL Server Browser Service running on the target instance.

Note aggiuntive e indicazioni utili per l'impostazione della posizione:Additional notes and guidance when setting the location:

  • Il motore SQL non verifica l'esistenza dell'origine dati esterna quando viene creato l'oggetto.The SQL engine doesn't verify the existence of the external data source when the object is created. Per eseguire la convalida, creare una tabella esterna usando l'origine dati esterna.To validate, create an external table using the external data source.
  • 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.Use the same external data source for all tables when querying Hadoop to ensure consistent querying semantics.
  • È possibile usare il prefisso di posizione sqlserver per connettere SQL Server 2019 a SQL Server, database SQL o SQL Data Warehouse.You can use the sqlserver location prefix to connect SQL Server 2019 to SQL Server, SQL Database, or SQL Data Warehouse.
  • Per la connessione tramite ODBC specificare Driver={<Name of Driver>}.Specify the Driver={<Name of Driver>} when connecting via ODBC.
  • wasb è il protocollo predefinito dell'archiviazione BLOB di Azure.wasb is the default protocol for Azure blob storage. wasbs è facoltativo ma consigliato quando i dati vengono inviati usando una connessione SSL protetta.wasbs is optional but recommended as data will be sent using a secure SSL connection.
  • 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.To ensure successful PolyBase queries during a Hadoop Namenode fail-over, consider using a virtual IP address for the Namenode of the Hadoop cluster. In caso contrario, eseguire un comando ALTER EXTERNAL DATA SOURCE in modo che punti alla nuova posizione.If you don't, execute an ALTER EXTERNAL DATA SOURCE command to point to the new location.

CONNECTION_OPTIONS = key_value_pairCONNECTION_OPTIONS = key_value_pair

Specifica le opzioni aggiuntive quando si esegue la connessione a un'origine dati esterna tramite ODBC.Specifies additional options when connecting over ODBC to an external data source.

Il nome del driver è un requisito minimo, ma sono disponibili altre opzioni, ad esempio APP='<your_application_name>' o ApplicationIntent= ReadOnly|ReadWrite, che sono utili anche per impostare e possono essere usate per la risoluzione dei problemi.The name of the driver is required as a minimum but there are other options such as APP='<your_application_name>' or ApplicationIntent= ReadOnly|ReadWrite which are also useful to set and can assist with troubleshooting.

Vedere la documentazione del prodotto ODBC per un elenco di valori consentiti per CONNECTION_OPTIONSRefer to the ODBC product documentation for a list of permitted CONNECTION_OPTIONS

PUSHDOWN = ON | OFFPUSHDOWN = ON | OFF

Indica se è possibile eseguire il pushdown del calcolo nell'origine dati esterna.States whether computation can be pushed down to the external data source. È attivato per impostazione predefinita.It is on by default.

PUSHDOWN è supportato per la connessione a SQL Server, Oracle, Teradata, MongoDB oppure ODBC a livello di origine dati esterna.PUSHDOWN is supported when connecting to SQL Server, Oracle, Teradata, MongoDB, or ODBC at the external data source level.

Per abilitare o disabilitare il pushdown a livello di query, si usa un hint.Enabling or disabling push-down at the query level is achieved through a hint.

CREDENTIAL = credential_nameCREDENTIAL = credential_name

Specifica una credenziale con ambito database per l'autenticazione nell'origine dati esterna.Specifies a database-scoped credential for authenticating to the external data source.

Note aggiuntive e indicazioni utili per la creazione delle credenziali:Additional notes and guidance when creating a credential:

  • CREDENTIAL è obbligatorio solo se il BLOB è stato protetto.CREDENTIAL is only required if the blob has been secured. CREDENTIAL non è obbligatorio per i set di dati che consentono l'accesso anonimo.CREDENTIAL isn't required for data sets that allow anonymous access.
  • Quando TYPE = BLOB_STORAGE, è necessario specificare SHARED ACCESS SIGNATURE come identità per la creazione delle credenziali.When the TYPE = BLOB_STORAGE the credential must be created using SHARED ACCESS SIGNATURE as the identity. È inoltre necessario configurare il token di firma di accesso condiviso nel modo seguente:Furthermore, the SAS token should be configured as follows:
    • Escludere il carattere ? iniziale quando viene configurato come segretoExclude the leading ? when configured as the secret
    • Disporre almeno dell'autorizzazione di lettura per il file da caricare, ad esempio srt=o&sp=rHave at least read permission on the file that should be loaded (for example srt=o&sp=r)
    • Usare un periodo di scadenza valido (tutte le date sono espresse in formato UTC).Use a valid expiration period (all dates are in UTC time).

Per un esempio d'uso di CREDENTIAL con SHARED ACCESS SIGNATURE e TYPE = BLOB_STORAGE, vedere Creare un'origine dati esterna per eseguire operazioni bulk e recuperare dati da Archiviazione BLOB di Azure nel database SQLFor an example of using a CREDENTIAL with SHARED ACCESS SIGNATURE and TYPE = BLOB_STORAGE, see Create an external data source to execute bulk operations and retrieve data from Azure Blob Storage into SQL Database

Per creare credenziali con ambito database, vedere CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).To create a database scoped credential, see CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

TYPE = [ HADOOP | BLOB_STORAGE ]TYPE = [ HADOOP | BLOB_STORAGE ]

Specifica il tipo dell'origine dati esterna da configurare.Specifies the type of the external data source being configured. Questo parametro non è sempre obbligatorio.This parameter isn't always required.

  • Usare HADOOP quando l'origine dati esterna è Cloudera, Hortonworks o Archiviazione BLOB di Azure.Use HADOOP when the external data source is Cloudera, Hortonworks, or Azure Blob Storage.
  • Usare BLOB_STORAGE durante l'esecuzione di operazioni bulk con BULK INSERT o OPENROWSET con SQL Server 2017 (14.x)SQL Server 2017 (14.x).Use BLOB_STORAGE when executing bulk operations with BULK INSERT, or OPENROWSET with SQL Server 2017 (14.x)SQL Server 2017 (14.x).

Importante

Non impostare TYPE se si usa qualsiasi altra origine dati esterna.Do not set TYPE if using any other external data source.

Per un esempio d'uso di TYPE = HADOOP per caricare i dati da Archiviazione BLOB di Azure, vedere Creare un'origine dati esterna per fare riferimento all'archiviazione BLOB di Azure.For an example of using TYPE = HADOOP to load data from Azure Blob Storage, see Create external data source to reference Azure blob storage.

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:port]'RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:port]'

Configurare questo valore facoltativo per la connessione a Hortonworks o Cloudera.Configure this optional value when connecting to Hortonworks or Cloudera.

Dopo aver definito RESOURCE_MANAGER_LOCATION, Query Optimizer prenderà una decisione basata sui costi per migliorare le prestazioni.When the RESOURCE_MANAGER_LOCATION is defined, the query optimizer will make a cost-based decision to improve performance. È possibile usare un processo MapReduce per eseguire il pushdown del calcolo in Hadoop.A MapReduce job can be used to push down the computation to 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.Specifying the RESOURCE_MANAGER_LOCATION can significantly reduce the volume of data transferred between Hadoop and SQL, which can lead to improved query performance.

Se non si specifica tale parametro, il push del calcolo in Hadoop è disabilitato per le query PolyBase.If the Resource Manager isn't specified, pushing compute to Hadoop is disabled for PolyBase queries.

Se la porta non è specificata, per la scelta del valore predefinito si usa l'impostazione corrente della configurazione 'hadoop connectivity'.If the port isn't specified, the default value is chosen using the current setting for 'hadoop connectivity' configuration.

Connettività HadoopHadoop Connectivity Porta di gestione risorse predefinitaDefault Resource Manager Port
11 5030050300
22 5030050300
33 80218021
44 80328032
55 80508050
66 80328032
77 80508050

Per un elenco completo delle versioni di Hadoop supportate, vedere Configurazione della connettività di PolyBase (Transact-SQL).For a complete list of supported Hadoop versions, see PolyBase Connectivity Configuration (Transact-SQL).

Importante

Il valore RESOURCE_MANAGER_LOCATION non viene convalidato quando si crea l'origine dati esterna.The RESOURCE_MANAGER_LOCATION value is not validated when you create the external data source. Se si immette un valore errato, potrebbe verificarsi un errore di query in fase di esecuzione quando si prova a usare il pushdown perché non è possibile risolvere il valore specificato.Entering an incorrect value may cause query failure at execution time whenever push-down is attempted as the provided value would not be able to resolve.

In Creare un'origine dati esterna per fare riferimento a Hadoop con il pushdown abilitato viene fornito un esempio concreto, oltre a ulteriori indicazioni.Create external data source to reference Hadoop with push-down enabled provides a concrete example and further guidance.

AutorizzazioniPermissions

Richiede l'autorizzazione CONTROL nel database in SQL Server.Requires CONTROL permission on database in SQL Server.

Utilizzo di blocchiLocking

Acquisisce un blocco condiviso sull'oggetto EXTERNAL DATA SOURCE.Takes a shared lock on the EXTERNAL DATA SOURCE object.

SecuritySecurity

PolyBase supporta l'autenticazione basata su proxy per la maggior parte delle origini dati esterne.PolyBase supports proxy based authentication for most external data sources. Creare credenziali con ambito database per creare l'account proxy.Create a database scoped credential to create the proxy account.

Quando ci si connette al pool di archiviazione o al pool di dati in un cluster di Big Data di SQL Server, le credenziali dell'utente vengono passate tramite il sistema back-end.When you connect to the storage or data pool in a SQL Server big data cluster, the user's credentials are passed through to the back-end system. Creare gli account di accesso direttamente nel pool di dati per abilitare l'autenticazione pass-through.Create logins in the data pool itself to enable pass through authentication.

Il token di firma di accesso condiviso di tipo HADOOP non è attualmente supportato.Currently a SAS token with type HADOOP is unsupported. È supportato solo con una chiave di accesso dell'account di archiviazione.It's only supported with a storage account access key. 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:Attempting to create an external data source with type HADOOP and a SAS credential fails with the following error:

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 are not valid.: Error [Parameters provided to connect to the Azure storage account are not valid.] occurred while accessing external file.'

Esempi: SQL Server (2016 e versioni successive)Examples: SQL Server (2016+)

A.A. Creare un'origine dati esterna in SQL 2019 per fare riferimento a OracleCreate external data source in SQL 2019 to reference Oracle

Per creare un'origine dati esterna che fa riferimento a Oracle, assicurarsi di disporre di credenziali con ambito database.To create an external data source that references Oracle, ensure you have a database scoped credential. È anche possibile abilitare o disabilitare il pushdown del calcolo su questa origine dati.You may optionally also enable or disable push-down of computation against this data source.

-- 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 = '!MyC0mpl3xP@ssw0rd!
;

-- 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'
,    CREDENTIAL = OracleProxyAccount
,    PUSHDOWN   = ON
;

Per altri esempi relativi a origini dati diverse, come MongoDB, vedere Configurare PolyBase per l'accesso a dati esterni in MongoDBFor additional examples to other data sources such as MongoDB, see Configure PolyBase to access external data in MongoDB

B.B. Creare un'origine dati esterna per fare riferimento a HadoopCreate external data source to reference Hadoop

Per creare un'origine dati esterna per fare riferimento al cluster Hortonworks o Cloudera Hadoop, specificare il nome del computer o l'indirizzo IP di Namenode Hadoop e la porta.To create an external data source to reference your Hortonworks or Cloudera Hadoop cluster, specify the machine name, or IP address of the Hadoop Namenode and port.

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

C.C. Creare un'origine dati esterna per fare riferimento a Hadoop con il pushdown abilitatoCreate external data source to reference Hadoop with push-down enabled

Specificare l'opzione RESOURCE_MANAGER_LOCATION per abilitare il pushdown del calcolo in Hadoop per le query PolyBase.Specify the RESOURCE_MANAGER_LOCATION option to enable push-down computation to Hadoop for PolyBase queries. Dopo l'abilitazione, PolyBase prende una decisione basata sui costi per determinare se eseguire il push del calcolo delle query in Hadoop.Once enabled, PolyBase makes a cost-based decision to determine whether the query computation should be pushed to Hadoop.

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

D.D. Creare un'origine dati esterna per fare riferimento a Hadoop con protezione KerberosCreate external data source to reference Kerberos-secured Hadoop

Per verificare se il cluster Hadoop è protetto tramite Kerberos, controllare il valore della proprietà hadoop.security.authentication nel file core-site.xml di Hadoop.To verify if the Hadoop cluster is Kerberos-secured, check the value of hadoop.security.authentication property in Hadoop core-site.xml. 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.To reference a Kerberos-secured Hadoop cluster, you must specify a database scoped credential that contains your Kerberos username and password. La chiave master del database viene usata per crittografare il segreto della credenziale con ambito database.The database master key is used to encrypt the database scoped credential secret.

-- 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 = 'S0me!nfo'
;

-- 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
(    LOCATION                  = 'hdfs://10.10.10.10:8050'
,    CREDENTIAL                = HadoopUser1
,    TYPE                      = HADOOP
,    RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
)
;

E.E. Creare un'origine dati esterna per fare riferimento all'archiviazione BLOB di AzureCreate external data source to reference Azure blob storage

In questo esempio, l'origine dati esterna è un contenitore dell'archiviazione BLOB di Azure denominato daily incluso nell'account di archiviazione di Azure denominato logs.In this example, the external data source is an Azure blob storage container called daily under Azure storage account named logs. L'origine dati esterna dell'archiviazione di Azure è destinata al solo trasferimento dei datiThe Azure storage external data source is for data transfer only. e non supporta il pushdown dei predicati.It doesn't support predicate push-down.

Questo esempio illustra come creare la credenziale con ambito database per l'autenticazione nell'archiviazione di Azure.This example shows how to create the database scoped credential for authentication to Azure storage. Specificare la chiave dell'account di archiviazione di Azure nel segreto della credenziale di database.Specify the Azure storage account key in the database credential secret. È possibile specificare qualsiasi stringa nell'identità della credenziale con ambito database perché non viene usata durante l'autenticazione nell'archiviazione di Azure.You can specify any string in database scoped credential identity as it isn't used during authentication to Azure storage.

-- 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 = 'S0me!nfo'
;

-- 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
(    LOCATION   = 'wasbs://daily@logs.blob.core.windows.net/'
,    CREDENTIAL = AzureStorageCredential
,    TYPE       = HADOOP
)
;

Esempi: Operazioni bulkExamples: Bulk Operations

Nota

Non inserire un carattere / iniziale, nome file o parametri di firma per l'accesso condiviso alla fine dell'URL LOCATION quando si configura un'origine dati esterne per le operazioni bulk.Do not put a trailing /, file name, or shared access signature parameters at the end of the LOCATION URL when configuring an external data source for bulk operations.

F.F. Creare un'origine dati esterna per le operazioni bulk che recuperano i dati dall'archiviazione BLOB di AzureCreate an external data source for bulk operations retrieving data from Azure Blob storage

Si applica a: SQL Server 2017 (14.x)SQL Server 2017 (14.x).Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x). Usare l'origine dati seguente per le operazioni bulk che usano BULK INSERT o OPENROWSET.Use the following data source for bulk operations using BULK INSERT or OPENROWSET. Le credenziali devono impostare SHARED ACCESS SIGNATURE come identità, non devono includere il carattere ? iniziale nel token di firma di accesso condiviso, devono avere almeno un'autorizzazione di lettura per il file da caricare (ad esempio srt=o&sp=r). Inoltre il periodo di scadenza deve essere valido (tutte le date sono in formato UTC).The credential must set SHARED ACCESS SIGNATURE as the identity, mustn't have the leading ? in the SAS token, must have at least read permission on the file that should be loaded (for example srt=o&sp=r), and the expiration period should be valid (all dates are in UTC time). Per altre informazioni sulle firme di accesso condiviso, vedere Uso delle firme di accesso condiviso.For more information on shared access signatures, see Using Shared Access Signatures (SAS).

CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH
     IDENTITY = 'SHARED ACCESS SIGNATURE'
--   REMOVE ? FROM THE BEGINNING OF THE SAS TOKEN
,    SECRET = '******srt=sco&sp=rwac&se=2017-02-01T00:55:34Z&st=2016-12-29T16:55:34Z***************'
;

CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH
(    LOCATION   = 'https://newinvoices.blob.core.windows.net/week3'
,    CREDENTIAL = AccessAzureInvoices
,    TYPE       = BLOB_STORAGE
)
;

Per visualizzare l'esempio di utilizzo, vedere BULK INSERT.To see this example in use, see BULK INSERT.

Vedere ancheSee Also

SQL ServerSQL Server * Database SQL *  * SQL Database *   SQL Data
Warehouse
SQL Data
Warehouse
Piattaforma di strumenti
analitici (PDW)
Analytics Platform
System (PDW)

 

Panoramica: Database SQL di AzureOverview: Azure SQL Database

Crea un'origine dati esterna per le query elastiche.Creates an external data source for elastic queries. Le origini dati esterne vengono usate per stabilire la connettività e supportano questi casi d'uso principali:External data sources are used to establish connectivity and support these primary use cases:

  • Operazioni di caricamento bulk con BULK INSERT o OPENROWSETBulk load operations using BULK INSERT or OPENROWSET
  • Esecuzione di query su istanze remote del database SQL o di SQL Data Warehouse con il database SQL con query elasticaQuery remote SQL Database or SQL Data Warehouse instances using SQL Database with elastic query
  • Esecuzione di query su un database SQL di Azure partizionato con query elasticaQuery a sharded Azure SQL Database using elastic query

SintassiSyntax

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

ArgomentiArguments

data_source_namedata_source_name

Specifica il nome definito dall'utente per l'origine dati.Specifies the user-defined name for the data source. Il nome deve essere univoco all'interno del database nel database SQL (SQL DB).The name must be unique within the database in SQL Database (SQL DB).

LOCATION = '<prefix>://<path[:port]>'LOCATION = '<prefix>://<path[:port]>'

Fornisce il protocollo di connettività e il percorso dell'origine dati esterna.Provides the connectivity protocol and path to the external data source.

Origine dati esternaExternal Data Source Prefisso della posizioneLocation prefix PercorsoLocation path
Operazioni bulkBulk Operations https <storage_account>.blob.core.windows.net/<container>
Query elastica (partizione)Elastic Query (shard) Non obbligatorioNot required <shard_map_server_name>.database.windows.net
Query elastica (remoto)Elastic Query (remote) Non obbligatorioNot required <remote_server_name>.database.windows.net

Percorso:Location path:

  • <shard_map_server_name> = nome del server logico in Azure che ospita il gestore mappe partizioni.<shard_map_server_name> = The logical server name in Azure that is hosting the shard map manager. L'argomento DATABASE_NAME fornisce il database usato per ospitare la mappa partizioni, mentre SHARD_MAP_NAME viene usato per la mappa partizioni stessa.The DATABASE_NAME argument provides the database used to host the shard map and SHARD_MAP_NAME is used for the shard map itself.
  • <remote_server_name> = nome del server logico di destinazione per la query elastica.<remote_server_name> = The target logical server name for the elastic query. Per specificare il nome del database, si usa l'argomento DATABASE_NAME.The database name is specified using the DATABASE_NAME argument.

Note aggiuntive e indicazioni utili per l'impostazione della posizione:Additional notes and guidance when setting the location:

  • Il motore di database SQL non verifica l'esistenza dell'origine dati esterna quando viene creato l'oggetto.The SQL Database engine doesn't verify the existence of the external data source when the object is created. Per eseguire la convalida, creare una tabella esterna usando l'origine dati esterna.To validate, create an external table using the external data source.

CREDENTIAL = credential_nameCREDENTIAL = credential_name

Specifica una credenziale con ambito database per l'autenticazione nell'origine dati esterna.Specifies a database-scoped credential for authenticating to the external data source.

Note aggiuntive e indicazioni utili per la creazione delle credenziali:Additional notes and guidance when creating a credential:

  • Per caricare i dati da Archiviazione BLOB di Azure nel database SQL, usare una chiave di archiviazione di Azure.To load data from Azure Blob storage into SQL Database, use an Azure Storage Key.
  • CREDENTIAL è obbligatorio solo se il BLOB è stato protetto.CREDENTIAL is only required if the blob has been secured. CREDENTIAL non è obbligatorio per i set di dati che consentono l'accesso anonimo.CREDENTIAL isn't required for data sets that allow anonymous access.
  • Quando TYPE = BLOB_STORAGE, è necessario specificare SHARED ACCESS SIGNATURE come identità per la creazione delle credenziali.When the TYPE = BLOB_STORAGE the credential must be created using SHARED ACCESS SIGNATURE as the identity. È inoltre necessario configurare il token di firma di accesso condiviso nel modo seguente:Furthermore, the SAS token should be configured as follows:
    • Escludere il carattere ? iniziale quando viene configurato come segretoExclude the leading ? when configured as the secret
    • Disporre almeno dell'autorizzazione di lettura per il file da caricare, ad esempio srt=o&sp=rHave at least read permission on the file that should be loaded (for example srt=o&sp=r)
    • Usare un periodo di scadenza valido (tutte le date sono espresse in formato UTC).Use a valid expiration period (all dates are in UTC time).

Per un esempio d'uso di CREDENTIAL con SHARED ACCESS SIGNATURE e TYPE = BLOB_STORAGE, vedere Creare un'origine dati esterna per eseguire operazioni bulk e recuperare dati da Archiviazione BLOB di Azure nel database SQLFor an example of using a CREDENTIAL with SHARED ACCESS SIGNATURE and TYPE = BLOB_STORAGE, see Create an external data source to execute bulk operations and retrieve data from Azure Blob Storage into SQL Database

Per creare credenziali con ambito database, vedere CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).To create a database scoped credential, see CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

TYPE = [ BLOB_STORAGE | RDBMS | SHARD_MAP_MANAGER]TYPE = [ BLOB_STORAGE | RDBMS | SHARD_MAP_MANAGER]

Specifica il tipo dell'origine dati esterna da configurare.Specifies the type of the external data source being configured. Questo parametro non è sempre obbligatorio.This parameter isn't always required.

  • Usare RDBMS per le query tra database usando la query elastica del database SQL.Use RDBMS for cross-database queries using elastic query from SQL Database.
  • Usare SHARD_MAP_MANAGER durante la creazione di un'origine dati esterna per la connessione a un database SQL partizionato.Use SHARD_MAP_MANAGER when creating an external data source when connecting to a sharded SQL Database.
  • Usare BLOB_STORAGE durante l'esecuzione di operazioni bulk con BULK INSERT o OPENROWSET.Use BLOB_STORAGE when executing bulk operations with BULK INSERT, or OPENROWSET.

Importante

Non impostare TYPE se si usa qualsiasi altra origine dati esterna.Do not set TYPE if using any other external data source.

DATABASE_NAME = database_nameDATABASE_NAME = database_name

Configurare questo argomento quando TYPE è impostato su RDBMS o SHARD_MAP_MANAGER.Configure this argument when the TYPE is set to RDBMS or SHARD_MAP_MANAGER.

TYPETYPE Valore di DATABASE_NAMEValue of DATABASE_NAME
RDBMSRDBMS Nome del database remoto sul server specificando usando LOCATIONThe name of the remote database on the server provided using LOCATION
SHARD_MAP_MANAGERSHARD_MAP_MANAGER Nome del database che funge da gestore mappe partizioniName of the database operating as the shard map manager

Per un esempio relativo alla creazione di un'origine dati esterna in cui TYPE = RDBMS, vedere Creare un'origine dati esterna RDBMSFor an example showing how to create an external data source where TYPE = RDBMS refer to Create an RDBMS external data source

SHARD_MAP_NAME = shard_map_nameSHARD_MAP_NAME = shard_map_name

Usato quando l'argomento TYPE è impostato su SHARD_MAP_MANAGER solo per impostare il nome della mappa partizioni.Used when the TYPE argument is set to SHARD_MAP_MANAGER only to set the name of the shard map.

Per un esempio relativo alla creazione di un'origine dati esterna in cui TYPE = SHARD_MAP_MANAGER, vedere Creare un'origine dati esterna del gestore mappe partizioniFor an example showing how to create an external data source where TYPE = SHARD_MAP_MANAGER refer to Create a shard map manager external data source

AutorizzazioniPermissions

Richiede l'autorizzazione CONTROL nel database nel database SQL.Requires CONTROL permission on database in SQL Database.

Utilizzo di blocchiLocking

Acquisisce un blocco condiviso sull'oggetto EXTERNAL DATA SOURCE.Takes a shared lock on the EXTERNAL DATA SOURCE object.

Esempi:Examples:

A.A. Creare un'origine dati esterna del gestore mappe partizioniCreate a shard map manager external data source

Per creare un'origine dati esterna per fare riferimento a SHARD_MAP_MANAGER, specificare il nome del server di database SQL che ospita il gestore mappe partizioni nel database SQL in un database di SQL Server in una macchina virtuale.To create an external data source to reference a SHARD_MAP_MANAGER, specify the SQL Database server name that hosts the shard map manager in SQL Database or a SQL Server database on a virtual machine.

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

Per un'esercitazione dettagliata, vedere Getting started with elastic queries for sharding (horizontal partitioning) (Introduzione alle query di database elastico per il partizionamento orizzontale).For a step-by-step tutorial, see Getting started with elastic queries for sharding (horizontal partitioning).

B.B. Creare un'origine dati esterna RDBMSCreate an RDBMS external data source

Per creare un'origine dati esterna per fare riferimento a un RDBMS, specificare il nome del server di database SQL del database remoto nel database SQL.To create an external data source to reference an RDBMS, specifies the SQL Database server name of the remote database in 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
)
;

Per un'esercitazione dettagliata su RDBMS, vedere Introduzione alle query tra database (partizionamento verticale).For a step-by-step tutorial on RDBMS, see Getting started with cross-database queries (vertical partitioning).

Esempi: Operazioni bulkExamples: Bulk Operations

Nota

Non inserire un carattere / iniziale, nome file o parametri di firma per l'accesso condiviso alla fine dell'URL LOCATION quando si configura un'origine dati esterne per le operazioni bulk.Do not put a trailing /, file name, or shared access signature parameters at the end of the LOCATION URL when configuring an external data source for bulk operations.

C.C. Creare un'origine dati esterna per le operazioni bulk che recuperano i dati dall'archiviazione BLOB di AzureCreate an external data source for bulk operations retrieving data from Azure Blob storage

Usare l'origine dati seguente per le operazioni bulk che usano BULK INSERT o OPENROWSET.Use the following data source for bulk operations using BULK INSERT or OPENROWSET. Le credenziali devono impostare SHARED ACCESS SIGNATURE come identità, non devono includere il carattere ? iniziale nel token di firma di accesso condiviso, devono avere almeno un'autorizzazione di lettura per il file da caricare (ad esempio srt=o&sp=r). Inoltre il periodo di scadenza deve essere valido (tutte le date sono in formato UTC).The credential must set SHARED ACCESS SIGNATURE as the identity, mustn't have the leading ? in the SAS token, must have at least read permission on the file that should be loaded (for example srt=o&sp=r), and the expiration period should be valid (all dates are in UTC time). Per altre informazioni sulle firme di accesso condiviso, vedere Uso delle firme di accesso condiviso.For more information on shared access signatures, see Using Shared Access Signatures (SAS).

CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH
     IDENTITY = 'SHARED ACCESS SIGNATURE'
--   REMOVE ? FROM THE BEGINNING OF THE SAS TOKEN
,    SECRET = '******srt=sco&sp=rwac&se=2017-02-01T00:55:34Z&st=2016-12-29T16:55:34Z***************'
;

CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH
(    LOCATION   = 'https://newinvoices.blob.core.windows.net/week3'
,    CREDENTIAL = AccessAzureInvoices
,    TYPE       = BLOB_STORAGE
)
;

Per visualizzare l'esempio di utilizzo, vedere BULK INSERT.To see this example in use, see BULK INSERT.

Vedere ancheSee Also

SQL ServerSQL Server Database SQLSQL Database * SQL Data
Warehouse *
 
* SQL Data
Warehouse *
 
Piattaforma di strumenti
analitici (PDW)
Analytics Platform
System (PDW)

 

Panoramica: Azure SQL Data WarehouseOverview: Azure SQL Data Warehouse

Crea un'origine dati esterna per PolyBase.Creates an external data source for PolyBase. Le origini dati esterne vengono usate per stabilire la connettività e supportano il caso d'uso principale seguente: Virtualizzazione dati e caricamento dati con PolyBaseExternal data sources are used to establish connectivity and support the following primary use case: Data virtualization and data load using PolyBase

Importante

Per creare un'origine dati esterna per l'esecuzione di query sulle istanze di SQL Data Warehouse tramite il database SQL con query elastica, vedere Database SQL.To create an external data source to query a SQL Data Warehouse instances using SQL Database with elastic query, see SQL Database.

SintassiSyntax

CREATE EXTERNAL DATA SOURCE <data_source_name>  
WITH
(    LOCATION                  = '<prefix>://<path>[:<port>]'
[,   CREDENTIAL                = <credential_name> ]
[,   TYPE                      =  HADOOP
)
[;]

ArgomentiArguments

data_source_namedata_source_name

Specifica il nome definito dall'utente per l'origine dati.Specifies the user-defined name for the data source. Il nome deve essere univoco all'interno del database in SQL Data Warehouse (SQL DW).The name must be unique within the database in SQL Data Warehouse (SQL DW).

LOCATION = '<prefix>://<path[:port]>'LOCATION = '<prefix>://<path[:port]>'

Fornisce il protocollo di connettività e il percorso dell'origine dati esterna.Provides the connectivity protocol and path to the external data source.

Origine dati esternaExternal Data Source Prefisso della posizioneLocation prefix PercorsoLocation path
Archiviazione BLOB di AzureAzure Blob Storage wasb[s] <container>@<storage_account>.blob.core.windows.net
Azure Data Lake Store Gen 1Azure Data Lake Store Gen 1 adl <storage_account>.azuredatalake.net
Azure Data Lake Store Gen 2Azure Data Lake Store Gen 2 abfs[s] <container>@<storage_account>.dfs.core.windows.net

Percorso:Location path:

  • <container> = contenitore dell'account di archiviazione che include i dati.<container> = the container of the storage account holding the data. I contenitori radice sono di sola lettura, di conseguenza i dati non possono essere riscritti nel contenitore.Root containers are read-only, data can't be written back to the container.
  • <storage_account> = nome dell'account di archiviazione della risorsa di Azure.<storage_account> = the storage account name of the azure resource.

Note aggiuntive e indicazioni utili per l'impostazione della posizione:Additional notes and guidance when setting the location:

  • L'opzione predefinita consiste nell'abilitare le connessioni SSL sicure quando si esegue il provisioning di Azure Data Lake Storage Gen 2.The default option is to use enable secure SSL connections when provisioning Azure Data Lake Storage Gen 2. Quando questa opzione è abilitata, è necessario usare abfss quando viene selezionata una connessione SSL sicura.When this is enabled, you must use abfss when a secure SSL connection is selected. Si noti che abfss funziona anche per le connessioni SSL non sicure.Note abfssworks for unsecure SSL connections as well.
  • Il motore di SQL Data Warehouse non verifica l'esistenza dell'origine dati esterna quando viene creato l'oggetto.The SQL Data Warehouse engine doesn't verify the existence of the external data source when the object is created. Per eseguire la convalida, creare una tabella esterna usando l'origine dati esterna.To validate, create an external table using the external data source.
  • 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.Use the same external data source for all tables when querying Hadoop to ensure consistent querying semantics.
  • wasb è il protocollo predefinito dell'archiviazione BLOB di Azure.wasb is the default protocol for Azure blob storage. wasbs è facoltativo ma consigliato quando i dati vengono inviati usando una connessione SSL protetta.wasbs is optional but recommended as data will be sent using a secure SSL connection.

CREDENTIAL = credential_nameCREDENTIAL = credential_name

Specifica una credenziale con ambito database per l'autenticazione nell'origine dati esterna.Specifies a database-scoped credential for authenticating to the external data source.

Note aggiuntive e indicazioni utili per la creazione delle credenziali:Additional notes and guidance when creating a credential:

  • Per caricare i dati da Archiviazione BLOB di Azure o Azure Data Lake Store (ADLS) Gen 2 in SQL DW, usare una chiave di archiviazione di Azure.To load data from Azure Blob Storage or Azure Data Lake Store (ADLS) Gen 2 into SQL DW, use an Azure Storage Key.
  • CREDENTIAL è obbligatorio solo se il BLOB è stato protetto.CREDENTIAL is only required if the blob has been secured. CREDENTIAL non è obbligatorio per i set di dati che consentono l'accesso anonimo.CREDENTIAL isn't required for data sets that allow anonymous access.

Per creare credenziali con ambito database, vedere CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).To create a database scoped credential, see CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

TYPE = HADOOPTYPE = HADOOP

Specifica il tipo dell'origine dati esterna da configurare.Specifies the type of the external data source being configured. Questo parametro non è sempre obbligatorio.This parameter isn't always required.

  • Usare HADOOP quando l'origine dati esterna è Archiviazione BLOB di Azure, ADLS Gen 1 o ADLS Gen 2.Use HADOOP when the external data source is Azure Blob Storage, ADLS Gen 1, or ADLS Gen 2.

Importante

Non impostare TYPE se si usa qualsiasi altra origine dati esterna.Do not set TYPE if using any other external data source.

Per un esempio d'uso di TYPE = HADOOP per caricare i dati da Archiviazione BLOB di Azure, vedere Creare un'origine dati esterna per fare riferimento all'archiviazione BLOB di Azure.For an example of using TYPE = HADOOP to load data from Azure Blob Storage, see Create external data source to reference Azure blob storage.

AutorizzazioniPermissions

Richiede l'autorizzazione CONTROL nel database in SQL Data Warehouse.Requires CONTROL permission on database in SQL Data Warehouse.

Utilizzo di blocchiLocking

Acquisisce un blocco condiviso sull'oggetto EXTERNAL DATA SOURCE.Takes a shared lock on the EXTERNAL DATA SOURCE object.

SecuritySecurity

PolyBase supporta l'autenticazione basata su proxy per la maggior parte delle origini dati esterne.PolyBase supports proxy based authentication for most external data sources. Creare credenziali con ambito database per creare l'account proxy.Create a database scoped credential to create the proxy account.

Quando ci si connette al pool di archiviazione o al pool di dati in un cluster di Big Data di SQL Server, le credenziali dell'utente vengono passate tramite il sistema back-end.When you connect to the storage or data pool in a SQL Server big data cluster, the user's credentials are passed through to the back-end system. Creare gli account di accesso direttamente nel pool di dati per abilitare l'autenticazione pass-through.Create logins in the data pool itself to enable pass through authentication.

Il token di firma di accesso condiviso di tipo HADOOP non è attualmente supportato.Currently a SAS token with type HADOOP is unsupported. È supportato solo con una chiave di accesso dell'account di archiviazione.It's only supported with a storage account access key. 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:Attempting to create an external data source with type HADOOP and a SAS credential fails with the following error:

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 are not valid.: Error [Parameters provided to connect to the Azure storage account are not valid.] occurred while accessing external file.'

Esempi:Examples:

A.A. Creare un'origine dati esterna per fare riferimento all'archiviazione BLOB di AzureCreate external data source to reference Azure blob storage

In questo esempio, l'origine dati esterna è un contenitore dell'archiviazione BLOB di Azure denominato daily incluso nell'account di archiviazione di Azure denominato logs.In this example, the external data source is an Azure blob storage container called daily under Azure storage account named logs. L'origine dati esterna dell'archiviazione di Azure è destinata al solo trasferimento dei datiThe Azure storage external data source is for data transfer only. e non supporta il pushdown dei predicati.It doesn't support predicate push-down.

Questo esempio illustra come creare la credenziale con ambito database per l'autenticazione nell'archiviazione di Azure.This example shows how to create the database scoped credential for authentication to Azure storage. Specificare la chiave dell'account di archiviazione di Azure nel segreto della credenziale di database.Specify the Azure storage account key in the database credential secret. È possibile specificare qualsiasi stringa nell'identità della credenziale con ambito database perché non viene usata durante l'autenticazione nell'archiviazione di Azure.You can specify any string in database scoped credential identity as it isn't used during authentication to Azure storage.

-- 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 = 'S0me!nfo'
;

-- 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
(    LOCATION   = 'wasbs://daily@logs.blob.core.windows.net/'
,    CREDENTIAL = AzureStorageCredential
,    TYPE       = HADOOP
)
;

B.B. Creare un'origine dati esterna per fare riferimento ad Azure Data Lake Storage Gen 1 o 2 usando un'entità servizioCreate external data source to reference Azure Data Lake Store Gen 1 or 2 using a service principal

La connettività di Azure Data Lake Storage può essere basata sull'URI ADLS e sull'entità servizio dell'applicazione di Azure Active Directory.Azure Data lake Store connectivity can be based on your ADLS URI and your Azure Active directory Application's service principal. La documentazione relativa alla creazione di questa applicazione è disponibile in [Autenticazione con Azure Data Lake Storage usando Azure Active Directory][azure_ad[].Documentation for creating this application can be found at [Data lake store authentication using Active Directory][azure_ad[].

-- 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 Azure Active Directory 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
(    LOCATION       = 'adl://newyorktaxidataset.azuredatalakestore.net'
,    CREDENTIAL     = ADLS_credential
,    TYPE           = HADOOP
)
;

-- For Gen 2 - 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 2 account name and URI
-- CREDENTIAL: Provide the credential created in the previous step
CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH
(    LOCATION       = 'abfss://newyorktaxidataset.azuredatalakestore.net' -- Please note the abfss endpoint when your account has secure transfer enabled
,    CREDENTIAL     = ADLS_credential
,    TYPE           = HADOOP
)
;

C.C. Creare un'origine dati esterna per fare riferimento ad Azure Data Lake Storage Gen 2 usando la chiave dell'account di archiviazioneCreate external data source to reference Azure Data Lake Store Gen 2 using the storage account key

-- 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 Gen 2 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.D. Creare un'origine dati esterna per fare riferimento alla connettività Polybase ad Azure Data Lake Store Gen2Create external data source to reference Polybase connectivity to Azure Data Lake Store Gen 2

Non è necessario specificare SECRET quando ci si connette a un account Azure Data Lake Store Gen2 con il meccanismo Identità gestita.There is no need to specify SECRET when connecting to Azure Data Lake Store Gen2 account with Managed Identity mechanism.

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

Vedere ancheSee Also

SQL ServerSQL Server Database SQLSQL Database SQL Data
Warehouse
SQL Data
Warehouse
* Piattaforma di strumenti
analitici (PDW) *
 
* Analytics
Platform System (PDW) *
 

 

Panoramica: Sistema della piattaforma di analisiOverview: Analytics Platform System

Crea un'origine dati esterna per le query PolyBase.Creates an external data source for PolyBase queries. Le origini dati esterne vengono usate per stabilire la connettività e supportano il caso d'uso seguente: Virtualizzazione dati e caricamento dati con PolyBaseExternal data sources are used to establish connectivity and support the following use case: Data virtualization and data load using PolyBase

SintassiSyntax

CREATE EXTERNAL DATA SOURCE <data_source_name>  
WITH
(    LOCATION                  = '<prefix>://<path>[:<port>]'
[,   CREDENTIAL                = <credential_name> ]
[,   TYPE                      = HADOOP ]
[,   RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]'
)
[;]

ArgomentiArguments

data_source_namedata_source_name

Specifica il nome definito dall'utente per l'origine dati.Specifies the user-defined name for the data source. Il nome deve essere univoco all'interno del server nella piattaforma di strumenti analitici (Parallel Data Warehouse o PDW).The name must be unique within the server in Analytics Platform System (Parallel Data Warehouse or PDW).

LOCATION = '<prefix>://<path[:port]>'LOCATION = '<prefix>://<path[:port]>'

Fornisce il protocollo di connettività e il percorso dell'origine dati esterna.Provides the connectivity protocol and path to the external data source.

Origine dati esternaExternal Data Source Prefisso della posizioneLocation prefix PercorsoLocation path
Cloudera o HortonworksCloudera or Hortonworks hdfs <Namenode>[:port]
Archiviazione BLOB di AzureAzure Blob Storage wasb[s] <container>@<storage_account>.blob.core.windows.net

Percorso:Location path:

  • <Namenode> = nome del computer, URI del servizio dei nomi o indirizzo IP di Namenode nel cluster Hadoop.<Namenode> = the machine name, name service URI, or IP address of the Namenode in the Hadoop cluster. PolyBase deve risolvere tutti i nomi DNS usati dal cluster Hadoop.PolyBase must resolve any DNS names used by the Hadoop cluster.
  • port = porta su cui è in ascolto l'origine dati esterna.port = The port that the external data source is listening on. Per trovare la porta in Hadoop, si usa il parametro di configurazione fs.defaultFS.In Hadoop, the port can be found using the fs.defaultFS configuration parameter. L'impostazione predefinita è 8020.The default is 8020.
  • <container> = contenitore dell'account di archiviazione che include i dati.<container> = the container of the storage account holding the data. I contenitori radice sono di sola lettura, di conseguenza i dati non possono essere riscritti nel contenitore.Root containers are read-only, data can't be written back to the container.
  • <storage_account> = nome dell'account di archiviazione della risorsa di Azure.<storage_account> = the storage account name of the azure resource.

Note aggiuntive e indicazioni utili per l'impostazione della posizione:Additional notes and guidance when setting the location:

  • Il motore PDW non verifica l'esistenza dell'origine dati esterna quando viene creato l'oggetto.The PDW engine doesn't verify the existence of the external data source when the object is created. Per eseguire la convalida, creare una tabella esterna usando l'origine dati esterna.To validate, create an external table using the external data source.
  • 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.Use the same external data source for all tables when querying Hadoop to ensure consistent querying semantics.
  • wasb è il protocollo predefinito dell'archiviazione BLOB di Azure.wasb is the default protocol for Azure blob storage. wasbs è facoltativo ma consigliato quando i dati vengono inviati usando una connessione SSL protetta.wasbs is optional but recommended as data will be sent using a secure SSL connection.
  • 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.To ensure successful PolyBase queries during a Hadoop Namenode fail-over, consider using a virtual IP address for the Namenode of the Hadoop cluster. In caso contrario, eseguire un comando ALTER EXTERNAL DATA SOURCE in modo che punti alla nuova posizione.If you don't, execute an ALTER EXTERNAL DATA SOURCE command to point to the new location.

CREDENTIAL = credential_nameCREDENTIAL = credential_name

Specifica una credenziale con ambito database per l'autenticazione nell'origine dati esterna.Specifies a database-scoped credential for authenticating to the external data source.

Note aggiuntive e indicazioni utili per la creazione delle credenziali:Additional notes and guidance when creating a credential:

  • Per caricare dati dall'archiviazione BLOB di Azure o da Azure Data Lake Store (ADLS) Gen 2 in SQL DW o PDW, usare una chiave di archiviazione di Azure.To load data from either Azure Blob storage or Azure Data Lake Store (ADLS) Gen 2 into SQL DW or PDW, use an Azure Storage Key.
  • CREDENTIAL è obbligatorio solo se il BLOB è stato protetto.CREDENTIAL is only required if the blob has been secured. CREDENTIAL non è obbligatorio per i set di dati che consentono l'accesso anonimo.CREDENTIAL isn't required for data sets that allow anonymous access.

TYPE = [ HADOOP ]TYPE = [ HADOOP ]

Specifica il tipo dell'origine dati esterna da configurare.Specifies the type of the external data source being configured. Questo parametro non è sempre obbligatorio.This parameter isn't always required.

  • Usare HADOOP quando l'origine dati esterna è Cloudera, Hortonworks o Archiviazione BLOB di Azure.Use HADOOP when the external data source is Cloudera, Hortonworks, or Azure Blob Storage.

Importante

Non impostare TYPE se si usa qualsiasi altra origine dati esterna.Do not set TYPE if using any other external data source.

Per un esempio d'uso di TYPE = HADOOP per caricare i dati da Archiviazione BLOB di Azure, vedere Creare un'origine dati esterna per fare riferimento all'archiviazione BLOB di Azure.For an example of using TYPE = HADOOP to load data from Azure Blob Storage, see Create external data source to reference Azure blob storage.

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:port]'RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:port]'

Configurare questo valore facoltativo per la connessione a Hortonworks o Cloudera.Configure this optional value when connecting to Hortonworks or Cloudera.

Dopo aver definito RESOURCE_MANAGER_LOCATION, Query Optimizer prenderà una decisione basata sui costi per migliorare le prestazioni.When the RESOURCE_MANAGER_LOCATION is defined, the query optimizer will make a cost-based decision to improve performance. È possibile usare un processo MapReduce per eseguire il pushdown del calcolo in Hadoop.A MapReduce job can be used to push down the computation to 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.Specifying the RESOURCE_MANAGER_LOCATION can significantly reduce the volume of data transferred between Hadoop and SQL, which can lead to improved query performance.

Se non si specifica tale parametro, il push del calcolo in Hadoop è disabilitato per le query PolyBase.If the Resource Manager isn't specified, pushing compute to Hadoop is disabled for PolyBase queries.

Se la porta non è specificata, per la scelta del valore predefinito si usa l'impostazione corrente della configurazione 'hadoop connectivity'.If the port isn't specified, the default value is chosen using the current setting for 'hadoop connectivity' configuration.

Connettività HadoopHadoop Connectivity Porta di gestione risorse predefinitaDefault Resource Manager Port
11 5030050300
22 5030050300
33 80218021
44 80328032
55 80508050
66 80328032
77 80508050

Per un elenco completo delle versioni di Hadoop supportate, vedere Configurazione della connettività di PolyBase (Transact-SQL).For a complete list of supported Hadoop versions, see PolyBase Connectivity Configuration (Transact-SQL).

Importante

Il valore RESOURCE_MANAGER_LOCATION non viene convalidato quando si crea l'origine dati esterna.The RESOURCE_MANAGER_LOCATION value is not validated when you create the external data source. Se si immette un valore errato, potrebbe verificarsi un errore di query in fase di esecuzione quando si prova a usare il pushdown perché non è possibile risolvere il valore specificato.Entering an incorrect value may cause query failure at execution time whenever push-down is attempted as the provided value would not be able to resolve.

In Creare un'origine dati esterna per fare riferimento a Hadoop con il pushdown abilitato viene fornito un esempio concreto, oltre a ulteriori indicazioni.Create external data source to reference Hadoop with push-down enabled provides a concrete example and further guidance.

AutorizzazioniPermissions

Richiede l'autorizzazione CONTROL nel database nella piattaforma di strumenti analitici (Parallel Data Warehouse o PDW).Requires CONTROL permission on database in Analytics Platform System (Parallel Data Warehouse or PDW).

Nota

Nelle versioni precedenti di PDW creare le autorizzazioni ALTER ANY EXTERNAL DATA SOURCE richieste dell'origine dati esterna.In previous releases of PDW, create external data source required ALTER ANY EXTERNAL DATA SOURCE permissions.

Utilizzo di blocchiLocking

Acquisisce un blocco condiviso sull'oggetto EXTERNAL DATA SOURCE.Takes a shared lock on the EXTERNAL DATA SOURCE object.

SecuritySecurity

PolyBase supporta l'autenticazione basata su proxy per la maggior parte delle origini dati esterne.PolyBase supports proxy based authentication for most external data sources. Creare credenziali con ambito database per creare l'account proxy.Create a database scoped credential to create the proxy account.

Il token di firma di accesso condiviso di tipo HADOOP non è attualmente supportato.Currently a SAS token with type HADOOP is unsupported. È supportato solo con una chiave di accesso dell'account di archiviazione.It's only supported with a storage account access key. 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:Attempting to create an external data source with type HADOOP and a SAS credential fails with the following error:

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 are not valid.: Error [Parameters provided to connect to the Azure storage account are not valid.] occurred while accessing external file.'

Esempi:Examples:

A.A. Creare un'origine dati esterna per fare riferimento a HadoopCreate external data source to reference Hadoop

Per creare un'origine dati esterna per fare riferimento al cluster Hortonworks o Cloudera Hadoop, specificare il nome del computer o l'indirizzo IP di Namenode Hadoop e la porta.To create an external data source to reference your Hortonworks or Cloudera Hadoop cluster, specify the machine name, or IP address of the Hadoop Namenode and port.

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

B.B. Creare un'origine dati esterna per fare riferimento a Hadoop con il pushdown abilitatoCreate external data source to reference Hadoop with push-down enabled

Specificare l'opzione RESOURCE_MANAGER_LOCATION per abilitare il pushdown del calcolo in Hadoop per le query PolyBase.Specify the RESOURCE_MANAGER_LOCATION option to enable push-down computation to Hadoop for PolyBase queries. Dopo l'abilitazione, PolyBase prende una decisione basata sui costi per determinare se eseguire il push del calcolo delle query in Hadoop.Once enabled, PolyBase makes a cost-based decision to determine whether the query computation should be pushed to Hadoop.

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

C.C. Creare un'origine dati esterna per fare riferimento a Hadoop con protezione KerberosCreate external data source to reference Kerberos-secured Hadoop

Per verificare se il cluster Hadoop è protetto tramite Kerberos, controllare il valore della proprietà hadoop.security.authentication nel file core-site.xml di Hadoop.To verify if the Hadoop cluster is Kerberos-secured, check the value of hadoop.security.authentication property in Hadoop core-site.xml. 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.To reference a Kerberos-secured Hadoop cluster, you must specify a database scoped credential that contains your Kerberos username and password. La chiave master del database viene usata per crittografare il segreto della credenziale con ambito database.The database master key is used to encrypt the database scoped credential secret.

-- 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 = 'S0me!nfo'
;

-- 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
(    LOCATION                  = 'hdfs://10.10.10.10:8050'
,    CREDENTIAL                = HadoopUser1
,    TYPE                      = HADOOP
,    RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
)
;

D.D. Creare un'origine dati esterna per fare riferimento all'archiviazione BLOB di AzureCreate external data source to reference Azure blob storage

In questo esempio, l'origine dati esterna è un contenitore dell'archiviazione BLOB di Azure denominato daily incluso nell'account di archiviazione di Azure denominato logs.In this example, the external data source is an Azure blob storage container called daily under Azure storage account named logs. L'origine dati esterna dell'archiviazione di Azure è destinata al solo trasferimento dei datiThe Azure storage external data source is for data transfer only. e non supporta il pushdown dei predicati.It doesn't support predicate push-down.

Questo esempio illustra come creare la credenziale con ambito database per l'autenticazione nell'archiviazione di Azure.This example shows how to create the database scoped credential for authentication to Azure storage. Specificare la chiave dell'account di archiviazione di Azure nel segreto della credenziale di database.Specify the Azure storage account key in the database credential secret. È possibile specificare qualsiasi stringa nell'identità della credenziale con ambito database perché non viene usata durante l'autenticazione nell'archiviazione di Azure.You can specify any string in database scoped credential identity as it isn't used during authentication to Azure storage.

-- 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 = 'S0me!nfo'
;

-- 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
(    LOCATION   = 'wasbs://daily@logs.blob.core.windows.net/'
,    CREDENTIAL = AzureStorageCredential
,    TYPE       = HADOOP
)
;

Vedere ancheSee Also