CREATE EXTERNAL DATA SOURCE (Transact-SQL)

Crea un origen de datos externo para realizar consultas mediante SQL Server, Azure SQL Database, Azure Synapse Analytics o Sistema de la plataforma de análisis (Sistema de la plataforma de análisis (PDW)), o bien Azure SQL Edge.

En este artículo se proporciona la sintaxis, argumentos, comentarios, permisos y ejemplos para cualquier producto SQL que elija.

Selección de un producto

En la fila siguiente, seleccione el nombre del producto que le interese; de esta manera, solo se mostrará la información de ese producto.

Introducción: SQL Server

Se aplica a: síSQL Server 2016 (13.x) y versiones posteriores

Crea un origen de datos externo para consultas de PolyBase. Los orígenes de datos externos se usan para establecer la conectividad y admiten estos casos de uso principales:

  • Virtualización y carga de datos mediante PolyBase
  • Operaciones de carga masiva con BULK INSERT o OPENROWSET

Para obtener más información sobre las convenciones de sintaxis, vea Convenciones de sintaxis de Transact-SQL.

Sintaxis para SQL Server 2016

Nota

Esta sintaxis varía entre las versiones de SQL Server. Use la lista desplegable del selector de versiones para elegir la versión adecuada de SQL Server. Para ver las características de SQL Server 2019, vea CREATE EXTERNAL DATA SOURCE.

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

Argumentos

data_source_name

Especifica el nombre definido por el usuario para el origen de datos. El nombre debe ser único en la base de datos de SQL Server.

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

Proporciona el protocolo de conectividad y la ruta de acceso al origen de datos externo.

Origen de datos externo Prefijo de ubicación Ruta de acceso de ubicación Ubicaciones admitidas por producto o servicio
Cloudera CDH o Hortonworks HDP hdfs <Namenode>[:port] A partir de SQL Server 2016 (13.x)
Cuenta de Azure Storage (V2) wasb[s] <container>@<storage_account>.blob.core.windows.net A partir de SQL Server 2016 (13.x), la característica Espacio de nombres jerárquico no se admite

Ruta de acceso de ubicación:

  • <NameNode>: nombre de equipo, nombre de URI de servicio o dirección IP del Namenode en el clúster de Hadoop. PolyBase debe resolver los nombres DNS utilizados por el clúster de Hadoop.
  • port = el puerto en el cual escucha el origen de datos externo. En Hadoop, el puerto se puede encontrar mediante el parámetro de configuración fs.defaultFS. El valor predeterminado es 8020.
  • <container> = el contenedor de la cuenta de almacenamiento que contiene los datos. Los contenedores raíz son de solo lectura, no se pueden volver a escribir datos en el contenedor.
  • <storage_account> = nombre de la cuenta de almacenamiento del recurso de Azure.
  • <server_name> = el nombre de host.
  • <instance_name> = el nombre de la instancia con nombre de SQL Server. Se usa si tiene el servicio de SQL Server Browser en ejecución en la instancia de destino.

Instrucciones y notas adicionales cuando se establece la ubicación:

  • Motor de base de datos de SQL Server no comprueba la existencia del origen de datos externo cuando se crea el objeto. Para la validación, crea una tabla externa utilizando el origen de datos externo.
  • Para garantizar una semántica de consulta coherente, use el mismo origen de datos externo para todas las tablas cuando realice consultas a Hadoop.
  • wasbs es opcional, pero se recomienda para acceder a las cuentas de Azure Storage, ya que se enviarán los datos mediante una conexión TLS/SSL segura.
  • Para garantizar que las consultas de PolyBase son correctas durante una conmutación por error del Namenode de Hadoop, considere la posibilidad de usar una dirección IP virtual para el Namenode del clúster de Hadoop. Si no, ejecute un comando ALTER EXTERNAL DATA SOURCE para que apunte a la nueva ubicación.

CREDENTIAL = credential_name

Especifica una credencial de ámbito de base de datos para la autenticación en el origen de datos externo.

CREDENTIAL solo se necesita si se han protegido los datos. CREDENTIAL no es necesario para los conjuntos de datos que permiten el acceso anónimo.

Para crear una credencial con ámbito de base de datos, vea CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

TYPE = [ HADOOP ]

Especifica el tipo de origen de datos externo que se está configurando. Este parámetro no siempre es necesario y solo se debe especificar al conectarse a Cloudera CDH, Hortonworks HDP o una cuenta de Azure Storage.

Use HADOOP cuando el origen de datos externo sea Cloudera CDH, Hortonworks HDP o una cuenta de Azure Storage.

Nota

En SQL Server 2016, TYPE se debe establecer en HADOOP incluso al acceder a Azure Storage.

A fin de obtener un ejemplo de cómo usar TYPE = HADOOP para cargar datos desde una cuenta de Azure Storage, vea Creación de orígenes de datos externos para acceder a los datos de Azure Storage mediante la interfaz wasb://

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:port]'

Configure este valor opcional solo al conectarse a Cloudera CDH, Hortonworks HDP o una cuenta de Azure Storage.

Cuando RESOURCE_MANAGER_LOCATION está definido, el optimizador de consultas toma una decisión basada en el coste para mejorar el rendimiento. Se puede usar un trabajo de MapReduce para insertar el cálculo en Hadoop. La especificación de RESOURCE_MANAGER_LOCATION puede reducir significativamente el volumen de datos transferidos entre Hadoop y SQL Server, lo que puede suponer una mejora en el rendimiento de las consultas.

Si no se especifica el administrador de recursos, se deshabilita la inserción de cálculo en Hadoop para las consultas de PolyBase.

Si no se especifica el puerto, el valor predeterminado se elige mediante el valor actual de la configuración "hadoop connectivity".

Conectividad de Hadoop Puerto predeterminado del administrador de recursos
1 50300
2 50300
3 8021
4 8032
5 8050
6 8032
7 8050
8 8032

Para obtener una lista completa de las versiones de Hadoop compatibles, vea Configuración de conectividad de PolyBase (Transact-SQL).

Importante

El valor RESOURCE_MANAGER_LOCATION no se valida cuando se crea el origen de datos externo. Escribir un valor incorrecto puede provocar un error de consulta en tiempo de ejecución cada vez que se intente la inserción, ya que el valor proporcionado no podrá realizar la resolución.

En Creación de un origen de datos externo para hacer referencia a Hadoop con la inserción habilitada se proporciona un ejemplo concreto y más instrucciones.

Permisos

Se necesita el permiso CONTROL para la base de datos de SQL Server.

Bloqueo

Toma un bloqueo compartido en el objeto EXTERNAL DATA SOURCE.

Seguridad

PolyBase es compatible con la autenticación basada en proxy para la mayoría de orígenes de datos externos. Cree una credencial con ámbito de base de datos para crear la cuenta de proxy.

Cuando se conecta al almacenamiento o el grupo de datos en un clúster de macrodatos de SQL Server, las credenciales del usuario se pasan a través del sistema back-end. Cree inicios de sesión en el propio grupo de datos para habilitar la autenticación de paso a través.

Ejemplos

Importante

Para obtener información sobre cómo instalar y habilitar PolyBase, vea Instalación de PolyBase en Windows

A. Creación de un origen de datos externo para hacer referencia a Hadoop

Si quiere crear un origen de datos externo para hacer referencia al clúster de Hadoop de Hortonworks HDP o Cloudera CDH, especifique el nombre de equipo o la dirección IP de Namenode y puerto de Hadoop.

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

B. Creación de un origen de datos externo para hacer referencia a Hadoop con la inserción habilitada

Especifique la opción RESOURCE_MANAGER_LOCATION para habilitar la inserción de cálculo en Hadoop para las consultas de PolyBase. Una vez habilitado, PolyBase toma una decisión basada en el coste para determinar si se debe aplicar el cálculo de la consulta en 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. Creación de un origen de datos externo para hacer referencia a Hadoop con protección de Kerberos

