教程:在 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 数据的步骤:
先决条件
- 大数据工具
- kubectl
- Azure Data Studio
- SQL Server 2019 扩展
- 将示例数据加载到大数据群集中
为 HDFS 创建外部表
存储池包含存储在 HDFS 中的 CSV 文件中的 Web 点击流数据。 使用以下步骤定义可访问该文件中的数据的外部表。
在 Azure Data Studio 中,连接到大数据群集的 SQL Server 主实例。 有关详细信息,请参阅连接到 SQL Server 主实例。
双击“服务器”窗口中的连接,以显示 SQL Server 主实例的服务器仪表板 。 选择“新建查询” 。
运行以下 Transact-SQL 命令,将上下文更改为主实例中的 Sales 数据库。
USE Sales GO
定义从 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) );
如果尚未创建存储池的外部数据源,请创建该数据源。
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
创建可以从存储池读取
/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。