Introducción
Este artículo le enseñará cómo instalar PolyBase y le mostrará un ejemplo simple para empezar.
PolyBase es una nueva característica en SQL Server 2016. Es usado para consultar bases de datos relacionales y no relacionales (NoSQL). Usted puede usar PolyBase para consultar tablas y archivos en Hdoop o en Azure Blob Storage. Usted también puede importar o exportar datos a/desde Hadoop.
En este ejemplo, mostraremos cómo consultar un archivo CSV almacenado en Azure Blob Storage desde SQL Server 2016 usando PolyBase.
Requerimientos
- Una subscripción a Azure Portal.
- SQL Server instalado.
- MASE instalado.
- SQL Server Management Studio (SSMS) instalado.
Iniciando
Primero mostraremos cómo instalar PolyBase y luego mostraremos un ejemplo en Azure para consultar un archive CSV desde SSMS 2016.
Instalación
PolyBase está incluido en el instalador de SQL Server 2016. Es una nueva característica. Cuando lo instale o cuando desee añadir esta característica, usted necesita seleccionar New SQL Server stand-alone installation or add feature to an existing installation:
Ejecute el instalador hasta Feature Selection y asegúrese de que PolyBase Query Service for External Data está seleccionado:
Si no estaba instalado antes, la configuración le pedirá Oracle Java Runtime Environment 7. JR7 o superior es requerido porque PolyBase usa Java para conectarse a Hadoop:
Usted puede descargar JRE en la página de Oracle JRE:
Server JRE (Java SE Runtime Environment) 8 Downloads
Descargue la versión Windows para su máquina con SQL Server:
Finalmente, para habilitar PolyBase, use la siguiente sentencia de configuración:
1 2 3 4 5 6 7 8 9 |
USE master; GO EXEC sp_configure 'show advanced option', '1'; RECONFIGURE; GO EXEC sp_configure 'hadoop connectivity', 4; GO RECONFIGURE; GO |
‘Show advanced option’ en 1 es usado para habilitar la opción avanzada, y la conectividad hadoop igual a 4 es usada para conectarse a Hadoop en Windows Servers.
Consultando un archivo csv en Azure
En este ejemplo, vamos a consultar un archivo csv que será subido a Azure. Consultaremos el archivo csv en nuestro SQL Server local usando PolyBase.
Creamos un archivo llamado customers.csv con el siguiente contenido:
Name,Lastname,email
john,Rambo,jrambo@hotmail.com
john,connor,jconnor@hotmail.com
elvis,presley,epresley@hotmail.com
elmer,hermosa,ehermosa@gmail.com
Es sólo un archivo con el nombre, el apellido y el correo electrónico de los clientes.
Si usted no tiene una cuenta Storage en Azure, vaya al Portal de Azure y añada una nueva cuenta de almacenamiento. En este ejemplo, el nombre de la cuenta de almacenamiento es polybasestoragesqlshack:
Si usted necesita más información acerca de crear cuentas de almacenamiento en Azure, por favor lea nuestro artículo acerca de cuentas Storage.
Conéctese a su Subscripción Azure en MASE y haga clic derecho en Azure Account para crear un contenedor llamado mycontainer o cualquier nombre de su preferencia:
Si usted necesita más explicaciones acerca de Blob, contenedores y subir archivos en Azure en MASE, por favor lea nuestro artículo acerca de subir archivos al almacenamiento Blob.
En el contenedor creado, suba el archivo customers.csv:
Una vez que tenga el archivo en Azure, en su máquina local, abra SSMS y cree una nueva sentencia T-SQL en una base de datos:
1 |
CREATE MASTER KEY ENCRYPTION BY PASSWORD='MyP@ssword123secretword'; |
Una clave maestra es una clave simétrica usada para proteger claves privadas.
El siguiente paso es crear una credencial. En este ejemplo, la credencial de base de datos es llamada mycredential, pero usted puede usar cualquier nombre. La identidad es credencial y puede ser también puede ser cualquier nombre. Secret es la llave para acceder a la Cuenta de Azure Storage:
1 2 |
CREATE DATABASE SCOPED CREDENTIAL mycredential WITH IDENTITY = 'credential', Secret = 'VgqTsEqg1beXqhb+mO/wZh9OUZ+ByhKJJj7qc9pBne9e+BsdFo4Mfdl+u8Gh94tDqCR0/uNZ4KHr0r4WuK85lA==' |
Usted puede obtener la clave Secret que puede ser laclave primaria o secundaria en la Cuenta Azure. Usted puede copiar estas claves desde MASE:
Luego crearemos los datos externos. Esto se conectará a nuestra Cuenta Azure:
1 2 3 4 5 6 |
CREATE EXTERNAL DATA SOURCE mycustomers WITH ( TYPE = HADOOP, LOCATION = 'wasbs://mycontainer@polybasestoragesqlshack.blob.core.windows.net/', CREDENTIAL = mycredential ); |
Mycustomers es el nombre de la fuente de datos y puede ser cualquier nombre.
El tipo de los datos externos es Hadoop. Location es la localización del archivo almacenado. Mycontainer es el nombre del contenedor creado en la Figura 5 y polybasesstoragesqlshack es el nombre de la Cuenta de Azure Storage creada en el paso 4. Blob.core.windows.net es parte de la dirección del contenedor que puede ser recuperado en MASE:
Un error típico cuando usted intenta crear datos externos es el siguiente:
OLE DB provider “SQLNCLI11” for linked server “(null)” returned message “Login timeout expired”.
OLE DB provider “SQLNCLI11” for linked server “(null)” returned message “A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.”.
Msg 10061, Level 16, State 1, Line 9
TCP Provider: No connection could be made because the target machine actively refused it.
Este error ocurre porque el Servicio del Motor de SQL Server PolyBase está deshabilitado. Asegúrese de que los Servicios de PolyBase están corriendo en SQL Server Configuration Manager o cualquier herramienta de su preferencia para manejar Servicios de Windows:
En SSMS, usted podrá ver la fuente de datos externos en Database >External Resources>External Data Sources:
Tenemos acceso a los datos externos. En este caso, el archivo customer.csv. Necesitamos especificar el formato del archivo. Crearemos un formato para el archivo externo:
1 2 3 4 5 6 7 |
CREATE EXTERNAL FILE FORMAT csvformat WITH ( FORMAT_TYPE = DELIMITEDTEXT, FORMAT_OPTIONS ( FIELD_TERMINATOR = ',' ) ); |
Es un archivo CSV, por lo que el delimitador es una coma. Si el formato del archivo externo está bien, usted lo verá SSMS, en Database>External Resources>External File Formats:
Crearemos una tabla externa para consultar el archivo csv como una tabla SQL:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
CREATE EXTERNAL TABLE customerstable ( name VARCHAR(128), lastname VARCHAR(128), email VARCHAR(100) ) WITH ( LOCATION = '/', DATA_SOURCE = mycustomers, FILE_FORMAT = csvformat ) |
Usamos la sentencia para crear una tabla externa especificando un nombre de nuestra preferencia. Definimos los clientes del archivo y el tipo de datos como cualquier tabla en SQL Server.
LOCATION es la localización del archivo csv. Si el archivo customar.csv estuviera dentro de una carpeta llamada country y luego dentro una carpeta llamada city, la localización sería LOCATION=/country/city. En este ejemplo, el archivo está en la raíz porque no está dentro de ninguna carpeta en el contenedor.
DATA_SOURCE es la fuente de datos creada en la figura 10, y FILE_FORMAT es el formato creado en la figura 11.
Si todo está bien, usted podrá ver la tabla externa creada en SSMS en Database>Tables>External tables:
Ahora usted puede consultar el archivo csv como cualquier tabla usando T-SQL:
1 2 3 4 |
SELECT [name] ,[lastname] ,[email] FROM [AdventureWorks2016CTP3].[dbo].[customerstable] |
Usted podrá ver sus datos como si fuera una Tabla SQL Server:
Conclusión
En este artículo explicamos cómo instalar PolyBase y cómo consultar un archivo CSV almacenado en una cuenta Azure Storage.
Referencias
Para más información refiérase a estos enlaces:
- Configuración de Conectividad PolyBase (Transact-SQL)(Transact-SQL)
- Guía de PolyBase
- Iníciese con PolyBase
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)(Transact-SQL)
- Cómo construir un cubo desde cero usando SQL Server Analysis Services (SSAS) - December 16, 2019
- Fecha de conversión de SQL - December 11, 2019
- Funciones frente a los procedimientos almacenados en SQL Server - October 14, 2019