Para comprobar si el clúster de Hadoop está protegido con Kerberos, compruebe el valor de la propiedad hadoop.security.authentication en core-site.xml de Hadoop. Para hacer referencia a un clúster de Hadoop protegido con Kerberos, debe especificar una credencial con ámbito de base de datos que contenga el nombre de usuario y la contraseña de Kerberos. La clave maestra de base de datos se usa para cifrar el secreto de la credencial de ámbito de base de datos.

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

D. Creación de un origen de datos externo para acceder a los datos de Azure Storage mediante la interfaz wasb://

En este ejemplo, el origen de datos externo es una cuenta de Azure Storage (V2) denominada logs. El contenedor de almacenamiento se denomina daily. El origen de datos externo de Azure Storage es solo para la transferencia de datos. No admite la inserción de predicado. No se admiten espacios de nombres jerárquicos al acceder a los datos mediante la interfaz de wasb://.

En este ejemplo se muestra cómo crear la credencial de ámbito de base de datos para la autenticación en una cuenta de Azure Storage (V2). Especifique la clave de la cuenta de Azure Storage en el secreto de la credencial de base de datos. Puede especificar cualquier cadena en la identidad de la credencial con ámbito de base de datos, ya que no se usará para la autenticación en Azure Storage.

En SQL Server 2016, TYPE se debe establecer en HADOOP incluso al acceder a 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 = '<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
  ( LOCATION = 'wasbs://daily@logs.blob.core.windows.net/' ,
    CREDENTIAL = AzureStorageCredential ,
    TYPE = HADOOP
  ) ;

Vea también

Introducción: SQL Server

Se aplica a: síSQL Server 2016 (13.x) y versiones posteriores

Crea un origen de datos externo para consultas de PolyBase. Los orígenes de datos externos se usan para establecer la conectividad y admiten estos casos de uso principales:

  • Virtualización y carga de datos mediante PolyBase
  • Operaciones de carga masiva con BULK INSERT o OPENROWSET

Para obtener más información sobre las convenciones de sintaxis, vea Convenciones de sintaxis de Transact-SQL.

Sintaxis para SQL Server 2017

Nota

Esta sintaxis varía entre las versiones de SQL Server. Use la lista desplegable del selector de versiones para elegir la versión adecuada de SQL Server. Para ver las características de SQL Server 2019, vea CREATE EXTERNAL DATA SOURCE.

Nota

Esta sintaxis varía entre las versiones de SQL Server. Use la lista desplegable del selector de versiones para elegir la versión adecuada de SQL Server. Para ver las características de SQL Server 2019, vea CREATE EXTERNAL DATA SOURCE.

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

Argumentos

data_source_name

Especifica el nombre definido por el usuario para el origen de datos. El nombre debe ser único en la base de datos de SQL Server.

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

Proporciona el protocolo de conectividad y la ruta de acceso al origen de datos externo.

Origen de datos externo Prefijo de ubicación Ruta de acceso de ubicación Ubicaciones admitidas por producto o servicio
Cloudera CDH o Hortonworks HDP hdfs <Namenode>[:port] A partir de SQL Server 2016 (13.x)
Cuenta de Azure Storage (V2) wasb[s] <container>@<storage_account>.blob.core.windows.net A partir de SQL Server 2016 (13.x), la característica Espacio de nombres jerárquico no se admite
Operaciones masivas https <storage_account>.blob.core.windows.net/<container> A partir de SQL Server 2017 (14.x)

Ruta de acceso de ubicación:

  • <NameNode>: nombre de equipo, nombre de URI de servicio o dirección IP del Namenode en el clúster de Hadoop. PolyBase debe resolver los nombres DNS utilizados por el clúster de Hadoop.
  • port = el puerto en el cual escucha el origen de datos externo. En Hadoop, el puerto se puede encontrar mediante el parámetro de configuración fs.defaultFS. El valor predeterminado es 8020.
  • <container> = el contenedor de la cuenta de almacenamiento que contiene los datos. Los contenedores raíz son de solo lectura, no se pueden volver a escribir datos en el contenedor.
  • <storage_account> = nombre de la cuenta de almacenamiento del recurso de Azure.
  • <server_name> = el nombre de host.
  • <instance_name> = el nombre de la instancia con nombre de SQL Server. Se usa si tiene el servicio de SQL Server Browser en ejecución en la instancia de destino.

Instrucciones y notas adicionales cuando se establece la ubicación:

  • Motor de base de datos de SQL Server no comprueba la existencia del origen de datos externo cuando se crea el objeto. Para la validación, crea una tabla externa utilizando el origen de datos externo.
  • Para garantizar una semántica de consulta coherente, use el mismo origen de datos externo para todas las tablas cuando realice consultas a Hadoop.
  • Especifique Driver={<Name of Driver>} al conectarse a través de ODBC.
  • wasbs es opcional, pero se recomienda para acceder a las cuentas de Azure Storage, ya que se enviarán los datos mediante una conexión TLS/SSL segura.
  • Para garantizar que las consultas de PolyBase son correctas durante una conmutación por error del Namenode de Hadoop, considere la posibilidad de usar una dirección IP virtual para el Namenode del clúster de Hadoop. Si no, ejecute un comando ALTER EXTERNAL DATA SOURCE para que apunte a la nueva ubicación.

CREDENTIAL = credential_name

Especifica una credencial de ámbito de base de datos para la autenticación en el origen de datos externo.

Instrucciones y notas adicionales cuando se crea una credencial:

  • CREDENTIAL solo se necesita si se han protegido los datos. CREDENTIAL no es necesario para los conjuntos de datos que permiten el acceso anónimo.
  • Si es TYPE = BLOB_STORAGE, la credencial debe crearse mediante el uso de SHARED ACCESS SIGNATURE como identidad. Además, el token de SAS debe configurarse del modo siguiente:
    • Excluir el ? inicial cuando se configura como secreto
    • Disponer de al menos permiso de lectura en el archivo que se debe cargar (por ejemplo srt=o&sp=r)
    • Usar un período de caducidad válido (todas las fechas se encuentran en hora UTC).

Para obtener un ejemplo del uso de CREDENTIAL con SHARED ACCESS SIGNATURE y TYPE = BLOB_STORAGE, vea Creación de un origen de datos externo para ejecutar operaciones masivas y recuperar datos desde Azure Storage en SQL Database.

Para crear una credencial con ámbito de base de datos, vea CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

TYPE = [ HADOOP | BLOB_STORAGE ]

Especifica el tipo de origen de datos externo que se está configurando. Este parámetro no siempre es necesario y solo se debe especificar al conectarse a Cloudera CDH, Hortonworks HDP, una cuenta de Azure Storage o una instancia de Azure Data Lake Storage Gen2.

  • Use HADOOP cuando el origen de datos externo sea Cloudera CDH, Hortonworks HDP, una cuenta de Azure Storage o una instancia de Azure Data Lake Storage Gen2.
  • Use BLOB_STORAGE al ejecutar operaciones masivas desde una cuenta de Azure Storage mediante BULK INSERT u OPENROWSET. Se ha incorporado con SQL Server 2017 (14.x).

A fin de obtener un ejemplo de cómo usar TYPE = HADOOP para cargar datos desde una cuenta de Azure Storage, vea Creación de orígenes de datos externos para acceder a los datos de Azure Storage mediante la interfaz wasb://

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:port]'

Configure este valor opcional solo al conectarse a Cloudera CDH, Hortonworks HDP o una cuenta de Azure Storage.

Cuando RESOURCE_MANAGER_LOCATION está definido, el optimizador de consultas tomará una decisión basada en el costo para mejorar el rendimiento. Se puede usar un trabajo de MapReduce para insertar el cálculo en Hadoop. La especificación de RESOURCE_MANAGER_LOCATION puede reducir significativamente el volumen de datos transferidos entre Hadoop y SQL Server, lo que puede suponer una mejora en el rendimiento de las consultas.

Si no se especifica el administrador de recursos, se deshabilita la inserción de cálculo en Hadoop para las consultas de PolyBase.

Si no se especifica el puerto, el valor predeterminado se elige mediante el valor actual de la configuración "hadoop connectivity".

Conectividad de Hadoop Puerto predeterminado del administrador de recursos
1 50300
2 50300
3 8021
4 8032
5 8050
6 8032
7 8050
8 8032

Para obtener una lista completa de las versiones de Hadoop compatibles, vea Configuración de conectividad de PolyBase (Transact-SQL).

Importante

El valor RESOURCE_MANAGER_LOCATION no se valida cuando se crea el origen de datos externo. Escribir un valor incorrecto puede provocar un error de consulta en tiempo de ejecución cada vez que se intente la inserción, ya que el valor proporcionado no podrá realizar la resolución.

En Creación de un origen de datos externo para hacer referencia a Hadoop con la inserción habilitada se proporciona un ejemplo concreto y más instrucciones.

Permisos

Se necesita el permiso CONTROL para la base de datos de SQL Server.

Bloqueo

Toma un bloqueo compartido en el objeto EXTERNAL DATA SOURCE.

Seguridad

PolyBase es compatible con la autenticación basada en proxy para la mayoría de orígenes de datos externos. Cree una credencial con ámbito de base de datos para crear la cuenta de proxy.

Cuando se conecta al almacenamiento o el grupo de datos en un clúster de macrodatos de SQL Server, las credenciales del usuario se pasan a través del sistema back-end. Cree inicios de sesión en el propio grupo de datos para habilitar la autenticación de paso a través.

No se admite un token de SAS con el tipo HADOOP. Solo se admite con el tipo = BLOB_STORAGE cuando se usa en su lugar una clave de acceso de la cuenta de almacenamiento. Si se intenta crear un origen de datos externo con el tipo HADOOP y una credencial SAS, aparece un error como el siguiente:

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

Ejemplos

Importante

Para obtener información sobre cómo instalar y habilitar PolyBase, vea Instalación de PolyBase en Windows

A. Creación de un origen de datos externo para hacer referencia a Hadoop

Si quiere crear un origen de datos externo para hacer referencia al clúster de Hadoop de Hortonworks HDP o Cloudera CDH, especifique el nombre de equipo o la dirección IP de Namenode y puerto de Hadoop.

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

B. Creación de un origen de datos externo para hacer referencia a Hadoop con la inserción habilitada

Especifique la opción RESOURCE_MANAGER_LOCATION para habilitar la inserción de cálculo en Hadoop para las consultas de PolyBase. Una vez habilitado, PolyBase toma una decisión basada en el coste para determinar si se debe aplicar el cálculo de la consulta en 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. Creación de un origen de datos externo para hacer referencia a Hadoop con protección de Kerberos

Para comprobar si el clúster de Hadoop está protegido con Kerberos, compruebe el valor de la propiedad hadoop.security.authentication en core-site.xml de Hadoop. Para hacer referencia a un clúster de Hadoop protegido con Kerberos, debe especificar una credencial con ámbito de base de datos que contenga el nombre de usuario y la contraseña de Kerberos. La clave maestra de base de datos se usa para cifrar el secreto de la credencial de ámbito de base de datos.

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

D. Creación de un origen de datos externo para acceder a los datos de Azure Storage mediante la interfaz wasb://

En este ejemplo, el origen de datos externo es una cuenta de Azure Storage (V2) denominada logs. El contenedor de almacenamiento se denomina daily. El origen de datos externo de Azure Storage es solo para la transferencia de datos. No admite la inserción de predicado. No se admiten espacios de nombres jerárquicos al acceder a los datos mediante la interfaz de wasb://.

En este ejemplo se muestra cómo crear la credencial de ámbito de base de datos para la autenticación en una cuenta de Azure Storage (V2). Especifique la clave de la cuenta de Azure Storage en el secreto de la credencial de base de datos. Puede especificar cualquier cadena en la identidad de la credencial con ámbito de base de datos, ya que no se usará para la autenticación en 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 = '<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
  ( LOCATION = 'wasbs://daily@logs.blob.core.windows.net/' ,
    CREDENTIAL = AzureStorageCredential ,
    TYPE = HADOOP
  ) ;

Ejemplos: Operaciones masivas

Importante

No coloque un / final, nombre de archivo o parámetros de firma de acceso compartido al final de la dirección URL de LOCATION al configurar un origen de datos externo para las operaciones masivas.

E. Creación de un origen de datos externo para operaciones masivas de recuperación de datos desde Azure Storage

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores.

Use el origen de datos siguiente para las operaciones masivas con BULK INSERT o OPENROWSET. La credencial debe establecer SHARED ACCESS SIGNATURE como identidad, no debe tener al inicio ? en el token de SAS, debe tener al menos permiso de lectura en el archivo que se debe cargar (por ejemplo srt=o&sp=r), y el período de expiración debe ser válido (todas las fechas se expresan en hora UTC). Para más información sobre las firmas de acceso compartido, vea Uso de Firmas de acceso compartido (SAS).

CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH
  IDENTITY = 'SHARED ACCESS SIGNATURE',
  -- Remove ? from the beginning of the SAS token
  SECRET = '<azure_storage_account_key>' ;

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

Para ver este ejemplo en uso, vea el ejemplo BULK INSERT.

Vea también

Introducción: SQL Server

Se aplica a: síSQL Server 2016 (13.x) y versiones posteriores

Crea un origen de datos externo para consultas de PolyBase. Los orígenes de datos externos se usan para establecer la conectividad y admiten estos casos de uso principales:

  • Virtualización y carga de datos mediante PolyBase
  • Operaciones de carga masiva con BULK INSERT o OPENROWSET

Para obtener más información sobre las convenciones de sintaxis, vea Convenciones de sintaxis de Transact-SQL.

Sintaxis para SQL Server 2019

Nota

Esta sintaxis varía entre las versiones de SQL Server. Use la lista desplegable del selector de versiones para elegir la versión adecuada de SQL Server.

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

Argumentos

data_source_name

Especifica el nombre definido por el usuario para el origen de datos. El nombre debe ser único en la base de datos de SQL Server.

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

Proporciona el protocolo de conectividad y la ruta de acceso al origen de datos externo.

Origen de datos externo Prefijo de ubicación Ruta de acceso de ubicación Ubicaciones admitidas por producto o servicio
Cloudera CDH o Hortonworks HDP hdfs <Namenode>[:port] A partir de SQL Server 2016 (13.x)
Cuenta de Azure Storage (V2) wasb[s] <container>@<storage_account>.blob.core.windows.net A partir de SQL Server 2016 (13.x), la característica Espacio de nombres jerárquico no se admite
SQL Server sqlserver <server_name>[\<instance_name>][:port] A partir de SQL Server 2019 (15.x)
Oracle oracle <server_name>[:port] A partir de SQL Server 2019 (15.x)
Teradata teradata <server_name>[:port] A partir de SQL Server 2019 (15.x)
MongoDB o API de Cosmos DB para MongoDB mongodb <server_name>[:port] A partir de SQL Server 2019 (15.x)
ODBC genérico odbc <server_name>[:port] A partir de SQL Server 2019 (15.x): solo Windows
Operaciones masivas https <storage_account>.blob.core.windows.net/<container> A partir de SQL Server 2017 (14.x)
Azure Data Lake Storage Gen2 abfs[s] abfss://<container>@<storage _account>.dfs.core.windows.net A partir de SQL Server 2019 (15.x) CU11 y versiones posteriores.

Ruta de acceso de ubicación:

  • <NameNode>: nombre de equipo, nombre de URI de servicio o dirección IP del Namenode en el clúster de Hadoop. PolyBase debe resolver los nombres DNS utilizados por el clúster de Hadoop.
  • port = el puerto en el cual escucha el origen de datos externo. En Hadoop, el puerto se puede encontrar mediante el parámetro de configuración fs.defaultFS. El valor predeterminado es 8020.
  • <container> = el contenedor de la cuenta de almacenamiento que contiene los datos. Los contenedores raíz son de solo lectura, no se pueden volver a escribir datos en el contenedor.
  • <storage_account> = nombre de la cuenta de almacenamiento del recurso de Azure.
  • <server_name> = el nombre de host.
  • <instance_name> = el nombre de la instancia con nombre de SQL Server. Se usa si tiene el servicio de SQL Server Browser en ejecución en la instancia de destino.

Instrucciones y notas adicionales cuando se establece la ubicación:

  • Motor de base de datos de SQL Server no comprueba la existencia del origen de datos externo cuando se crea el objeto. Para la validación, crea una tabla externa utilizando el origen de datos externo.
  • Para garantizar una semántica de consulta coherente, use el mismo origen de datos externo para todas las tablas cuando realice consultas a Hadoop.
  • Puede usar el prefijo de ubicación sqlserver para conectar SQL Server 2019 (15.x) a otra instancia de SQL Server, a Azure SQL Database o a Azure Synapse Analytics.
  • Especifique Driver={<Name of Driver>} al conectarse a través de ODBC.
  • El uso de wasbs o abfss es opcional, pero se recomienda para acceder a las cuentas de Azure Storage, ya que los datos se enviarán mediante una conexión TLS/SSL segura.
  • Las API abfs o abfss se admiten al acceder a las cuentas de Azure Storage a partir de SQL Server 2019 (15.x) CU11. Para obtener más información, vea Controlador Azure Blob File System (ABFS).
  • La opción Espacio de nombres jerárquico para cuentas de Azure Storage (V2) mediante abfs[s] se admite a través de Azure Data Lake Storage Gen2 a partir de SQL Server 2019 (15.x) CU11+. De lo contrario, no se admite la opción Espacio de nombres jerárquico y debe permanecer deshabilitada.
  • Para garantizar que las consultas de PolyBase son correctas durante una conmutación por error del Namenode de Hadoop, considere la posibilidad de usar una dirección IP virtual para el Namenode del clúster de Hadoop. Si no, ejecute un comando ALTER EXTERNAL DATA SOURCE para que apunte a la nueva ubicación.

CONNECTION_OPTIONS = key_value_pair

Se especifica solo para SQL Server 2019 (15.x). Especifica opciones adicionales al conectarse a través de ODBC a un origen de datos externo. Para usar varias opciones de conexión, sepárelas mediante punto y coma.

Se aplica a las conexiones ODBC genéricas, así como a los conectores ODBC integrados para SQL Server, Oracle, Teradata, MongoDB y la API de Azure Cosmos DB para MongoDB.

key_value_pair es la palabra clave y el valor de una opción de conexión específica. Las palabras clave y los valores disponibles dependen del tipo de origen de datos externo. Se requiere como mínimo el nombre del controlador, pero existen otras opciones, como APP='<your_application_name>' o ApplicationIntent= ReadOnly|ReadWrite, que también resulta útil establecerlas y pueden ayudarle con la solución de problemas.

Para más información, consulte:

PUSHDOWN = ON | OFF

Se especifica solo para SQL Server 2019 (15.x). Indica si se puede insertar cálculo en el origen de datos externo. El valor predeterminado es ON.

PUSHDOWN se admite al conectarse a SQL Server, Oracle, Teradata, MongoDB, la API Azure Cosmos DB para MongoDB u ODBC en el nivel de origen de datos externo.

Habilitar o deshabilitar la inserción en el nivel de consulta se logra a través de una sugerencia.

CREDENTIAL = credential_name

Especifica una credencial de ámbito de base de datos para la autenticación en el origen de datos externo.

Instrucciones y notas adicionales cuando se crea una credencial:

  • CREDENTIAL solo se necesita si se han protegido los datos. CREDENTIAL no es necesario para los conjuntos de datos que permiten el acceso anónimo.
  • Si es TYPE = BLOB_STORAGE, la credencial debe crearse mediante el uso de SHARED ACCESS SIGNATURE como identidad. Además, el token de SAS debe configurarse del modo siguiente:
    • Excluir el ? inicial cuando se configura como secreto
    • Disponer de al menos permiso de lectura en el archivo que se debe cargar (por ejemplo srt=o&sp=r)
    • Usar un período de caducidad válido (todas las fechas se encuentran en hora UTC).

Para obtener un ejemplo del uso de CREDENTIAL con SHARED ACCESS SIGNATURE y TYPE = BLOB_STORAGE, vea Creación de un origen de datos externo para ejecutar operaciones masivas y recuperar datos desde Azure Storage en SQL Database.

Para crear una credencial con ámbito de base de datos, vea CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

TYPE = [ HADOOP | BLOB_STORAGE ]

Especifica el tipo de origen de datos externo que se está configurando. Este parámetro no siempre es necesario y solo se debe especificar al conectarse a Cloudera CDH, Hortonworks HDP, una cuenta de Azure Storage o una instancia de Azure Data Lake Storage Gen2.

  • En SQL Server 2019 (15.x), no especifique TYPE a menos que se conecte a Cloudera CDH, Hortonworks HDP o una cuenta de Azure Storage.
  • Use HADOOP cuando el origen de datos externo sea Cloudera CDH, Hortonworks HDP, una cuenta de Azure Storage o una instancia de Azure Data Lake Storage Gen2.
  • Use BLOB_STORAGE al ejecutar operaciones masivas desde una cuenta de Azure Storage mediante BULK INSERT u OPENROWSET con SQL Server 2017 (14.x).

A fin de obtener un ejemplo de cómo usar TYPE = HADOOP para cargar datos desde una cuenta de Azure Storage, vea Creación de orígenes de datos externos para acceder a los datos de Azure Storage mediante la interfaz wasb://

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:port]'

Configure este valor opcional solo al conectarse a Cloudera CDH, Hortonworks HDP o una cuenta de Azure Storage. En SQL Server 2019 (15.x), no especifique RESOURCE_MANAGER_LOCATION a menos que se conecte a Cloudera CDH, Hortonworks HDP o una cuenta de Azure Storage.

Cuando RESOURCE_MANAGER_LOCATION está definido, el optimizador de consultas tomará una decisión basada en el costo para mejorar el rendimiento. Se puede usar un trabajo de MapReduce para insertar el cálculo en Hadoop. La especificación de RESOURCE_MANAGER_LOCATION puede reducir significativamente el volumen de datos transferidos entre Hadoop y SQL Server, lo que puede suponer una mejora en el rendimiento de las consultas.

Si no se especifica el administrador de recursos, se deshabilita la inserción de cálculo en Hadoop para las consultas de PolyBase.

Si no se especifica el puerto, el valor predeterminado se elige mediante el valor actual de la configuración "hadoop connectivity".

Conectividad de Hadoop Puerto predeterminado del administrador de recursos
1 50300
2 50300
3 8021
4 8032
5 8050
6 8032
7 8050
8 8032

Para obtener una lista completa de las versiones de Hadoop compatibles, vea Configuración de conectividad de PolyBase (Transact-SQL).

Importante

El valor RESOURCE_MANAGER_LOCATION no se valida cuando se crea el origen de datos externo. Escribir un valor incorrecto puede provocar un error de consulta en tiempo de ejecución cada vez que se intente la inserción, ya que el valor proporcionado no podrá realizar la resolución.

