Tutorial: Ingerir dados em um pool de dados do SQL Server com Transact-SQL

Aplica-se a: SQL Server 2019 (15.x)

Importante

O complemento Clusters de Big Data do Microsoft SQL Server 2019 será desativado. O suporte para Clusters de Big Data do SQL Server 2019 será encerrado em 28 de fevereiro de 2025. Todos os usuários existentes do SQL Server 2019 com Software Assurance terão suporte total na plataforma e o software continuará a ser mantido por meio de atualizações cumulativas do SQL Server até esse momento. Para obter mais informações, confira a postagem no blog de anúncio e as opções de Big Data na plataforma do Microsoft SQL Server.

Este tutorial demonstra como usar o Transact-SQL para carregar dados no pool de dados de um Clusters de Big Data do SQL Server 2019. Com Clusters de Big Data do SQL Server, os dados de uma variedade de fontes podem ser ingeridos e distribuídos entre as instâncias do pool de dados.

Neste tutorial, você aprenderá como:

  • Criar uma tabela externa no pool de dados.
  • Inserir exemplos de dados de cliques da Web na tabela do pool de dados.
  • Unir dados na tabela do pool de dados com tabelas locais.

Dica

Se preferir, você poderá baixar e executar um script para os comandos neste tutorial. Para obter instruções, confira os Exemplos de pools de dados no GitHub.

Pré-requisitos

Criar uma tabela externa no pool de dados

As etapas a seguir criam uma tabela externa no pool de dados chamado web_clickstream_clicks_data_pool. Essa tabela pode ser usada como uma localização para ingerir dados no cluster de Big Data.

  1. No Azure Data Studio, conecte-se à instância mestre do SQL Server do cluster de Big Data. Para obter mais informações, confira Conectar-se à instância mestre do SQL Server.

  2. Clique duas vezes na conexão na janela Servidores para mostrar o painel do servidor da instância mestre do SQL Server. Selecione Nova Consulta.

    Consulta da instância mestre do SQL Server

  3. Execute o seguinte comando Transact-SQL para alterar o contexto para o banco de dados Vendas na instância mestre.

    USE Sales
    GO
    
  4. Crie uma fonte de dados externos para o pool de dados se ela ainda não existir.

    IF NOT EXISTS(SELECT * FROM sys.external_data_sources WHERE name = 'SqlDataPool')
      CREATE EXTERNAL DATA SOURCE SqlDataPool
      WITH (LOCATION = 'sqldatapool://controller-svc/default');
    
  5. Crie uma tabela externa chamada web_clickstream_clicks_data_pool no pool de dados.

    IF NOT EXISTS(SELECT * FROM sys.external_tables WHERE name = 'web_clickstream_clicks_data_pool')
       CREATE EXTERNAL TABLE [web_clickstream_clicks_data_pool]
       ("wcs_user_sk" BIGINT , "i_category_id" BIGINT , "clicks" BIGINT)
       WITH
       (
          DATA_SOURCE = SqlDataPool,
          DISTRIBUTION = ROUND_ROBIN
       );
    

A criação da tabela externa do pool de dados é uma operação de bloqueio. O controle retorna quando a tabela especificada foi criada em todos os nós do pool de dados do back-end. Se a falha ocorrer durante a operação de criação, uma mensagem de erro será retornada ao chamador.

Carregar dados

As etapas a seguir ingerem exemplos de dados de cliques da Web no pool de dados usando a tabela externa criada nas etapas anteriores.

  1. Use uma instrução INSERT INTO para inserir os resultados da consulta no pool de dados (a tabela externa web_clickstream_clicks_data_pool).

    INSERT INTO web_clickstream_clicks_data_pool
    SELECT wcs_user_sk, i_category_id, COUNT_BIG(*) as clicks
      FROM sales.dbo.web_clickstreams_hdfs
    INNER JOIN sales.dbo.item it ON (wcs_item_sk = i_item_sk
                            AND wcs_user_sk IS NOT NULL)
    GROUP BY wcs_user_sk, i_category_id
    HAVING COUNT_BIG(*) > 100;
    
  2. Inspecione os dados inseridos com duas consultas SELECT.

    SELECT count(*) FROM [dbo].[web_clickstream_clicks_data_pool]
    SELECT TOP 10 * FROM [dbo].[web_clickstream_clicks_data_pool]  
    

Consultar os dados

Una os resultados armazenados da consulta no pool de dados com os dados locais na tabela Vendas.

SELECT TOP (100)
   w.wcs_user_sk,
   SUM( CASE WHEN i.i_category = 'Books' THEN 1 ELSE 0 END) AS book_category_clicks,
   SUM( CASE WHEN w.i_category_id = 1 THEN 1 ELSE 0 END) AS [Home & Kitchen],
   SUM( CASE WHEN w.i_category_id = 2 THEN 1 ELSE 0 END) AS [Music],
   SUM( CASE WHEN w.i_category_id = 3 THEN 1 ELSE 0 END) AS [Books],
   SUM( CASE WHEN w.i_category_id = 4 THEN 1 ELSE 0 END) AS [Clothing & Accessories],
   SUM( CASE WHEN w.i_category_id = 5 THEN 1 ELSE 0 END) AS [Electronics],
   SUM( CASE WHEN w.i_category_id = 6 THEN 1 ELSE 0 END) AS [Tools & Home Improvement],
   SUM( CASE WHEN w.i_category_id = 7 THEN 1 ELSE 0 END) AS [Toys & Games],
   SUM( CASE WHEN w.i_category_id = 8 THEN 1 ELSE 0 END) AS [Movies & TV],
   SUM( CASE WHEN w.i_category_id = 9 THEN 1 ELSE 0 END) AS [Sports & Outdoors]
FROM [dbo].[web_clickstream_clicks_data_pool] as w
INNER JOIN (SELECT DISTINCT i_category_id, i_category FROM item) as i
   ON i.i_category_id = w.i_category_id
GROUP BY w.wcs_user_sk;

Limpar

Use o comando a seguir para remover os objetos de banco de dados criados neste tutorial.

DROP EXTERNAL TABLE [dbo].[web_clickstream_clicks_data_pool];

Próximas etapas

Saiba mais sobre como ingerir dados no pool de dados com trabalhos do Spark: