教程:在 SQL Server 大数据群集中查询 HDFS

适用于: SQL Server 2019 (15.x)

重要

Microsoft SQL Server 2019 大数据群集附加产品将停用。 对 SQL Server 2019 大数据群集的支持将于 2025 年 2 月 28 日结束。 具有软件保障的 SQL Server 2019 的所有现有用户都将在平台上获得完全支持,在此之前,该软件将继续通过 SQL Server 累积更新进行维护。 有关详细信息,请参阅公告博客文章Microsoft SQL Server 平台上的大数据选项

本教程演示如何在 SQL Server 2019 大数据群集 中查询 HDFS 数据。

在本教程中,你将了解如何执行以下操作:

  • 创建指向大数据群集中 HDFS 数据的外部表。
  • 将此数据与主实例中的高值数据联接起来。

提示

如果需要,可以下载并运行本教程中的命令脚本。 有关说明,请参阅 GitHub 上的数据虚拟化示例

这段 7 分钟的视频将引导你逐步了解在大数据集群中查询 HDFS 数据的步骤:

先决条件

为 HDFS 创建外部表

存储池包含存储在 HDFS 中的 CSV 文件中的 Web 点击流数据。 使用以下步骤定义可访问该文件中的数据的外部表。

  1. 在 Azure Data Studio 中,连接到大数据群集的 SQL Server 主实例。 有关详细信息,请参阅连接到 SQL Server 主实例

  2. 双击“服务器”窗口中的连接,以显示 SQL Server 主实例的服务器仪表板 。 选择“新建查询” 。

    SQL Server 主实例查询

  3. 运行以下 Transact-SQL 命令,将上下文更改为主实例中的 Sales 数据库。

    USE Sales
    GO
    
  4. 定义从 HDFS 读取的 CSV 文件格式。 按 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
    

查询数据

运行以下查询,将 web_clickstream_hdfs 外部表中的 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。