Tutorial: Carga de datos de taxis de Nueva York en Azure SQL Data WarehouseTutorial: Load New York Taxicab data to Azure SQL Data Warehouse

En este tutorial se utiliza PolyBase para cargar datos de los taxis de Nueva York de un blob de Azure global en Azure SQL Data Warehouse.This tutorial uses PolyBase to load New York Taxicab data from a global Azure blob to Azure SQL Data Warehouse. El tutorial utiliza Azure Portal y SQL Server Management Studio (SSMS) para:The tutorial uses the Azure portal and SQL Server Management Studio (SSMS) to:

  • Crear un almacenamiento de datos en Azure PortalCreate a data warehouse in the Azure portal
  • Establecer una regla de firewall de nivel de servidor en Azure PortalSet up a server-level firewall rule in the Azure portal
  • Conectarse al almacenamiento de datos con SSMSConnect to the data warehouse with SSMS
  • Crear un usuario designado para cargar datosCreate a user designated for loading data
  • Crear tablas externas para los datos en Azure Blob StorageCreate external tables for data in Azure blob storage
  • Utilizar la instrucción CTAS de T-SQL para cargar datos en el almacenamiento de datosUse the CTAS T-SQL statement to load data into your data warehouse
  • Ver el progreso de los datos a medida que se carganView the progress of data as it is loading
  • Crear estadísticas de los datos recién cargadosCreate statistics on the newly loaded data

Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.If you don't have an Azure subscription, create a free account before you begin.

Antes de empezarBefore you begin

Antes de completar este tutorial, descargue e instale la versión más reciente de SQL Server Management Studio (SSMS).Before you begin this tutorial, download and install the newest version of SQL Server Management Studio (SSMS).

Iniciar sesión en Azure PortalLog in to the Azure portal

Inicie sesión en Azure Portal.Log in to the Azure portal.

Creación de una instancia de SQL Data Warehouse en blancoCreate a blank SQL Data Warehouse

Se crea una instancia de Azure SQL Data Warehouse con un conjunto definido de [recursos de proceso]memory-concurrency-limits.md).An Azure SQL Data Warehouse is created with a defined set of [compute resources]memory-concurrency-limits.md). La base de datos se crea dentro de un grupo de recursos de Azure y en un servidor lógico de Azure SQL.The database is created within an Azure resource group and in an Azure SQL logical server.

Siga estos pasos para crear una instancia de SQL Data Warehouse en blanco.Follow these steps to create a blank SQL Data Warehouse.

  1. Haga clic en Crear un recurso en la esquina superior izquierda de Azure Portal.Click Create a resource in the upper left-hand corner of the Azure portal.

  2. Seleccione Bases de datos en la página Nuevo y seleccione SQL Data Warehouse en Destacados en la página Nuevo.Select Databases from the New page, and select SQL Data Warehouse under Featured on the New page.

    creación del almacenamiento de datos

  3. Rellene el formulario SQL Data Warehouse con la siguiente información:Fill out the SQL Data Warehouse form with the following information:

    ConfiguraciónSetting Valor sugeridoSuggested value DescripciónDescription
    Nombre de la base de datosDatabase name mySampleDataWarehousemySampleDataWarehouse Para conocer los nombres de base de datos válidos, consulte Database Identifiers (Identificadores de base de datos).For valid database names, see Database Identifiers.
    SuscripciónSubscription Su suscripciónYour subscription Para más información acerca de sus suscripciones, consulte Suscripciones.For details about your subscriptions, see Subscriptions.
    Grupos de recursosResource group myResourceGroupmyResourceGroup Para conocer cuáles son los nombres de grupo de recursos válidos, consulte el artículo Convenciones de nomenclatura.For valid resource group names, see Naming rules and restrictions.
    Seleccionar origenSelect source Base de datos en blancoBlank database Se especifica para crear una base de datos en blanco.Specifies to create a blank database. Tenga en cuenta que un almacenamiento de datos es un tipo de base de datos.Note, a data warehouse is one type of database.

    creación del almacenamiento de datos

  4. Haga clic en Servidor para crear y configurar un servidor nuevo para la nueva base de datos.Click Server to create and configure a new server for your new database. Rellene el formulario de servidor nuevo con la siguiente información:Fill out the New server form with the following information:

    ConfiguraciónSetting Valor sugeridoSuggested value DescripciónDescription
    Nombre del servidorServer name Cualquier nombre globalmente únicoAny globally unique name Para conocer cuáles son los nombres de servidor válidos, consulte el artículo Naming conventions (Convenciones de nomenclatura).For valid server names, see Naming rules and restrictions.
    Inicio de sesión del administrador del servidorServer admin login Cualquier nombre válidoAny valid name Para conocer los nombres de inicio de sesión válidos, consulte Database Identifiers (Identificadores de base de datos).For valid login names, see Database Identifiers.
    ContraseñaPassword Cualquier contraseña válidaAny valid password La contraseña debe tener un mínimo de ocho caracteres y debe contener caracteres de tres de las siguientes categorías: caracteres en mayúsculas, caracteres en minúsculas, números y caracteres no alfanuméricos.Your password must have at least eight characters and must contain characters from three of the following categories: upper case characters, lower case characters, numbers, and non-alphanumeric characters.
    UbicaciónLocation Cualquier ubicación válidaAny valid location Para obtener información acerca de las regiones, consulte Regiones de Azure.For information about regions, see Azure Regions.

    creación del servidor de base de datos

  5. Haga clic en Seleccionar.Click Select.

  6. Haga clic en Nivel de rendimiento para especificar si el almacenamiento de datos es Gen1 o Gen2 y especificar el número de unidades de almacenamiento de datos.Click Performance level to specify whether the data warehouse is Gen1 or Gen2, and the number of data warehouse units.

  7. En este tutorial, seleccione el nivel Gen2 de SQL Data Warehouse.For this tutorial, select Gen2 of SQL Data Warehouse. El control deslizante se establece de forma predeterminada en DW1000c.The slider is set to DW1000c by default. Intente moverlo hacia arriba y hacia abajo para ver cómo funciona.Try moving it up and down to see how it works.

    configuración del rendimiento

  8. Haga clic en Aplicar.Click Apply.

  9. En la página SQL Data Warehouse, seleccione una intercalación para la base de datos en blanco.In the SQL Data Warehouse page, select a collation for the blank database. En este tutorial, use el valor predeterminado.For this tutorial, use the default value. Para más información sobre las intercalaciones, vea Collations (Intercalaciones)For more information about collations, see Collations

  10. Una vez completado el formulario de SQL Database, haga clic en Crear para aprovisionar la base de datos.Now that you have completed the SQL Database form, click Create to provision the database. El aprovisionamiento tarda unos minutos.Provisioning takes a few minutes.

    clic en crear

  11. En la barra de herramientas, haga clic en Notificaciones para supervisar el proceso de implementación.On the toolbar, click Notifications to monitor the deployment process.

    notificación

Crear una regla de firewall de nivel de servidorCreate a server-level firewall rule

El servicio SQL Data Warehouse crea un firewall en el nivel de servidor, lo que impide que herramientas y aplicaciones externas se conecten al servidor o a las bases de datos del servidor.The SQL Data Warehouse service creates a firewall at the server-level that prevents external applications and tools from connecting to the server or any databases on the server. Para habilitar la conectividad, puede agregar reglas de firewall que habilitan la conectividad para direcciones IP concretas.To enable connectivity, you can add firewall rules that enable connectivity for specific IP addresses. Siga estos pasos para crear una regla de firewall de nivel de servidor para la dirección IP del cliente.Follow these steps to create a server-level firewall rule for your client's IP address.

Nota

SQL Data Warehouse se comunica a través del puerto 1433.SQL Data Warehouse communicates over port 1433. Si intenta conectarse desde una red corporativa, es posible que el firewall de la red no permita el tráfico saliente a través del puerto 1433.If you are trying to connect from within a corporate network, outbound traffic over port 1433 might not be allowed by your network's firewall. En ese caso, no puede conectarse al servidor de Azure SQL Database, salvo que el departamento de TI abra el puerto 1433.If so, you cannot connect to your Azure SQL Database server unless your IT department opens port 1433.

  1. Cuando se haya finalizado la implementación, haga clic en Bases de datos SQL en el menú de la izquierda y, después, haga clic en mySampleDatabase en la página Bases de datos SQL.After the deployment completes, click SQL databases from the left-hand menu and then click mySampleDatabase on the SQL databases page. Se abre la página de información general de la base de datos, que muestra el nombre completo del servidor (por ejemplo, mynewserver-20180430.database.windows.net) y proporciona opciones para otras configuraciones.The overview page for your database opens, showing you the fully qualified server name (such as mynewserver-20180430.database.windows.net) and provides options for further configuration.

  2. Copie este nombre para conectarse a su servidor y a sus bases de datos en los inicios rápidos posteriores.Copy this fully qualified server name for use to connect to your server and its databases in subsequent quick starts. A continuación, haga clic en el nombre del servidor para abrir la configuración del servidor.Then click on the server name to open server settings.

    búsqueda del nombre del servidor

  3. Haga clic en el nombre del servidor para abrir la configuración del servidor.Click the server name to open server settings.

    configuración del servidor

  4. Haga clic en Mostrar configuración del firewall.Click Show firewall settings. Se abrirá la página Configuración del firewall del servidor de SQL Database.The Firewall settings page for the SQL Database server opens.

    regla de firewall del servidor

  5. Haga clic en Agregar IP de cliente en la barra de herramientas para agregar la dirección IP actual a la nueva regla de firewall.Click Add client IP on the toolbar to add your current IP address to a new firewall rule. La regla de firewall puede abrir el puerto 1433 para una única dirección IP o un intervalo de direcciones IP.A firewall rule can open port 1433 for a single IP address or a range of IP addresses.

  6. Haga clic en Save(Guardar).Click Save. Se crea una regla de firewall de nivel de servidor para el puerto 1433 de la dirección IP actual en el servidor lógico.A server-level firewall rule is created for your current IP address opening port 1433 on the logical server.

  7. Haga clic en Aceptar y después cierre la página Configuración de firewall.Click OK and then close the Firewall settings page.

Ahora puede conectarse a SQL server y sus almacenamientos de datos mediante esta dirección IP.You can now connect to the SQL server and its data warehouses using this IP address. La conexión funciona desde SQL Server Management Studio u otra herramienta de su elección.The connection works from SQL Server Management Studio or another tool of your choice. Cuando se conecte, use la cuenta de ServerAdmin que creó anteriormente.When you connect, use the ServerAdmin account you created previously.

Importante

De forma predeterminada, el acceso a través del firewall de SQL Database está habilitado para todos los servicios de Azure.By default, access through the SQL Database firewall is enabled for all Azure services. Haga clic en DESACTIVAR en esta página y luego haga clic en Guardar para deshabilitar el firewall para todos los servicios de Azure.Click OFF on this page and then click Save to disable the firewall for all Azure services.