En Creación de un origen de datos externo para hacer referencia a Hadoop con la inserción habilitada se proporciona un ejemplo concreto y más instrucciones.

Permisos

Se necesita el permiso CONTROL para la base de datos de SQL Server.

Bloqueo

Toma un bloqueo compartido en el objeto EXTERNAL DATA SOURCE.

Seguridad

PolyBase es compatible con la autenticación basada en proxy para la mayoría de orígenes de datos externos. Cree una credencial con ámbito de base de datos para crear la cuenta de proxy.

Cuando se conecta al almacenamiento o el grupo de datos en un clúster de macrodatos de SQL Server, las credenciales del usuario se pasan a través del sistema back-end. Cree inicios de sesión en el propio grupo de datos para habilitar la autenticación de paso a través.

No se admite un token de SAS con el tipo HADOOP. Solo se admite con el tipo = BLOB_STORAGE cuando se usa en su lugar una clave de acceso de la cuenta de almacenamiento. Si se intenta crear un origen de datos externo con el tipo HADOOP y una credencial SAS, aparece un error como el siguiente:

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

Ejemplos

Importante

Para obtener información sobre cómo instalar y habilitar PolyBase, vea Instalación de PolyBase en Windows

A. Creación de un origen de datos externo en SQL Server 2019 para hacer referencia a Oracle

Para crear un origen de datos externo que haga referencia a Oracle, asegúrese de que tiene una credencial con ámbito de base de datos. También, opcionalmente, puede habilitar o deshabilitar la inserción de cálculo en este origen de datos.

-- Create a database master key if one does not already exist, using your own password. This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;

-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL OracleProxyAccount
WITH
     IDENTITY = 'oracle_username',
     SECRET = 'oracle_password' ;

CREATE EXTERNAL DATA SOURCE MyOracleServer
WITH
  ( LOCATION = 'oracle://145.145.145.145:1521',
    CREDENTIAL = OracleProxyAccount,
    PUSHDOWN = ON
  ) ;

Para obtener ejemplos adicionales de otros orígenes de datos, como MongoDB, vea Configuración de PolyBase para acceder a datos externos en MongoDB.

B. Creación de un origen de datos externo para hacer referencia a Hadoop

Si quiere crear un origen de datos externo para hacer referencia al clúster de Hadoop de Hortonworks HDP o Cloudera CDH, especifique el nombre de equipo o la dirección IP de Namenode y puerto de Hadoop.

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

C. Creación de un origen de datos externo para hacer referencia a Hadoop con la inserción habilitada

Especifique la opción RESOURCE_MANAGER_LOCATION para habilitar la inserción de cálculo en Hadoop para las consultas de PolyBase. Una vez habilitado, PolyBase toma una decisión basada en el coste para determinar si se debe aplicar el cálculo de la consulta en 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. Creación de un origen de datos externo para hacer referencia a Hadoop con protección de Kerberos

Para comprobar si el clúster de Hadoop está protegido con Kerberos, compruebe el valor de la propiedad hadoop.security.authentication en core-site.xml de Hadoop. Para hacer referencia a un clúster de Hadoop protegido con Kerberos, debe especificar una credencial con ámbito de base de datos que contenga el nombre de usuario y la contraseña de Kerberos. La clave maestra de base de datos se usa para cifrar el secreto de la credencial de ámbito de base de datos.

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

E. Creación de un origen de datos externo para acceder a los datos de Azure Storage mediante la interfaz wasb://

En este ejemplo, el origen de datos externo es una cuenta de Azure Storage (V2) denominada logs. El contenedor de almacenamiento se denomina daily. El origen de datos externo de Azure Storage es solo para la transferencia de datos. No admite la inserción de predicado. No se admiten espacios de nombres jerárquicos al acceder a los datos mediante la interfaz de wasb://.

En este ejemplo se muestra cómo crear la credencial de ámbito de base de datos para la autenticación en una cuenta de Azure Storage (V2). Especifique la clave de la cuenta de Azure Storage en el secreto de la credencial de base de datos. Puede especificar cualquier cadena en la identidad de la credencial con ámbito de base de datos, ya que no se usará para la autenticación en 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 = '<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
  ( LOCATION = 'wasbs://daily@logs.blob.core.windows.net/' ,
    CREDENTIAL = AzureStorageCredential ,
    TYPE = HADOOP
  ) ;

F. Creación de un origen de datos externo para hacer referencia a una instancia con nombre de SQL Server mediante la conectividad de PolyBase

Se aplica a: SQL Server 2019 (15.x) y versiones posteriores

Para crear un origen de datos externo que haga referencia a una instancia con nombre de SQL Server, use CONNECTION_OPTIONS para especificar el nombre de la instancia.

En el ejemplo siguiente, WINSQL2019 es el nombre de host y SQL2019 el de la instancia. 'Server=%s\SQL2019' es el par de clave-valor.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
  LOCATION = 'sqlserver://WINSQL2019' ,
  CONNECTION_OPTIONS = 'Server=%s\SQL2019' ,
  CREDENTIAL = SQLServerCredentials
) ;

Como alternativa, puede usar un puerto para conectarse a una instancia de SQL Server.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
  LOCATION = 'sqlserver://WINSQL2019:58137' ,
  CREDENTIAL = SQLServerCredentials
) ;

Ejemplos: Operaciones masivas

Importante

No coloque un / final, nombre de archivo o parámetros de firma de acceso compartido al final de la dirección URL de LOCATION al configurar un origen de datos externo para las operaciones masivas.

G. Creación de un origen de datos externo para operaciones masivas de recuperación de datos desde Azure Storage

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores.

Use el origen de datos siguiente para las operaciones masivas con BULK INSERT o OPENROWSET. La credencial debe establecer SHARED ACCESS SIGNATURE como identidad, no debe tener al inicio ? en el token de SAS, debe tener al menos permiso de lectura en el archivo que se debe cargar (por ejemplo srt=o&sp=r), y el período de expiración debe ser válido (todas las fechas se expresan en hora UTC). Para más información sobre las firmas de acceso compartido, vea Uso de Firmas de acceso compartido (SAS).

CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH
  IDENTITY = 'SHARED ACCESS SIGNATURE',
  -- Remove ? from the beginning of the SAS token
  SECRET = '<azure_storage_account_key>' ;

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

Para ver este ejemplo en uso, vea el ejemplo BULK INSERT.

H. Creación de un origen de datos externo para acceder a los datos de Azure Storage mediante la interfaz abfs://

Se aplica a: SQL Server 2019 (15.x) CU11 y versiones posteriores

En este ejemplo, el origen de datos externo es una cuenta de Azure Data Lake Storage Gen2 logs, con el controlador Azure Blob Filesystem (ABFS). El contenedor de almacenamiento se denomina daily. El origen de datos externo de Azure Data Lake Storage Gen2 es solo para la transferencia de datos, ya que no se admite la delegación de predicados.

En este ejemplo se muestra cómo crear la credencial de ámbito de base de datos para la autenticación en una cuenta de Azure Data Lake Storage Gen2. Especifique la clave de la cuenta de Azure Storage en el secreto de la credencial de base de datos. Puede especificar cualquier cadena en la identidad de la credencial con ámbito de base de datos, ya que no se usará para la autenticación en 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 = '<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
  ( LOCATION = 'abfss://daily@logs.dfs.core.windows.net/' ,
    CREDENTIAL = AzureStorageCredential ,
    TYPE = HADOOP
  ) ;

Vea también

* SQL Database *  

 

Introducción: Azure SQL Database

Se aplica a: SíAzure SQL Database

Crea un origen de datos externo para consultas elásticas. Los orígenes de datos externos se usan para establecer la conectividad y admiten estos casos de uso principales:

  • Operaciones de carga masiva con BULK INSERT o OPENROWSET
  • Consultar instancias remotas de SQL Database o Azure Synapse utilizando SQL Database con consulta elástica
  • Consultar una instancia de SQL Database con particiones mediante la consulta elástica

Sintaxis

Para obtener más información sobre las convenciones de sintaxis, vea Convenciones de sintaxis de Transact-SQL.

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

Argumentos

data_source_name

Especifica el nombre definido por el usuario para el origen de datos. El nombre debe ser único en la base de datos en SQL Database.

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

Proporciona el protocolo de conectividad y la ruta de acceso al origen de datos externo.

Origen de datos externo Prefijo de ubicación Ruta de acceso de ubicación Disponibilidad
Operaciones masivas https <storage_account>.blob.core.windows.net/<container>
Consulta elástica (partición) No se requiere <shard_map_server_name>.database.windows.net
Consulta elástica (remota) No se requiere <remote_server_name>.database.windows.net
EdgeHub edgehub "edgehub://" Solo está disponible en Azure SQL Edge. EdgeHub siempre es local para la instancia de Azure SQL Edge. Como tal, no es necesario especificar una ruta de acceso o un valor de puerto.
Kafka kafka kafka://<kafka_bootstrap_server_name_ip>:<port_number> Solo está disponible en Azure SQL Edge.

Ruta de acceso de ubicación:

  • <shard_map_server_name> = el nombre del servidor lógico de Azure que hospeda el administrador del mapa de particiones. El argumento DATABASE_NAME proporciona la base de datos que se utiliza para hospedar el mapa de particiones y SHARD_MAP_NAME se utiliza para el propio mapa de particiones.
  • <remote_server_name> = el nombre de servidor lógico de destino para la consulta elástica. El nombre de la base de datos se especifica utilizando el argumento DATABASE_NAME.

Instrucciones y notas adicionales cuando se establece la ubicación:

  • Motor de base de datos no comprueba la existencia del origen de datos externo cuando se crea el objeto. Para la validación, crea una tabla externa utilizando el origen de datos externo.

CREDENTIAL = credential_name

Especifica una credencial de ámbito de base de datos para la autenticación en el origen de datos externo.

Instrucciones y notas adicionales cuando se crea una credencial:

  • Para cargar datos de Azure Storage en Azure SQL Database, use una firma de acceso compartido (token de SAS).
  • CREDENTIAL solo se necesita si se han protegido los datos. CREDENTIAL no es necesario para los conjuntos de datos que permiten el acceso anónimo.
  • Cuando TYPE = BLOB_STORAGE, la credencial debe crearse mediante el uso de SHARED ACCESS SIGNATURE como identidad. Además, el token de SAS debe configurarse del modo siguiente:
    • Excluir el ? inicial cuando se configura como secreto
    • Disponer de al menos permiso de lectura en el archivo que se debe cargar (por ejemplo srt=o&sp=r)
    • Usar un período de caducidad válido (todas las fechas se encuentran en hora UTC).

Para obtener un ejemplo del uso de CREDENTIAL con SHARED ACCESS SIGNATURE y TYPE = BLOB_STORAGE, vea Creación de un origen de datos externo para ejecutar operaciones masivas y recuperar datos desde Azure Storage en SQL Database.

Para crear una credencial con ámbito de base de datos, vea CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

TYPE = [ BLOB_STORAGE | RDBMS | SHARD_MAP_MANAGER]

Especifica el tipo de origen de datos externo que se está configurando. Este parámetro no siempre es necesario.

  • Use RDBMS para consultas entre bases de datos mediante una consulta elástica de SQL Database.
  • Use SHARD_MAP_MANAGER al crear un origen de datos externo al conectarse a una base de datos SQL Database particionada.
  • Use BLOB_STORAGE al ejecutar operaciones masivas con BULK INSERT u OPENROWSET.

Importante

No establezca TYPE si usa cualquier otro origen de datos externo.

DATABASE_NAME = database_name

Configure este argumento cuando TYPE se haya establecido en RDBMS o SHARD_MAP_MANAGER.

TYPE Valor de DATABASE_NAME
RDBMS El nombre de la base de datos remota en el servidor que se proporciona mediante LOCATION
SHARD_MAP_MANAGER Nombre de la base de datos que funciona como administrador del mapa de particiones

Para obtener un ejemplo en el que se muestra cómo crear un origen de datos externo donde TYPE = RDBMS, consulte Creación de un origen de datos externo de RDBMS.

SHARD_MAP_NAME = shard_map_name

Se usa cuando el TYPE argumento está establecido en SHARD_MAP_MANAGER únicamente para establecer el nombre del mapa de particiones.

Para ver un ejemplo en el que se muestra cómo crear un origen de datos externo donde TYPE = SHARD_MAP_MANAGER, consulte Creación de un origen de datos externo de administrador de mapas de partición.

Permisos

Se necesita el permiso CONTROL para la base de datos de Azure SQL Database.

Bloqueo

Toma un bloqueo compartido en el objeto EXTERNAL DATA SOURCE.

Ejemplos:

A. Creación de un origen de datos externo de administrador de mapa de particiones

Si quiere crear un origen de datos externo para hacer referencia a SHARD_MAP_MANAGER, especifique el nombre del servidor de SQL Database que hospeda el administrador de mapa de particiones en SQL Database o una base de datos de SQL Server en una máquina virtual.

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

Para obtener un tutorial paso a paso, vea Getting started with elastic queries for sharding (horizontal partitioning) [Introducción a las consultas elásticas para particionamiento (creación de particiones horizontales)].

B. Creación de un origen de datos externo de RDBMS

Para crear un origen de datos externo para hacer referencia a RDBMS, especifique el nombre del servidor de SQL Database de la base de datos remota en 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
  ) ;

Para obtener un tutorial paso a paso sobre RDBMS, vea Introducción a las consultas entre bases de datos (particiones verticales).

Ejemplos: Operaciones masivas

Importante

No coloque un / final, nombre de archivo o parámetros de firma de acceso compartido al final de la dirección URL de LOCATION al configurar un origen de datos externo para las operaciones masivas.

C. Creación de un origen de datos externo para operaciones masivas de recuperación de datos desde Azure Storage

Use el origen de datos siguiente para las operaciones masivas con BULK INSERT o OPENROWSET. La credencial debe establecer SHARED ACCESS SIGNATURE como identidad, no debe tener al inicio ? en el token de SAS, debe tener al menos permiso de lectura en el archivo que se debe cargar (por ejemplo srt=o&sp=r), y el período de expiración debe ser válido (todas las fechas se expresan en hora UTC). Para más información sobre las firmas de acceso compartido, vea Uso de Firmas de acceso compartido (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
  ) ;

Para ver este ejemplo en uso, vea BULK INSERT.

Ejemplos: Azure SQL Edge

Importante

Para obtener información sobre cómo configurar datos externos para Azure SQL Edge, vea Streaming de datos en Azure SQL Edge.

A. Creación de un origen de datos externo para hacer referencia a Kafka

Se aplica a: Azure SQL Edge solo

En este ejemplo, el origen de datos externo es un servidor Kafka que tiene la dirección IP xxx.xxx.xxx.xxx y que escucha en el puerto 1900. El origen de datos externo Kafka es solo para el streaming de datos y no admite la delegación de predicados.

-- Create an External Data Source for Kafka
CREATE EXTERNAL DATA SOURCE MyKafkaServer WITH (
    LOCATION = 'kafka://xxx.xxx.xxx.xxx:1900'
)
GO

B. Creación de un origen de datos externo para hacer referencia a EdgeHub

Se aplica a: Azure SQL Edge solo

En este ejemplo, el origen de datos externo es EdgeHub, que se ejecuta en el mismo dispositivo perimetral que Azure SQL Edge. El origen de datos externo edgeHub es solo para el streaming de datos y no admite la inserción de predicados.

-- Create an External Data Source for Kafka
CREATE EXTERNAL DATA SOURCE MyEdgeHub WITH (
    LOCATION = 'edgehub://'
)
go

Consulta también

* Azure Synapse
Analytics *
 

 

Introducción: Azure Synapse Analytics

Se aplica a: síAzure Synapse Analytics

Crea un origen de datos externo para PolyBase. Los orígenes de datos externos se usan para establecer la conectividad y admiten el siguiente caso de uso principal: Virtualización y carga de datos mediante PolyBase

Importante

Para crear un origen de datos de externo y consultar un recurso de Azure Synapse Analytics mediante Azure SQL Database con la consulta elástica, vea SQL Database.

Sintaxis

Para obtener más información sobre las convenciones de sintaxis, vea Convenciones de sintaxis de Transact-SQL.

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

Argumentos

data_source_name

Especifica el nombre definido por el usuario para el origen de datos. El nombre debe ser único dentro de Azure SQL Database en Azure Synapse Analytics.

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

Proporciona el protocolo de conectividad y la ruta de acceso al origen de datos externo.

Origen de datos externo Prefijo de ubicación Ruta de acceso de ubicación
Azure Data Lake Store Gen1 adl <storage_account>.azuredatalake.net
Azure Data Lake Store Gen2 abfs[s] <container>@<storage_account>.dfs.core.windows.net
Cuenta de Azure Storage (V2) wasb[s] <container>@<storage_account>.blob.core.windows.net

Ruta de acceso de ubicación:

  • <container> = el contenedor de la cuenta de almacenamiento que contiene los datos. Los contenedores raíz son de solo lectura, no se pueden volver a escribir datos en el contenedor.
  • <storage_account> = el nombre de la cuenta de almacenamiento del recurso de Azure.

Instrucciones y notas adicionales cuando se establece la ubicación:

  • La opción predeterminada consiste en usar enable secure SSL connections al aprovisionar Azure Data Lake Storage Gen2. Si está habilitada, debe usar abfss al seleccionar una conexión TLS/SSL segura. Tenga en cuenta que abfss funciona también con conexiones TLS no seguras. Para obtener más información, vea Controlador Azure Blob File System (ABFS).
  • Azure Synapse no comprueba la existencia del origen de datos externo cuando se crea el objeto. . Para la validación, crea una tabla externa utilizando el origen de datos externo.
  • Para garantizar una semántica de consulta coherente, use el mismo origen de datos externo para todas las tablas cuando realice consultas a Hadoop.
  • wasbs se recomienda, ya que se enviarán los datos mediante una conexión TLS segura.
  • Los espacios de nombres jerárquicos no se admiten con las cuentas de Azure Storage (V2) al acceder a los datos a través de PolyBase con la interfaz wasb://.

CREDENTIAL = credential_name

Especifica una credencial de ámbito de base de datos para la autenticación en el origen de datos externo.

Instrucciones y notas adicionales cuando se crea una credencial:

  • Para cargar datos desde Azure Storage o Azure Data Lake Store (ADLS) Gen2 en Azure Synapse Analytics, use una clave de Azure Storage.
  • CREDENTIAL solo se necesita si se han protegido los datos. CREDENTIAL no es necesario para los conjuntos de datos que permiten el acceso anónimo.

Para crear una credencial con ámbito de base de datos, vea CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

TYPE = HADOOP

Especifica el tipo de origen de datos externo que se está configurando. Este parámetro no siempre es necesario.

Use HADOOP cuando el origen de datos externo sea Azure Storage, ADLS Gen1 o ADLS Gen2.

A fin de obtener un ejemplo de cómo usar TYPE = HADOOP para cargar datos desde Azure Storage, vea Creación de un origen de datos externo para hacer referencia a Azure Data Lake Store Gen1 o 2 mediante una entidad de servicio.

Permisos

Debe tener el permiso CONTROL para la base de datos.

Bloqueo

Toma un bloqueo compartido en el objeto EXTERNAL DATA SOURCE.

Seguridad

PolyBase es compatible con la autenticación basada en proxy para la mayoría de orígenes de datos externos. Cree una credencial con ámbito de base de datos para crear la cuenta de proxy.

Cuando se conecta al almacenamiento o el grupo de datos en un clúster de macrodatos de SQL Server, las credenciales del usuario se pasan a través del sistema back-end. Cree inicios de sesión en el propio grupo de datos para habilitar la autenticación de paso a través.

No se admite un token de SAS con el tipo HADOOP. Solo se admite con el tipo = BLOB_STORAGE cuando se usa en su lugar una clave de acceso de la cuenta de almacenamiento. Si se intenta crear un origen de datos externo con el tipo HADOOP y una credencial SAS, aparece un error como el siguiente:

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

Ejemplos:

A. Creación de un origen de datos externo para acceder a los datos de Azure Storage mediante la interfaz wasb://

En este ejemplo, el origen de datos externo es una cuenta de Azure Storage (V2) denominada logs. El contenedor de almacenamiento se denomina daily. El origen de datos externo de Azure Storage es solo para la transferencia de datos. No admite la inserción de predicado. No se admiten espacios de nombres jerárquicos al acceder a los datos mediante la interfaz de wasb://.

En este ejemplo se muestra cómo crear la credencial de ámbito de base de datos para la autenticación en Azure Storage. Especifique la clave de la cuenta de Azure Storage en el secreto de la credencial de base de datos. Puede especificar cualquier cadena en la identidad de la credencial con ámbito de base de datos, ya que no se usará para la autenticación en 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 = '<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
  ( LOCATION = 'wasbs://daily@logs.blob.core.windows.net/' ,
    CREDENTIAL = AzureStorageCredential ,
    TYPE = HADOOP
  ) ;

B. Creación de un origen de datos externo para hacer referencia a Azure Data Lake Store Gen 1 o 2 mediante una entidad de servicio

La conectividad de Azure Data Lake Store puede basarse en el URI de ADLS y en la entidad de servicio de la aplicación de Azure Active Directory. La documentación para crear esta aplicación se puede encontrar en Autenticación entre servicios: Data Lake Store con Azure Active Directory.

-- 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
  -- Please note the abfss endpoint when your account has secure transfer enabled
  ( LOCATION = 'abfss://data@newyorktaxidataset.dfs.core.windows.net' , 
    CREDENTIAL = ADLS_credential ,
    TYPE = HADOOP
  ) ;

C. Creación de un origen de datos externo para hacer referencia a Azure Data Lake Store Gen 2 con la clave de cuenta de almacenamiento

-- 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. Creación de un origen de datos externo a fin de hacer referencia a la conectividad de PolyBase para Azure Data Lake Store Gen2 mediante abfs://

No es necesario especificar SECRET al conectarse a la cuenta de Azure Data Lake Store Gen2 con el mecanismo de identidad administrada.

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

Vea también

* Analytics
Platform System (PDW) *
 

 

Introducción: Sistema de la plataforma de análisis

Se aplica a: síAlmacenamiento de datos paralelos Sistema de la plataforma de análisis

Crea un origen de datos externo para consultas de PolyBase. Los orígenes de datos externos se usan para establecer la conectividad y admiten el siguiente caso de uso: Virtualización y carga de datos mediante PolyBase.

Sintaxis

Para obtener más información sobre las convenciones de sintaxis, vea Convenciones de sintaxis de Transact-SQL.

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

Argumentos

data_source_name

Especifica el nombre definido por el usuario para el origen de datos. El nombre debe ser único dentro del servidor en Sistema de la plataforma de análisis (PDW).

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

Proporciona el protocolo de conectividad y la ruta de acceso al origen de datos externo.

