Поделиться через


Руководство по запросу HDFS в кластере больших данных SQL Server

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

Important

Кластеры больших данных Microsoft SQL Server 2019 прекращены. Поддержка кластеров больших данных SQL Server 2019 закончилась с 28 февраля 2025 г. Дополнительные сведения см. в записи блога объявлений и параметрах больших данных на платформе Microsoft SQL Server.

В этом руководстве показано, как запрашивать данные HDFS в кластерах больших данных SQL Server 2019.

В этом руководстве вы узнаете, как:

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

Tip

Если вы предпочитаете, вы можете скачать и запустить скрипт для команд, приведенных в этом руководстве. Инструкции см. в примерах виртуализации данных на сайте GitHub.

В этом 7-минутном видео показано, как запрашивать данные HDFS в кластере больших данных:

Prerequisites

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

Пул хранения содержит данные веб-кликстрима в CSV-файле, который хранится в HDFS. Чтобы определить внешнюю таблицу, которая может получить доступ к данным в этом файле, выполните следующие действия.

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

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

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

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

    USE Sales
    GO
    
  4. Определите формат CSV-файла для чтения из HDFS. Нажмите клавишу F5, чтобы запустить инструкцию.

    CREATE EXTERNAL FILE FORMAT csv_file
    WITH (
        FORMAT_TYPE = DELIMITEDTEXT,
        FORMAT_OPTIONS(
            FIELD_TERMINATOR = ',',
            STRING_DELIMITER = '"',
            FIRST_ROW = 2,
            USE_TYPE_DEFAULT = TRUE)
    );
    
  5. Создайте внешний источник данных в пуле носителей, если он еще не существует.

    IF NOT EXISTS(SELECT * FROM sys.external_data_sources WHERE name = 'SqlStoragePool')
    BEGIN
      CREATE EXTERNAL DATA SOURCE SqlStoragePool
      WITH (LOCATION = 'sqlhdfs://controller-svc/default');
    END
    
  6. Создайте внешнюю таблицу, которая может считывать из /clickstream_data пула хранения. SqlStoragePool доступен из главного экземпляра кластера больших данных.

    CREATE EXTERNAL TABLE [web_clickstreams_hdfs]
    ("wcs_click_date_sk" BIGINT , "wcs_click_time_sk" BIGINT , "wcs_sales_sk" BIGINT , "wcs_item_sk" BIGINT , "wcs_web_page_sk" BIGINT , "wcs_user_sk" BIGINT)
    WITH
    (
        DATA_SOURCE = SqlStoragePool,
        LOCATION = '/clickstream_data',
        FILE_FORMAT = csv_file
    );
    GO
    

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

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

SELECT  
    wcs_user_sk,
    SUM( CASE WHEN i_category = 'Books' THEN 1 ELSE 0 END) AS book_category_clicks,
    SUM( CASE WHEN i_category_id = 1 THEN 1 ELSE 0 END) AS [Home & Kitchen],
    SUM( CASE WHEN i_category_id = 2 THEN 1 ELSE 0 END) AS [Music],
    SUM( CASE WHEN i_category_id = 3 THEN 1 ELSE 0 END) AS [Books],
    SUM( CASE WHEN i_category_id = 4 THEN 1 ELSE 0 END) AS [Clothing & Accessories],
    SUM( CASE WHEN i_category_id = 5 THEN 1 ELSE 0 END) AS [Electronics],
    SUM( CASE WHEN i_category_id = 6 THEN 1 ELSE 0 END) AS [Tools & Home Improvement],
    SUM( CASE WHEN i_category_id = 7 THEN 1 ELSE 0 END) AS [Toys & Games],
    SUM( CASE WHEN i_category_id = 8 THEN 1 ELSE 0 END) AS [Movies & TV],
    SUM( CASE WHEN i_category_id = 9 THEN 1 ELSE 0 END) AS [Sports & Outdoors]
  FROM [dbo].[web_clickstreams_hdfs]
  INNER JOIN item it ON (wcs_item_sk = i_item_sk
                        AND wcs_user_sk IS NOT NULL)
GROUP BY  wcs_user_sk;
GO

Clean up

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

DROP EXTERNAL TABLE [dbo].[web_clickstreams_hdfs];
GO

Next steps

Перейдите к следующей статье, чтобы узнать, как запрашивать Oracle из кластера больших данных.