Obtención del nombre completo del servidorGet the fully qualified server name

En Azure Portal encontrará el nombre completo del servidor SQL.Get the fully qualified server name for your SQL server in the Azure portal. Más adelante usará el nombre completo cuando se conecte al servidor.Later you will use the fully qualified name when connecting to the server.

  1. Inicie sesión en Azure Portal.Log in to the Azure portal.

  2. Seleccione Almacenes de SQL Data Warehouse en el menú izquierdo y haga clic en la página Almacenes de SQL Data Warehouse de la base de datos.Select SQL Data warehouses from the left-hand menu, and click your database on the SQL data warehouses page.

  3. En el panel Essentials de la página de Azure Portal de la base de datos, busque y copie el nombre del servidor.In the Essentials pane in the Azure portal page for your database, locate and then copy the Server name. En este ejemplo, el nombre completo es mynewserver-20180430.database.windows.net.In this example, the fully qualified name is mynewserver-20180430.database.windows.net.

    información sobre la conexión

Conexión al servidor como administrador del mismoConnect to the server as server admin

En esta sección se usa SQL Server Management Studio (SSMS) para establecer una conexión con el servidor Azure SQL.This section uses SQL Server Management Studio (SSMS) to establish a connection to your Azure SQL server.

  1. Abra SQL Server Management Studio.Open SQL Server Management Studio.

  2. En el cuadro de diálogo Conectar con el servidor, especifique la siguiente información:In the Connect to Server dialog box, enter the following information:

    ConfiguraciónSetting       Valor sugeridoSuggested value DescripciónDescription
    Tipo de servidorServer type Motor de base de datosDatabase engine Este valor es obligatorioThis value is required
    Nombre de servidorServer name Nombre completo del servidorThe fully qualified server name Este nombre debería parecerse al siguiente: mynewserver-20180430.database.windows.net.The name should be something like this: mynewserver-20180430.database.windows.net.
    AuthenticationAuthentication Autenticación de SQL ServerSQL Server Authentication Autenticación de SQL es el único tipo de autenticación que hemos configurado en este tutorial.SQL Authentication is the only authentication type that we have configured in this tutorial.
    Inicio de sesiónLogin La cuenta de administrador del servidorThe server admin account Es la cuenta que especificó cuando creó el servidor.This is the account that you specified when you created the server.
    ContraseñaPassword La contraseña de la cuenta de administrador del servidorThe password for your server admin account Es la contraseña que especificó cuando creó el servidor.This is the password that you specified when you created the server.

    conectar con el servidor

  3. Haga clic en Conectar.Click Connect. La ventana Explorador de objetos se abre en SSMS.The Object Explorer window opens in SSMS.

  4. En el Explorador de objetos, expanda Bases de datos.In Object Explorer, expand Databases. A continuación, expanda Bases de datos del sistema y maestro para ver los objetos de la base de datos maestra.Then expand System databases and master to view the objects in the master database. Expanda mySampleDatabase para ver los objetos de la base de datos.Expand mySampleDatabase to view the objects in your new database.

    Objetos de base de datos

Creación de un usuario para cargar datosCreate a user for loading data

La cuenta de administrador del servidor está pensada para realizar operaciones de administración y no es adecuada para ejecutar consultas en datos de usuario.The server admin account is meant to perform management operations, and is not suited for running queries on user data. La carga de datos es una operación que utiliza mucha memoria.Loading data is a memory-intensive operation. Los valores máximos de memoria se definen en función de la generación de SQL Data Warehouse aprovisionada, las unidades de almacenamiento de datos y la clase de recurso.Memory maximums are defined according to which Generation of SQL Data Warehouse you've provisioned, data warehouse units, and resource class.

Es mejor crear un inicio de sesión y un usuario que esté dedicado para cargar datos.It's best to create a login and user that is dedicated for loading data. A continuación, agregue el usuario de carga a una clase de recurso que permita una asignación de memoria máxima apropiada.Then add the loading user to a resource class that enables an appropriate maximum memory allocation.

Puesto que actualmente está conectado como administrador del servidor, puede crear inicios de sesión y usuarios.Since you are currently connected as the server admin, you can create logins and users. Siga estos pasos para crear un inicio de sesión y un usuario llamado LoaderRC20.Use these steps to create a login and user called LoaderRC20. Luego, asigne el usuario a la clase de recurso staticrc20.Then assign the user to the staticrc20 resource class.

  1. En SSMS, haga clic en maestro para mostrar un menú desplegable y elija Nueva consulta.In SSMS, right-click master to show a drop-down menu, and choose New Query. Se abrirá una nueva ventana de consulta.A new query window opens.

    Nueva consulta en maestro

  2. En la ventana de consulta, escriba estos comandos de T-SQL para crear un inicio de sesión y un usuario denominado LoaderRC20, sustituyendo su propia contraseña por 'a123STRONGpassword!'.In the query window, enter these T-SQL commands to create a login and user named LoaderRC20, substituting your own password for 'a123STRONGpassword!'.

    CREATE LOGIN LoaderRC20 WITH PASSWORD = 'a123STRONGpassword!';
    CREATE USER LoaderRC20 FOR LOGIN LoaderRC20;
    
  3. Haga clic en Ejecutar.Click Execute.

  4. Haga clic con el botón derecho en mySampleDataWarehouse y elija Nueva consulta.Right-click mySampleDataWarehouse, and choose New Query. Se abre una nueva ventana de consulta.A new query Window opens.

    Nueva consulta en el almacenamiento de datos de ejemplo

  5. Escriba los siguientes comandos de T-SQL para crear un usuario de base de datos denominado LoaderRC20 para el inicio de sesión LoaderRC20.Enter the following T-SQL commands to create a database user named LoaderRC20 for the LoaderRC20 login. La segunda línea concede al nuevo usuario permisos de CONTROL en el nuevo almacenamiento de datos.The second line grants the new user CONTROL permissions on the new data warehouse. Estos permisos son similares a convertir al usuario en el propietario de la base de datos.These permissions are similar to making the user the owner of the database. La tercera línea agrega el nuevo usuario como miembro de la clase de recurso staticrc20.The third line adds the new user as a member of the staticrc20 resource class.

    CREATE USER LoaderRC20 FOR LOGIN LoaderRC20;
    GRANT CONTROL ON DATABASE::[mySampleDataWarehouse] to LoaderRC20;
    EXEC sp_addrolemember 'staticrc20', 'LoaderRC20';
    
  6. Haga clic en Ejecutar.Click Execute.

Conexión al servidor como el usuario de cargaConnect to the server as the loading user

El primer paso para cargar datos es iniciar sesión como LoaderRC20.The first step toward loading data is to login as LoaderRC20.

  1. En el Explorador de objetos, haga clic en el menú desplegable Conectar y seleccione Motor de base de datos.In Object Explorer, click the Connect drop down menu and select Database Engine. Aparecerá el cuadro de diálogo Conectar con el servidor .The Connect to Server dialog box appears.

    Conexión con nuevo inicio de sesión

  2. Escriba el nombre completo del servidor y escriba LoaderRC20 como inicio de sesión.Enter the fully qualified server name, and enter LoaderRC20 as the Login. Escriba la contraseña para LoaderRC20.Enter your password for LoaderRC20.

  3. Haga clic en Conectar.Click Connect.

  4. Cuando la conexión esté lista, verá dos conexiones de servidor en el Explorador de objetos.When your connection is ready, you will see two server connections in Object Explorer. Una conexión como ServerAdmin y otra como MedRCLogin.One connection as ServerAdmin and one connection as MedRCLogin.

    Conexión correcta

Creación de tablas externas para los datos de ejemploCreate external tables for the sample data

Está listo para comenzar el proceso de carga de datos en el nuevo almacenamiento de datos.You are ready to begin the process of loading data into your new data warehouse. Este tutorial le muestra cómo usar tablas externas para cargar datos de taxis de Nueva York procedentes de una instancia de Azure Storage Blob.This tutorial shows you how to use external tables to load New York City taxi cab data from an Azure storage blob. Para consultas futuras y aprender cómo obtener los datos en Azure Blob Storage o cómo cargarlos directamente desde el origen en SQL Data Warehouse, consulte la introducción a la carga.For future reference, to learn how to get your data to Azure blob storage or to load it directly from your source into SQL Data Warehouse, see the loading overview.

Ejecute los siguientes scripts SQL para especificar información sobre los datos que desea cargar.Run the following SQL scripts specify information about the data you wish to load. Esta información incluye dónde se encuentran los datos, el formato del contenido de los mismos y la definición de tabla para ellos.This information includes where the data is located, the format of the contents of the data, and the table definition for the data.

  1. En la sección anterior, inició sesión en el almacenamiento de datos como LoaderRC20.In the previous section, you logged into your data warehouse as LoaderRC20. En SSMS, haga clic con el botón derecho en la conexión de LoaderRC20 y seleccione Nueva consulta.In SSMS, right-click your LoaderRC20 connection and select New Query. Aparece una nueva ventana de consulta.A new query window appears.

    Nueva ventana de consulta de carga

  2. Compare la ventana de consulta con la imagen anterior.Compare your query window to the previous image. Verifique que la nueva ventana de consulta se ejecuta como LoaderRC20 y que realiza consultas en la base de datos MySampleDataWarehouse.Verify your new query window is running as LoaderRC20 and performing queries on your MySampleDataWarehouse database. Utilice esta ventana de consulta para realizar todos los pasos de carga.Use this query window to perform all of the loading steps.

  3. Cree una clave maestra para la base de datos MySampleDataWarehouse.Create a master key for the MySampleDataWarehouse database. Solo necesita crear una clave maestra una vez para cada base de datos.You only need to create a master key once per database.

    CREATE MASTER KEY;
    
  4. Ejecute la siguiente instrucción CREATE EXTERNAL DATA SOURCE para definir la ubicación del blob de Azure.Run the following CREATE EXTERNAL DATA SOURCE statement to define the location of the Azure blob. Esta es la ubicación de los datos de taxis externos.This is the location of the external taxi cab data. Para ejecutar un comando que se ha anexado a la ventana de consulta, resalte los comandos que desea ejecutar y haga clic en Ejecutar.To run a command that you have appended to the query window, highlight the commands you wish to run and click Execute.

    CREATE EXTERNAL DATA SOURCE NYTPublic
    WITH
    (
        TYPE = Hadoop,
        LOCATION = 'wasbs://2013@nytaxiblob.blob.core.windows.net/'
    );
    
  5. Ejecute la siguiente instrucción de T-SQL CREATE EXTERNAL FILE FORMAT para especificar características y opciones de formato para el archivo de datos externos.Run the following CREATE EXTERNAL FILE FORMAT T-SQL statement to specify formatting characteristics and options for the external data file. Esta instrucción especifica que los datos externos se almacenan como texto y los valores se separan mediante el carácter de barra vertical ('|').This statement specifies the external data is stored as text and the values are separated by the pipe ('|') character. El archivo externo está comprimido con Gzip.The external file is compressed with Gzip.

    CREATE EXTERNAL FILE FORMAT uncompressedcsv
    WITH (
        FORMAT_TYPE = DELIMITEDTEXT,
        FORMAT_OPTIONS ( 
            FIELD_TERMINATOR = ',',
            STRING_DELIMITER = '',
            DATE_FORMAT = '',
            USE_TYPE_DEFAULT = False
        )
    );
    CREATE EXTERNAL FILE FORMAT compressedcsv
    WITH ( 
        FORMAT_TYPE = DELIMITEDTEXT,
        FORMAT_OPTIONS ( FIELD_TERMINATOR = '|',
            STRING_DELIMITER = '',
        DATE_FORMAT = '',
            USE_TYPE_DEFAULT = False
        ),
        DATA_COMPRESSION = 'org.apache.hadoop.io.compress.GzipCodec'
    );
    
  6. Ejecute la siguiente instrucción CREATE SCHEMA para crear un esquema para el formato de archivo externo.Run the following CREATE SCHEMA statement to create a schema for your external file format. El esquema proporciona una manera de organizar las tablas externas que va a crear.The schema provides a way to organize the external tables you are about to create.

    CREATE SCHEMA ext;
    
  7. Creación de la tablas externasCreate the external tables. Las definiciones de tabla se almacenan en SQL Data Warehouse, pero las tablas hacen referencia a datos que se almacenan en Azure Blob Storage.The table definitions are stored in SQL Data Warehouse, but the tables reference data that is stored in Azure blob storage. Ejecute los siguientes comandos T-SQL para crear varias tablas externas que apuntan al blob de Azure que hemos definido previamente en nuestro origen de datos externo.Run the following T-SQL commands to create several external tables that all point to the Azure blob we defined previously in our external data source.

    CREATE EXTERNAL TABLE [ext].[Date] 
    (
        [DateID] int NOT NULL,
        [Date] datetime NULL,
        [DateBKey] char(10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [DayOfMonth] varchar(2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [DaySuffix] varchar(4) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [DayName] varchar(9) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [DayOfWeek] char(1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [DayOfWeekInMonth] varchar(2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [DayOfWeekInYear] varchar(2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [DayOfQuarter] varchar(3) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [DayOfYear] varchar(3) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [WeekOfMonth] varchar(1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [WeekOfQuarter] varchar(2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [WeekOfYear] varchar(2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [Month] varchar(2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [MonthName] varchar(9) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [MonthOfQuarter] varchar(2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [Quarter] char(1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [QuarterName] varchar(9) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [Year] char(4) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [YearName] char(7) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [MonthYear] char(10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [MMYYYY] char(6) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [FirstDayOfMonth] date NULL,
        [LastDayOfMonth] date NULL,
        [FirstDayOfQuarter] date NULL,
        [LastDayOfQuarter] date NULL,
        [FirstDayOfYear] date NULL,
        [LastDayOfYear] date NULL,
        [IsHolidayUSA] bit NULL,
        [IsWeekday] bit NULL,
        [HolidayUSA] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
    )
    WITH
    (
        LOCATION = 'Date',
        DATA_SOURCE = NYTPublic,
        FILE_FORMAT = uncompressedcsv,
        REJECT_TYPE = value,
        REJECT_VALUE = 0
    ); 
    CREATE EXTERNAL TABLE [ext].[Geography]
    (
        [GeographyID] int NOT NULL,
        [ZipCodeBKey] varchar(10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
        [County] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [City] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [State] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [Country] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [ZipCode] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
    )
    WITH
    (
        LOCATION = 'Geography',
        DATA_SOURCE = NYTPublic,
        FILE_FORMAT = uncompressedcsv,
        REJECT_TYPE = value,
        REJECT_VALUE = 0 
    );      
    CREATE EXTERNAL TABLE [ext].[HackneyLicense]
    (
        [HackneyLicenseID] int NOT NULL,
        [HackneyLicenseBKey] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
        [HackneyLicenseCode] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
    )
    WITH
    (
        LOCATION = 'HackneyLicense',
        DATA_SOURCE = NYTPublic,
        FILE_FORMAT = uncompressedcsv,
        REJECT_TYPE = value,
        REJECT_VALUE = 0
    );
    CREATE EXTERNAL TABLE [ext].[Medallion]
    (
        [MedallionID] int NOT NULL,
        [MedallionBKey] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
        [MedallionCode] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
    )
    WITH
    (
        LOCATION = 'Medallion',
        DATA_SOURCE = NYTPublic,
        FILE_FORMAT = uncompressedcsv,
        REJECT_TYPE = value,
        REJECT_VALUE = 0
    )
    ;  
    CREATE EXTERNAL TABLE [ext].[Time]
    (
        [TimeID] int NOT NULL,
        [TimeBKey] varchar(8) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
        [HourNumber] tinyint NOT NULL,
        [MinuteNumber] tinyint NOT NULL,
        [SecondNumber] tinyint NOT NULL,
        [TimeInSecond] int NOT NULL,
        [HourlyBucket] varchar(15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
        [DayTimeBucketGroupKey] int NOT NULL,
        [DayTimeBucket] varchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
    )
    WITH
    (
        LOCATION = 'Time',
        DATA_SOURCE = NYTPublic,
        FILE_FORMAT = uncompressedcsv,
        REJECT_TYPE = value,
        REJECT_VALUE = 0
    );
    CREATE EXTERNAL TABLE [ext].[Trip]
    (
        [DateID] int NOT NULL,
        [MedallionID] int NOT NULL,
        [HackneyLicenseID] int NOT NULL,
        [PickupTimeID] int NOT NULL,
        [DropoffTimeID] int NOT NULL,
        [PickupGeographyID] int NULL,
        [DropoffGeographyID] int NULL,
        [PickupLatitude] float NULL,
        [PickupLongitude] float NULL,
        [PickupLatLong] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [DropoffLatitude] float NULL,
        [DropoffLongitude] float NULL,
        [DropoffLatLong] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [PassengerCount] int NULL,
        [TripDurationSeconds] int NULL,
        [TripDistanceMiles] float NULL,
        [PaymentType] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [FareAmount] money NULL,
        [SurchargeAmount] money NULL,
        [TaxAmount] money NULL,
        [TipAmount] money NULL,
        [TollsAmount] money NULL,
        [TotalAmount] money NULL
    )
    WITH
    (
        LOCATION = 'Trip2013',
        DATA_SOURCE = NYTPublic,
        FILE_FORMAT = compressedcsv,
        REJECT_TYPE = value,
        REJECT_VALUE = 0
    );
    CREATE EXTERNAL TABLE [ext].[Weather]
    (
        [DateID] int NOT NULL,
        [GeographyID] int NOT NULL,
        [PrecipitationInches] float NOT NULL,
        [AvgTemperatureFahrenheit] float NOT NULL
    )
    WITH
    (
        LOCATION = 'Weather',
        DATA_SOURCE = NYTPublic,
        FILE_FORMAT = uncompressedcsv,
        REJECT_TYPE = value,
        REJECT_VALUE = 0
    )
    ;
    
  8. En el Explorador de objetos, expanda mySampleDataWarehouse para ver la lista de tablas externas que acaba de crear.In Object Explorer, expand mySampleDataWarehouse to see the list of external tables you just created.

    Visualización de tablas externas

Carga de datos en el almacenamiento de datosLoad the data into your data warehouse

En esta sección se utilizan las tablas externas que acaba de definir para cargar los datos de ejemplo desde Azure Storage Blob en SQL Data Warehouse.This section uses the external tables you just defined to load the sample data from Azure Storage Blob to SQL Data Warehouse.

Nota

En este tutorial se cargan los datos directamente en la tabla final.This tutorial loads the data directly into the final table. En un entorno de producción, normalmente se usa CREATE TABLE AS SELECT para cargar en una tabla de almacenamiento provisional.In a production environment, you will usually use CREATE TABLE AS SELECT to load into a staging table. Con los datos en la tabla de almacenamiento provisional, puede realizar las transformaciones necesarias.While data is in the staging table you can perform any necessary transformations. Para anexar los datos de la tabla de almacenamiento provisional a una tabla de producción, use la instrucción INSERT...SELECT.To append the data in the staging table to a production table, you can use the INSERT...SELECT statement. Para más información, consulte Inserción de datos en una tabla de producción.For more information, see Inserting data into a production table.

El script utiliza la instrucción de T-SQL CREATE TABLE AS SELECT (CTAS) para cargar los datos de Azure Storage Blob en nuevas tablas en el almacenamiento de datos.The script uses the CREATE TABLE AS SELECT (CTAS) T-SQL statement to load the data from Azure Storage Blob into new tables in your data warehouse. CTAS crea una tabla nueva en función de los resultados de una instrucción select.CTAS creates a new table based on the results of a select statement. La nueva tabla tiene las mismas columnas y los mismos tipos de datos que los resultados de la instrucción select.The new table has the same columns and data types as the results of the select statement. Cuando la instrucción select realiza la selección en una tabla externa, SQL Data Warehouse importa los datos en una tabla relacional en el almacenamiento de datos.When the select statement selects from an external table, SQL Data Warehouse imports the data into a relational table in the data warehouse.

  1. Ejecute el siguiente script para cargar los datos en tablas nuevas en el almacenamiento de datos.Run the following script to load the data into new tables in your data warehouse.

    CREATE TABLE [dbo].[Date]
    WITH
    ( 
        DISTRIBUTION = ROUND_ROBIN,
        CLUSTERED COLUMNSTORE INDEX
    )
    AS SELECT * FROM [ext].[Date]
    OPTION (LABEL = 'CTAS : Load [dbo].[Date]')
    ;
    CREATE TABLE [dbo].[Geography]
    WITH
    ( 
        DISTRIBUTION = ROUND_ROBIN,
        CLUSTERED COLUMNSTORE INDEX
    )
    AS
    SELECT * FROM [ext].[Geography]
    OPTION (LABEL = 'CTAS : Load [dbo].[Geography]')
    ;
    CREATE TABLE [dbo].[HackneyLicense]
    WITH
    ( 
        DISTRIBUTION = ROUND_ROBIN,
        CLUSTERED COLUMNSTORE INDEX
    )
    AS SELECT * FROM [ext].[HackneyLicense]
    OPTION (LABEL = 'CTAS : Load [dbo].[HackneyLicense]')
    ;
    CREATE TABLE [dbo].[Medallion]
    WITH
    (
        DISTRIBUTION = ROUND_ROBIN,
        CLUSTERED COLUMNSTORE INDEX
    )
    AS SELECT * FROM [ext].[Medallion]
    OPTION (LABEL = 'CTAS : Load [dbo].[Medallion]')
    ;
    CREATE TABLE [dbo].[Time]
    WITH
    (
        DISTRIBUTION = ROUND_ROBIN,
        CLUSTERED COLUMNSTORE INDEX
    )
    AS SELECT * FROM [ext].[Time]
    OPTION (LABEL = 'CTAS : Load [dbo].[Time]')
    ;
    CREATE TABLE [dbo].[Weather]
    WITH
    ( 
        DISTRIBUTION = ROUND_ROBIN,
        CLUSTERED COLUMNSTORE INDEX
    )
    AS SELECT * FROM [ext].[Weather]
    OPTION (LABEL = 'CTAS : Load [dbo].[Weather]')
    ;
    CREATE TABLE [dbo].[Trip]
    WITH
    (
        DISTRIBUTION = ROUND_ROBIN,
        CLUSTERED COLUMNSTORE INDEX
    )
    AS SELECT * FROM [ext].[Trip]
    OPTION (LABEL = 'CTAS : Load [dbo].[Trip]')
    ;
    
  2. Consulte los datos mientras se carga.View your data as it loads. Está cargando varios gigabytes de datos y comprimiéndolos en índices de almacén de columnas en clúster de alto rendimiento.You’re loading several GBs of data and compressing it into highly performant clustered columnstore indexes. Ejecute la siguiente consulta, que usa vistas de administración dinámica (DMV) para mostrar el estado de la carga.Run the following query that uses a dynamic management views (DMVs) to show the status of the load. Después de iniciar la consulta, tómese un café y coma algo mientras SQL Data Warehouse hace el trabajo duro.After starting the query, grab a coffee and a snack while SQL Data Warehouse does some heavy lifting.

    SELECT
        r.command,
        s.request_id,
        r.status,
        count(distinct input_name) as nbr_files,
        sum(s.bytes_processed)/1024/1024/1024.0 as gb_processed
    FROM 
        sys.dm_pdw_exec_requests r
        INNER JOIN sys.dm_pdw_dms_external_work s
        ON r.request_id = s.request_id
    WHERE
        r.[label] = 'CTAS : Load [dbo].[Date]' OR
        r.[label] = 'CTAS : Load [dbo].[Geography]' OR
        r.[label] = 'CTAS : Load [dbo].[HackneyLicense]' OR
        r.[label] = 'CTAS : Load [dbo].[Medallion]' OR
        r.[label] = 'CTAS : Load [dbo].[Time]' OR
        r.[label] = 'CTAS : Load [dbo].[Weather]' OR
        r.[label] = 'CTAS : Load [dbo].[Trip]'
    GROUP BY
        r.command,
        s.request_id,
        r.status
    ORDER BY
        nbr_files desc, 
        gb_processed desc;
    
  3. Consulte todas las consultas del sistema.View all system queries.

    SELECT * FROM sys.dm_pdw_exec_requests;
    
  4. Disfrute viendo cómo los datos se cargan ordenadamente en el almacenamiento de datos.Enjoy seeing your data nicely loaded into your data warehouse.

    Visualización de tablas cargadas

Autenticación con identidades administradas para cargar (opcional)Authenticate using managed identities to load (optional)

La carga con PolyBase y la autenticación mediante identidades administradas es el mecanismo más seguro y le permite aprovechar los puntos de conexión de servicio de red virtual con almacenamiento de Azure.Loading using PolyBase and authenticating through managed identities is the most secure mechanism and enables you to leverage VNet Service Endpoints with Azure storage.

PrerequisitesPrerequisites

  1. Instale Azure PowerShell mediante esta guía.Install Azure PowerShell using this guide.
  2. Si tiene una cuenta de uso general v1 o de Blob Storage, primero debe actualizar a Uso general v2 mediante esta guía.If you have a general-purpose v1 or blob storage account, you must first upgrade to general-purpose v2 using this guide.
  3. Debe activar Permitir que los servicios de Microsoft de confianza accedan a esta cuenta de almacenamiento en el menú de configuración Firewalls y redes virtuales de la cuenta de Azure Storage.You must have Allow trusted Microsoft services to access this storage account turned on under Azure Storage account Firewalls and Virtual networks settings menu. Consulte esta guía para obtener más información.Refer to this guide for more information.

PasosSteps

  1. En PowerShell, registre el servidor de SQL Database con Azure Active Directory (AAD):In PowerShell, register your SQL Database server with Azure Active Directory (AAD):

    Connect-AzAccount
    Select-AzSubscription -SubscriptionId your-subscriptionId
    Set-AzSqlServer -ResourceGroupName your-database-server-resourceGroup -ServerName your-database-servername -AssignIdentity
    
    1. Cree una cuenta de almacenamiento de uso general v2 con esta guía.Create a general-purpose v2 Storage Account using this guide.

    Nota

    • Si tiene una cuenta de uso general v1 o de Blob Storage, primero debe actualizar a Uso general v2 mediante esta guía.If you have a general-purpose v1 or blob storage account, you must first upgrade to v2 using this guide.
  2. En la cuenta de almacenamiento, vaya a Control de acceso (IAM) y haga clic en Agregar asignación de roles.Under your storage account, navigate to Access Control (IAM), and click Add role assignment. Asigne el rol RBAC Colaborador de datos de Storage Blob al servidor de SQL Database.Assign Storage Blob Data Contributor RBAC role to your SQL Database server.

    Nota

    Solo los miembros con el privilegio Propietario pueden realizar este paso.Only members with Owner privilege can perform this step. Para obtener los distintos roles integrados para los recursos de Azure, consulte esta guía.For various built-in roles for Azure resources, refer to this guide.

  3. Conectividad de PolyBase a la cuenta de Azure Storage:Polybase connectivity to the Azure Storage account:

    1. Cree la credencial con ámbito de base de datos con IDENTITY = "Managed Service Identity" :Create your database scoped credential with IDENTITY = 'Managed Service Identity':

      CREATE DATABASE SCOPED CREDENTIAL msi_cred WITH IDENTITY = 'Managed Service Identity';
      

      Nota

      • No es necesario especificar SECRET con la clave de acceso de Azure Storage porque este mecanismo usa la identidad administrada en segundo plano.There is no need to specify SECRET with Azure Storage access key because this mechanism uses Managed Identity under the covers.
      • El nombre de IDENTITY debe ser "Managed Service Identity" para que la conectividad de PolyBase funcione con la cuenta de Azure Storage.IDENTITY name should be 'Managed Service Identity' for PolyBase connectivity to work with Azure Storage account.
    2. Cree el origen de datos externo mediante la especificación de la credencial con ámbito de base de datos con Managed Service Identity.Create the External Data Source specifying the Database Scoped Credential with the Managed Service Identity.

    3. Realice una consulta normal con las tablas externas.Query as normal using external tables.

Si quiere configurar los puntos de conexión de servicio de red virtual para SQL Data Warehouse, consulte la siguiente documentación.Refer to the following documentation if you'd like to set up virtual network service endpoints for SQL Data Warehouse.

Limpieza de recursosClean up resources

Se le cobran recursos de proceso y datos que cargó en el almacenamiento de datos.You are being charged for compute resources and data that you loaded into your data warehouse. Estos se cobran por separado.These are billed separately.

  • Si desea conservar los datos de almacenamiento, puede pausar el proceso cuando no está utilizando el almacenamiento de datos.If you want to keep the data in storage, you can pause compute when you aren't using the data warehouse. Cuando pausa el proceso, solamente se cobra por el almacenamiento de datos y puede reanudar el proceso cada vez que está listo para trabajar con los datos.By pausing compute you will only be charge for data storage and you can resume the compute whenever you are ready to work with the data.
  • Si desea quitar cobros futuros, puede eliminar el almacenamiento de datos.If you want to remove future charges, you can delete the data warehouse.

Siga estos pasos para limpiar los recursos según estime oportuno.Follow these steps to clean up resources as you desire.

  1. Inicie sesión en Azure Portal y haga clic en el almacenamiento de datos.Log in to the Azure portal, click on your data warehouse.

    Limpieza de recursos

  2. Para pausar el proceso, haga clic en el botón Pausar.To pause compute, click the Pause button. Cuando el almacenamiento de datos se pause, verá un botón Iniciar.When the data warehouse is paused, you will see a Start button. Para reanudar el proceso, haga clic en Iniciar.To resume compute, click Start.

  3. Para quitar el almacenamiento de datos para que no se le cobre por proceso o almacenamiento, haga clic en Eliminar.To remove the data warehouse so you won't be charged for compute or storage, click Delete.

  4. Para eliminar el servidor SQL que creó, haga clic en mynewserver-20180430.database.windows.net en la imagen anterior y luego haga clic en Eliminar.To remove the SQL server you created, click mynewserver-20180430.database.windows.net in the previous image, and then click Delete. Debe tener cuidado con esto, ya que la eliminación del servidor eliminará todas las bases de datos asignadas al servidor.Be careful with this as deleting the server will delete all databases assigned to the server.

  5. Para quitar el grupo de recursos, haga clic en myResourceGroup y luego haga clic en Eliminar grupo de recursos.To remove the resource group, click myResourceGroup, and then click Delete resource group.

Pasos siguientesNext steps

En este tutorial, aprendió a crear un almacenamiento de datos y a crear un usuario para cargar datos.In this tutorial, you learned how to create a data warehouse and create a user for loading data. Creó tablas externas para definir la estructura de los datos almacenados en Azure Storage Blob y luego utilizó la instrucción CREATE TABLE AS SELECT de PolyBase para cargar datos en el almacenamiento de datos.You created external tables to define the structure for data stored in Azure Storage Blob, and then used the PolyBase CREATE TABLE AS SELECT statement to load data into your data warehouse.

Hizo todo esto:You did these things:

  • Creó un almacenamiento de datos en Azure PortalCreated a data warehouse in the Azure portal
  • Establecer una regla de firewall de nivel de servidor en Azure PortalSet up a server-level firewall rule in the Azure portal
  • Se conectó al almacenamiento de datos con SSMSConnected to the data warehouse with SSMS
  • Creó un usuario designado para cargar datosCreated a user designated for loading data
  • Creó tablas externas para los datos en Azure Blob StorageCreated external tables for data in Azure Storage Blob
  • Utilizó la instrucción CTAS de T-SQL para cargar datos en el almacenamiento de datosUsed the CTAS T-SQL statement to load data into your data warehouse
  • Vio el progreso de los datos a medida que se cargabanViewed the progress of data as it is loading
  • Creó estadísticas de los datos recién cargadosCreated statistics on the newly loaded data

Avance a la introducción al desarrollo para obtener información sobre cómo migrar una base de datos existente a SQL Data Warehouse.Advance to the development overview to learn how to migrate an existing database to SQL Data Warehouse.