mysql_request 插件(预览)

mysql_request 插件将 SQL 查询发送到 MySQL Server 网络终结点,并返回结果中的第一个行集。 此查询可能返回多个行集,但只有第一个行集可用于 Kusto 查询的其余部分。

该插件通过 evaluate 运算符调用。

重要

mysql_request 插件默认已禁用。 若要启用此插件,请运行 .enable plugin mysql_request 命令。 若要查看启用了哪些插件,请使用 .show plugin 管理命令

语法

evaluatemysql_request(ConnectionString,SqlQuery [,SqlParameters] ) [:OutputSchema]

参数

名称 类型 必须 描述
ConnectionString 字符串 表示指向 MySQL Server 网络终结点的连接字符串。 请了解身份验证以及指定网络终结点的方法。
SqlQuery 字符串 表示要对 SQL 终结点执行的查询。 必须返回一个或多个行集,但只有第一个行集可用于查询的其余部分。
SqlParameters 动态 保存作为参数随查询传递的键值对。
OutputSchema mysql_request 插件输出的所需列的名称和类型。

语法:(ColumnName:ColumnType [, ...] )

指定所需架构可以优化查询执行,因为无需首先运行实际查询即可浏览架构。 如果运行时架构与 OutputSchema 架构不匹配,则会引发错误。

设置标注策略

该插件会对 MySql 数据库进行标注。 请确保群集的标注策略允许对目标 MySqlDbUri 进行 mysql 类型的调用。

以下示例演示如何为 MySQL 数据库定义标注策略。 建议将标注策略限制为特定的终结点(my_endpoint1my_endpoint2)。

[
  {
    "CalloutType": "mysql",
    "CalloutUriRegex": "my_endpoint1\\.mysql\\.database\\.azure\\.com",
    "CanCall": true
  },
  {
    "CalloutType": "mysql",
    "CalloutUriRegex": "my_endpoint2\\.mysql\\.database\\.azure\\.com",
    "CanCall": true
  }
]

以下示例演示了针对 mysqlCalloutType 的 .alter callout policy 命令:

.alter cluster policy callout @'[{"CalloutType": "mysql", "CalloutUriRegex": "\\.mysql\\.database\\.azure\\.com", "CanCall": true}]'

用户名和密码身份验证

mysql_request 插件仅支持向 MySQL 服务器终结点进行用户名和密码身份验证,未与 Azure Active Directory 身份验证集成。

用户名和密码是通过以下参数作为连接字符串的一部分提供的:

User ID=...; Password=...;

警告

应该对连接字符串和查询中的机密信息或受保护信息进行模糊处理,使其在任何 Kusto 跟踪中都被忽略。 有关详细信息,请参阅经过模糊处理的字符串文本

加密和服务器验证

出于安全考虑,连接到 MySQL 服务器网络终结点时,SslMode 会无条件地设置为 Required。 因此,必须为服务器配置有效的 SSL/TLS 服务器证书。

指定网络终结点

将 MySQL 网络终结点指定为连接字符串的一部分。

语法

Server=FQDN [Port=Port]

其中:

  • FQDN 是终结点的完全限定域名。
  • Port 是终结点的 TCP 端口。 默认为 3306

示例

向 Azure MySQL DB 进行的 SQL 查询

以下示例向 Azure MySQL 数据库发送 SQL 查询。 它从 [dbo].[Table] 检索所有记录,然后处理结果。

注意

不应将此示例作为以这种方式筛选或投影数据的建议。 SQL 查询应当构造为尽可能返回最小的数据集,因为 Kusto 优化器当前不会尝试优化 Kusto 与 SQL 之间的查询。

evaluate mysql_request(
    'Server=contoso.mysql.database.chinacloudapi.cn; Port = 3306;'
    'Database=Fabrikam;'
    h'UID=USERNAME;'
    h'Pwd=PASSWORD;',
    'select * from [dbo].[Table]')
| where Id > 0
| project Name

使用用户名和密码进行身份验证

以下示例与前一示例相同,但使用用户名和密码执行身份验证。 出于保密考虑,此处使用了经过模糊处理的字符串。

evaluate mysql_request(
    'Server=contoso.mysql.database.chinacloudapi.cn; Port = 3306;'
    'Database=Fabrikam;'
    h'UID=USERNAME;'
    h'Pwd=PASSWORD;',
    'select * from [dbo].[Table]')
| where Id > 0
| project Name

经过修改的对 Azure MySQL 数据库执行的 SQL 查询

以下示例向 Azure MySQL 数据库发送一个 SQL 查询,以便从 [dbo].[Table] 中检索所有记录,同时追加另一个 datetime 列,然后在 Kusto 端处理结果。 它指定要在 SQL 查询中使用的 SQL 参数 (@param0)。

evaluate mysql_request(
    'Server=contoso.mysql.database.chinacloudapi.cn; Port = 3306;'
    'Database=Fabrikam;'
    h'UID=USERNAME;'
    h'Pwd=PASSWORD;',
    'select *, @param0 as dt from [dbo].[Table]',
    dynamic({'param0': datetime(2020-01-01 16:47:26.7423305)}))
| where Id > 0
| project Name

具有查询定义的输出架构的 SQL 查询

以下示例将一个 SQL 查询发送到 Azure MySQL 数据库,用于从 [dbo].[Table] 检索所有记录,同时仅选择特定的列。 该示例使用显式架构定义,以便在针对服务器运行实际查询之前可以评估各种优化措施。

evaluate mysql_request(
  'Server=contoso.mysql.database.chinacloudapi.cn; Posvsrt = 3306;'
     'Database=Fabrikam;'
    h'UID=USERNAME;'
    h'Pwd=PASSWORD;',
  'select Id, Name') : (Id:long, Name:string)
| where Id > 0
| project Name

Azure Monitor 不支持此功能。