Руководство по Прием данных в пул данных SQL Server с помощью Transact-SQL

Область применения: SQL Server 2019 (15.x)

Важно!

Поддержка надстройки "Кластеры больших данных" Microsoft SQL Server 2019 будет прекращена. Мы прекратим поддержку Кластеров больших данных SQL Server 2019 28 февраля 2025 г. Все существующие пользователи SQL Server 2019 с Software Assurance будут полностью поддерживаться на платформе, а программное обеспечение будет по-прежнему поддерживаться с помощью SQL Server накопительных обновлений до этого времени. Дополнительные сведения см. в записи блога объявлений и в статье о параметрах больших данных на платформе Microsoft SQL Server.

В этом учебнике описывается, как использовать Transact-SQL для загрузки данных в пул данныхКластеры больших данных SQL Server 2019. С Кластеры больших данных SQL Server данные из самых разных источников могут приниматься и распределяться между экземплярами пула данных.

В этом руководстве описано следующее:

  • Создание внешней таблицы в пуле данных.
  • Вставка примера с данными о посещениях веб-страниц в таблицу пула данных.
  • Объединение данных в таблице пула данных с локальными таблицами.

Совет

При необходимости вы можете скачать и выполнить скрипт, содержащий команды из этого руководства. См. инструкции в разделе Примеры пулов данных на сайте GitHub.

Предварительные требования

Создание внешней таблицы в пуле данных

Выполните следующие действия, чтобы создать внешнюю таблицу с именем web_clickstream_clicks_data_pool в пуле данных. В дальнейшем эта таблица может использоваться для приема данных в кластер больших данных.

  1. В Azure Data Studio установите подключение к главному экземпляру SQL Server в кластере больших данных. Дополнительные сведения см. в разделе Подключение к главному экземпляру SQL Server.

  2. Дважды щелкните подключение в окне Серверы, чтобы открыть панель мониторинга сервера для главного экземпляра SQL Server. Выберите Создать запрос.

    Запрос главного экземпляра SQL Server

  3. Выполните следующую команду Transact-SQL, чтобы изменить контекст на базу данных Sales в главном экземпляре.

    USE Sales
    GO
    
  4. Создайте внешний источник данных для пула данных, если это не было сделано ранее.

    IF NOT EXISTS(SELECT * FROM sys.external_data_sources WHERE name = 'SqlDataPool')
      CREATE EXTERNAL DATA SOURCE SqlDataPool
      WITH (LOCATION = 'sqldatapool://controller-svc/default');
    
  5. Создайте внешнюю таблицу с именем web_clickstream_clicks_data_pool в пуле данных.

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

Создание внешней таблицы пула данных является блокирующей операцией. Управление возвращается лишь после создания указанной таблицы на всех узлах пула данных серверной части. Если во время операции создания произойдет ошибка, сообщение о ней возвращается вызывающей стороне.

Загрузка данных

Выполните следующие действия, чтобы принять данные о посещениях веб-страниц в пул данных с использованием внешней таблицы, созданной на предыдущих шагах.

  1. Используйте инструкцию INSERT INTO для вставки результатов запроса в пул данных (внешняя таблица 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. Проверьте вставленные данные с помощью двух запросов SELECT.

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

Запрос данных

Объедините сохраненные результаты запроса в пуле данных с локальными данными в таблице Sales.

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;

Очистка

Выполните следующую команду, чтобы удалить объекты базы данных, созданные в рамках этого руководства.

DROP EXTERNAL TABLE [dbo].[web_clickstream_clicks_data_pool];

Дальнейшие действия

Сведения о приеме данных в пул данных с помощью заданий Spark: