应用 SQL 转换

本文介绍 Azure 机器学习设计器的一个组件。

使用“应用 SQL 转换”组件,可以执行以下操作:

  • 创建结果表,并将数据集保存在便携式数据库中。

  • 对数据类型执行自定义转换,或创建聚合。

  • 执行 SQL 查询语句,筛选或更改数据,并以数据表的形式返回查询结果。

重要

此组件中使用的 SQL 引擎是 SQLite。 有关 SQLite 语法的详细信息,请参阅 SQL as Understood by SQLite。 此组件将数据转储到 SQLite(位于内存数据库中),因此此组件执行会需要更多内存,并且可能会遇到 Out of memory 错误。 确保计算机具有足够的 RAM。

如何配置应用 SQL 转换

该组件最多可采用三个数据集作为输入。 引用连接到每个输入端口的数据集时,必须使用名称 t1t2t3。 表编号指示输入端口的索引。

下面是演示如何联接两个表的示例代码。 t1 和 t2 是连接到“应用 SQL 转换”左侧和中间输入端口的两个数据集:

SELECT t1.*
    , t3.Average_Rating
FROM t1 join
    (SELECT placeID
        , AVG(rating) AS Average_Rating
    FROM t2
    GROUP BY placeID
    ) as t3
on t1.placeID = t3.placeID

剩余参数是使用 SQLite 语法的 SQL 查询。 在“SQL 脚本”文本框中键入多行时,请使用分号终止每条语句。 否则,换行符会转换为空格。

此组件支持 SQLite 语法的所有标准语句。 如需了解不支持的语句列表,请参阅技术说明部分。

技术说明

本部分包含实现详情、使用技巧和常见问题解答。

  • 端口 1 上始终需要输入。

  • 对于包含空格或其他特殊字符的列标识符,请在 SELECTWHERE 子句中引用列时,始终将列标识符用方括号或双引号括起来。

  • 如果在应用 SQL 转换之前已使用编辑元数据指定列元数据(分类或字段),则应用 SQL 转换的输出将不包含这些属性。 在应用 SQL 转换后,需要使用编辑元数据来编辑列。

不支持的语句

尽管 SQLite 支持很多 ANSI SQL 标准,但其并不包括商业关系数据库系统支持的许多功能。 有关详细信息,请参阅 SQL as Understood by SQLite。 另外,请在创建 SQL 语句时注意以下限制:

  • SQLite 使用动态类型的值,而不是像在大多数关系数据库系统中的那样将类型分配给列。 它是一种弱类型,并允许隐式转换类型。

  • 实现 LEFT OUTER JOIN,但不实现 RIGHT OUTER JOINFULL OUTER JOIN

  • 你可将 RENAME TABLEADD COLUMN 语句与 ALTER TABLE 命令结合使用,但不支持其他子句,例如 DROP COLUMNALTER COLUMNADD CONSTRAINT

  • 可在 SQLite 中创建“视图”,但之后视图为只读。 不可在视图中执行 DELETEINSERTUPDATE 语句。 但可创建一个触发器,尝试在视图上执行 DELETEINSERTUPDATE,并在触发器主体中执行其他操作。

除了在官方 SQLite 网站上提供不受支持的功能列表,下面的 Wiki 还提供其他不受支持的功能列表:SQLite - 不受支持的 SQL

后续步骤

请参阅 Azure 机器学习可用的组件集