适用于:SQL 分析终结点和 Microsoft Fabric 中的数据仓库✅
Fabric 数据仓库中的数据聚类分析可组织数据,以提高查询性能和减少计算使用量。 本教程逐步讲解如何使用数据聚类分析创建表,从创建聚集表到检查其有效性。
先决条件
- 具有有效订阅的 Microsoft Fabric 租户帐户。
- 确保你具有已启用 Microsoft Fabric 的工作区:创建工作区。
- 请确保已创建仓库。 若要创建新仓库,请参阅 在 Microsoft Fabric 中创建仓库。
- 基本了解 T-SQL 和查询数据。
导入示例数据
本教程使用 NY 出租车示例数据集。 将 NY 出租车数据导入仓库。 使用 “将示例数据加载到数据仓库”教程 教程。
创建带有数据聚类的表
对于本教程,我们需要 NYTaxi 表的两个副本:从教程导入的表的常规副本,以及使用数据聚类分析的副本。 使用以下命令根据原始 NYTaxi 表使用 CREATE TABLE AS SELECT (CTAS) 创建新表:
CREATE TABLE nyctlc_With_DataClustering
WITH (CLUSTER BY (lpepPickupDatetime))
AS SELECT * FROM nyctlc
注释
本示例假定“加载示例数据到数据仓库”教程中向 NY 出租车数据集提供的表名称。 如果您为表使用了不同的名称,请调整命令,将 nyctlc 替换为您的表名称。
此命令会创建原始 NYTaxi 表的确切副本,但在 lpepPickupDatetime 列上进行数据聚类。 接下来,我们将使用此列进行查询。
查询数据
对 NYTaxi 表运行查询,并在NYTaxi_With_DataClustering表上重复相同的查询以进行比较。
注释
对于该分析,最好查看两次运行在冷缓存状态下的性能,即不使用 Fabric 数据仓库的缓存功能。 因此,在查看 Query Insights 中的结果之前,请完全运行每个查询一次。
我们使用在仓库中经常重复的查询语句。 此查询计算2008-12-31和2014-06-30之间每年的平均票价金额:
SELECT
YEAR(lpepPickupDatetime),
AVG(fareAmount) as [Average Fare]
FROM
NYTaxi
WHERE
lpepPickupDatetime BETWEEN '2008-12-31' AND '2014-06-30'
GROUP BY
YEAR(lpepPickupDatetime)
ORDER BY
YEAR(lpepPickupDatetime) DESC
OPTION (LABEL = 'Regular');
注释
在将此查询中使用的标签选项与以后通过Query Insights 视图使用数据集群分析的表的Regular查询详细信息进行比较时,此标签选项非常有用。
接下来,我们将重复相同的查询,但在使用数据聚类分析的表版本上:
SELECT
YEAR(lpepPickupDatetime),
AVG(fareAmount) as [Average Fare]
FROM
NYTaxi_With_DataClustering
WHERE
lpepPickupDatetime BETWEEN '2008-12-31' AND '2014-06-30'
GROUP BY
YEAR(lpepPickupDatetime)
ORDER BY
YEAR(lpepPickupDatetime) DESC
OPTION (LABEL = 'Clustered');
第二个查询使用标签 Clustered 来允许我们稍后使用 Query Insights 标识此查询。
检查数据聚类分析的有效性
设置群集后,可以使用 Query Insights 评估其有效性。 Fabric 数据仓库中的 Query Insights 捕获历史查询执行数据,并将其聚合为可作的见解,例如识别长时间运行的或频繁执行的查询。
在这种情况下,我们使用 Query Insights 来比较在常规事例和聚集事例之间扫描的数据差异。
使用以下查询:
SELECT
label,
submit_time,
row_count,
total_elapsed_time_ms,
allocated_cpu_time_ms,
result_cache_hit,
data_scanned_disk_mb,
data_scanned_memory_mb,
data_scanned_remote_storage_mb,
command
FROM
queryinsights.exec_requests_history
WHERE
command LIKE '%NYTaxi%'
AND label IN ('Regular','Clustered')
ORDER BY
submit_time DESC;
此查询从 exec_requests_history 视图中提取详细信息。 有关详细信息,请参阅queryinsights.exec_requests_history(Transact-SQL)。
查询按以下方式筛选结果:
- 仅提取包含
NYTaxi命令名称中的文本的行(如测试查询中使用的) - 仅提取那些标签值为常规或聚集的行
注释
查询详细信息可能需要几分钟才能在 Query Insights 中可用。 如果 Query Insights 查询未返回任何结果,请在几分钟后重试。
运行此查询时,我们观察到以下结果:
这两个查询的行计数为 6,提交时间相似。 查询 Clustered 显示 total_elapsed_time_ms 1794、 allocated_cpu_time_ms 1676 和 data_scanned_remote_storage_mb 77.519。 查询 Regular 显示 total_elapsed_time_ms 2651、 allocated_cpu_time_ms 2600 和 data_scanned_remote_storage_mb 177.700。 这些数字表明,尽管这两个查询都返回了相同的结果,但 Clustered 版本使用的 CPU 时间比 Regular 版本少约 36%,扫描的磁盘上数据量少约 56%。 在任一查询运行中均未使用缓存。 这些是有助于减少查询执行时间和资源消耗的显著结果,并使 lpepPickupDatetime 列成为数据聚类的强候选项。
注释
这是一个小表,包含大约 7600 万行和 2GB 的数据量。 尽管此查询在其聚合中只返回 6 行(一行用于该范围内的每年),但在聚合结果之前提供的日期范围内扫描大约 830 万行。 具有较大数据量的实际生产数据可以提供更显著的结果。 结果可能因查询期间的容量大小、缓存结果或并发而异。