Origen de datos externo Prefijo de ubicación Ruta de acceso de ubicación
Cloudera CDH o Hortonworks HDP hdfs <Namenode>[:port]
Cuenta de Azure Storage wasb[s] <container>@<storage_account>.blob.core.windows.net

Ruta de acceso de ubicación:

  • <Namenode>: nombre de equipo, nombre de URI de servicio o dirección IP de Namenode en el clúster de Hadoop. PolyBase debe resolver los nombres DNS utilizados por el clúster de Hadoop.
  • port = el puerto en el cual escucha el origen de datos externo. En Hadoop, el puerto se puede encontrar mediante el parámetro de configuración fs.defaultFS. El valor predeterminado es 8020.
  • <container> = el contenedor de la cuenta de almacenamiento que contiene los datos. Los contenedores raíz son de solo lectura, no se pueden volver a escribir datos en el contenedor.
  • <storage_account> = el nombre de la cuenta de almacenamiento del recurso de Azure.

Instrucciones y notas adicionales cuando se establece la ubicación:

  • El motor de PDW no comprueba la existencia del origen de datos externo cuando se crea el objeto. Para la validación, crea una tabla externa utilizando el origen de datos externo.
  • Para garantizar una semántica de consulta coherente, use el mismo origen de datos externo para todas las tablas cuando realice consultas a Hadoop.
  • wasbs se recomienda, ya que se enviarán los datos mediante una conexión TLS segura.
  • Los espacios de nombres jerárquicos no se admiten cuando se usan con cuentas de Azure Storage a través de wasb://.
  • Para garantizar que las consultas de PolyBase son correctas durante una conmutación por error del Namenode de Hadoop, considere la posibilidad de usar una dirección IP virtual para el Namenode del clúster de Hadoop. Si no, ejecute un comando ALTER EXTERNAL DATA SOURCE para que apunte a la nueva ubicación.

CREDENTIAL = credential_name

Especifica una credencial de ámbito de base de datos para la autenticación en el origen de datos externo.

Instrucciones y notas adicionales cuando se crea una credencial:

  • Para cargar datos de Azure Storage a Azure Synapse o PDW, use una clave de Azure Storage.
  • CREDENTIAL solo se necesita si se han protegido los datos. CREDENTIAL no es necesario para los conjuntos de datos que permiten el acceso anónimo.

TYPE = [ HADOOP ]

Especifica el tipo de origen de datos externo que se está configurando. Este parámetro no siempre es necesario.

  • Use HADOOP cuando el origen de datos externo sea Cloudera CDH, Hortonworks HDP o Azure Storage.

A fin de obtener un ejemplo de cómo usar TYPE = HADOOP para cargar datos desde Azure Storage, vea Creación de un origen de datos externo para hacer referencia a Hadoop.

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:port]'

Configure este valor opcional solo al conectarse a Cloudera CDH, Hortonworks HDP o una cuenta de Azure Storage.

Cuando RESOURCE_MANAGER_LOCATION está definido, el optimizador de consultas toma una decisión basada en el coste para mejorar el rendimiento. Se puede usar un trabajo de MapReduce para insertar el cálculo en Hadoop. La especificación de RESOURCE_MANAGER_LOCATION puede reducir significativamente el volumen de datos transferidos entre Hadoop y SQL, lo cual puede suponer una mejora en el rendimiento de las consultas.

Si no se especifica el administrador de recursos, se deshabilita la inserción de cálculo en Hadoop para las consultas de PolyBase.

Si no se especifica el puerto, el valor predeterminado se elige mediante el valor actual de la configuración "hadoop connectivity".

Conectividad de Hadoop Puerto predeterminado del administrador de recursos
1 50300
2 50300
3 8021
4 8032
5 8050
6 8032
7 8050

Para obtener una lista completa de las versiones de Hadoop compatibles, vea Configuración de conectividad de PolyBase (Transact-SQL).

Importante

El valor RESOURCE_MANAGER_LOCATION no se valida cuando se crea el origen de datos externo. Escribir un valor incorrecto puede provocar un error de consulta en tiempo de ejecución cada vez que se intente la inserción, ya que el valor proporcionado no podrá realizar la resolución.

En Creación de un origen de datos externo para hacer referencia a Hadoop con la inserción habilitada se proporciona un ejemplo concreto y más instrucciones.

Permisos

Se necesita el permiso CONTROL para la base de datos de Sistema de la plataforma de análisis (PDW).

Nota

En versiones anteriores de PDW, para crear el origen de datos externo se necesitaban permisos ALTER ANY EXTERNAL DATA SOURCE.

Bloqueo

Toma un bloqueo compartido en el objeto EXTERNAL DATA SOURCE.

Seguridad

PolyBase es compatible con la autenticación basada en proxy para la mayoría de orígenes de datos externos. Cree una credencial con ámbito de base de datos para crear la cuenta de proxy.

No se admite un token de SAS con el tipo HADOOP. Solo se admite con el tipo = BLOB_STORAGE cuando se usa en su lugar una clave de acceso de la cuenta de almacenamiento. Si se intenta crear un origen de datos externo con el tipo HADOOP y una credencial SAS, aparece un error como el siguiente:

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

Ejemplos:

A. Creación de un origen de datos externo para hacer referencia a Hadoop

Si quiere crear un origen de datos externo para hacer referencia a Hortonworks HDP o Cloudera CDH, especifique el nombre de equipo o la dirección IP de Namenode y puerto de Hadoop.

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

B. Creación de un origen de datos externo para hacer referencia a Hadoop con la inserción habilitada

Especifique la opción RESOURCE_MANAGER_LOCATION para habilitar la inserción de cálculo en Hadoop para las consultas de PolyBase. Una vez habilitado, PolyBase toma una decisión basada en el coste para determinar si se debe aplicar el cálculo de la consulta en 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. Creación de un origen de datos externo para hacer referencia a Hadoop con protección de Kerberos

Para comprobar si el clúster de Hadoop está protegido con Kerberos, compruebe el valor de la propiedad hadoop.security.authentication en core-site.xml de Hadoop. Para hacer referencia a un clúster de Hadoop protegido con Kerberos, debe especificar una credencial con ámbito de base de datos que contenga el nombre de usuario y la contraseña de Kerberos. La clave maestra de base de datos se usa para cifrar el secreto de la credencial de ámbito de base de datos.

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

D. Creación de un origen de datos externo para acceder a los datos de Azure Storage mediante la interfaz wasb://

En este ejemplo, el origen de datos externo es una cuenta de Azure Storage (V2) denominada logs. El contenedor de almacenamiento se denomina daily. El origen de datos externo de Azure Storage es solo para la transferencia de datos. No admite la inserción de predicado. No se admiten espacios de nombres jerárquicos al acceder a los datos mediante la interfaz de wasb://.

En este ejemplo se muestra cómo crear la credencial de ámbito de base de datos para la autenticación en Azure Storage. Especifique la clave de la cuenta de Azure Storage en el secreto de la credencial de base de datos. Puede especificar cualquier cadena en la identidad de la credencial con ámbito de base de datos, ya que no se usará para la autenticación en 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 = '<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
  ( LOCATION = 'wasbs://daily@logs.blob.core.windows.net/'
    CREDENTIAL = AzureStorageCredential
    TYPE = HADOOP
  ) ;

Vea también

Nota

Alguna funcionalidad de la característica de PolyBase está en versión preliminar privada para las instancias administradas de Azure SQL, como la capacidad de consultar datos externos (archivos Parquet) en Azure Data Lake Storage (ADLS) Gen2. La versión preliminar privada incluye acceso a bibliotecas cliente y documentación para realizar pruebas que todavía no están disponibles públicamente. Si está interesado y dispuesto a invertir tiempo en probar las funcionalidades y compartir sus comentarios y preguntas, consulte la guía de la versión preliminar privada de PolyBase de Azure SQL Managed Instance.