如何在Azure Synapse分析中进行仪器化查询

1,494 阅读6分钟

本文将介绍如何对Azure Synapse Analytics的专用SQL池上执行的查询进行分析。

简介

交易型数据库、分析型数据库和数据仓库通过使用查询来满足数据请求。所有这些数据存储库都会记录查询和与查询执行有关的指标,这有助于性能工程团队调试和优化查询执行的性能。虽然查询执行的指标可以被监控和分析,但查询的目的有时并不明显。数据分析师和支持人员经常对不同的数据库对象进行临时性的查询。在受管制的行业中,人们可能需要证明对机密客户数据进行查询的目的。这些查询的目的不能仅仅通过查看查询的结构或结果集来得出。如果系统或执行查询的人员能明确说明查询的意图,那么就会更容易确定在数据库或数据上执行的具体查询类型。

数据仓库通常作为各种下游应用的中央存储库,如报告和仪表盘、机器学习工作负载、数据科学家的临时分析、数据分析师等等。因此,相对而言,在数据仓库上执行各种查询的概率要高得多,而且大多数此类查询往往是临时性的。在这样的环境下,要理解针对数据仓库中几十到几百个数据库对象中的大量数据执行的各种查询的目的就变得更加困难。Azure Synapse是微软在Azure云上提供的数据仓库。Azure Synapse集成了各种基于Azure的服务,对专用SQL池上执行的查询进行分析的能力,对了解在数据仓库上执行的查询的目的非常有用。让我们继续看看在Azure Synapse中是如何做到这一点的。

在Azure Synapse中使用查询标签

Azure Synapse支持一个被称为 "查询标签 "的概念,允许标记在专用SQL池上执行的任何DDL或DML查询。这些标签可以使用动态管理视图(DMVs)进行查询。人们可以使用这些标签来描述查询的目的,或者为正在执行的查询添加任何元数据,同样的标签可以在以后用于查询的工具化,特别是用于识别符合所需搜索标准的查询。让我们通过一个循序渐进的练习来实际理解这个概念。

首先,我们需要在Azure云账户上创建一个Azure Synapse Analytics工作区实例。假设这个实例已经到位了。Azure Synapse支持三种类型的池--无服务器池、专用SQL池和Spark池,但查询标签只支持专用SQL池。因此,需要至少创建一个具有最小容量的SQL池来执行这个练习。创建一个专用SQL池,并导航到专用SQL池的仪表板。从专用SQL池的仪表板上,捕捉池的主机端点,并使用安装在本地机器上的SQL Server Management Studio连接到这个端点。一旦建立了这种连接,就可以在Azure Synapse的专用SQL池上执行所需的查询。确保SSMS成功连接到专用SQL池,如下图所示。

image.png

让我们看看在创建或修改数据库对象时如何在DDL查询中使用标签的例子之一。比方说,我们打算通过使用CREATE TABLE AS命令从另一个表中创建一个表。通常情况下,当人们看一个表的定义时,将无法识别该表是从另一个表创建的。如果我们在执行DDL语句时指定标签,说明该表是由另一个表创建的,那么我们就可以使用该标签来分析所有使用CTAS的DDL语句。

如下图所示,在这里我们使用CREATE TABLE DDL语句从现有的名为Address的表中创建一个新表。在Azure Synapse中使用CTAS命令时,我们需要强制指定一个分布键,所以我们使用分布选项指定了同样的内容。在指定了表的定义后,我们使用选择查询从不同的表中选择了所有的字段,我们可以使用表选项指定标签,如下图最后一行所示。一旦这个查询被执行,它将导致创建一个名为sampletable的新表,并且查询将以指定的标签被记录。

image.png

现在,让我们说,我们打算找到所有被执行的DDL查询,并将 "CTAS from Address "作为标签。我们可以使用sys模式下名为dm_pdw_exec_requests的动态管理视图。这个视图返回所有的执行请求,它包含一个名为标签的特定字段,我们可以用它来过滤感兴趣的查询。如下图所示,我们可以查询这个视图,用我们标记的标签找到我们刚刚执行的查询。

image.png

假设我们打算执行一个DML查询,我们打算查询所有可用的表,这些表可以用来创建新表。一个简单的方法是通过查询sys.tables视图来实现。假设安全策略要求需要指定查询系统视图、表和其他数据库对象的原因,我们可以在查询中标记一个标签,指定执行这个查询的目的。如下图所示,我们正在查询sys.tables视图,并使用表选项标签,指定我们查询的目的是检查CTAS的候选表。执行这个查询,我们应该能够查看所有的表,并且这个查询将被记录在指定的标签上。

image.png

现在我们已经执行了这个查询,假设我们打算找到所有在标签中以CTAS为关键词的查询。我们不打算找一个完全匹配的,因为我们不能预测每个查询的标签的确切文本。但是,只要文本中包含关键字 "CTAS",我们就打算找出所有这样的查询,无论它是一个DDL还是一个DML查询。我们可以查询我们之前查询过的同一个视图,但这次是使用类似操作符,如下图所示。这个查询检索了我们在这个练习中执行的所有查询,以及任何在标签中使用关键字 "CTAS "的旧查询。

image.png

这样一来,使用查询标签,就可以很容易地将标签形式的文本元数据添加到在Azure Synapse的专用SQL池上执行的查询中,以掌握查询情况。由不同角色的用户执行的应用程序、API、微服务、临时查询,可以使用查询标签为他们执行的查询指定上下文,管理员随后可以对其进行分析,以了解用户和应用程序的数据使用模式。

总结

在这篇文章中,我们通过使用指标和查询标签了解了查询工具的概念,并理解了两者的区别。然后我们在Azure Synapse分析集群上工作,该集群有一个专门的SQL池。我们学习了如何将查询标签添加到DDL和DML查询中,以及如何根据查询标签的任何过滤标准来检索查询。