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


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

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

Это важно

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

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

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

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

Подсказка

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

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

Предпосылки

Создание внешней таблицы в 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

Очистка

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

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

Дальнейшие шаги

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