在 Azure 流分析查询中重用子查询的结果

Posted

技术标签:

【中文标题】在 Azure 流分析查询中重用子查询的结果【英文标题】:Reuse the result from subquery in Azure Stream Analytics Query 【发布时间】:2017-11-29 15:41:08 【问题描述】:

我正在使用 Azure 流分析,但在查询部分遇到了一些问题。这是我的代码。

WITH subquery as (
    SELECT 
    messageId,
    deviceId,
    temperature, 
    humidity,
    EventProcessedUtcTime,
    DemoML(temperature, humidity) as result1
    from DemoInput
    )

SELECT
    messageId as messageId,
    deviceId as deviceId,
    temperature as temperature,
    humidity as humidity,
    EventProcessedUtcTime as EventProcessedUtcTime,
    result1.[Scored Labels] as result,
    result1.[Scored Probabilities] as resultProbability
INTO
    [DemoOutput]
FROM
    [subquery]


SELECT
    result1
INTO
    [c2d]
FROM
    [subquery] 

DemoML 是一个返回结果的函数。我想将 result1 放入两个不同的输出中。但我只设法将 result1 放入一个输出中。我怎样才能做到这一点?我对 SQL 完全陌生。

【问题讨论】:

【参考方案1】:

您可以使用INSERT ... OUTPUT ... INTO ... SELECT 插入两次:

WITH subquery as (
    SELECT 
    messageId,
    deviceId,
    temperature, 
    humidity,
    EventProcessedUtcTime,
    DemoML(temperature, humidity) as result1
    from DemoInput
    )
INSERT INTO target_1(col1,...)
OUTPUT inserted.col1, ...
INTO target_2(col1, ..)
SELECT
    messageId as messageId,
    deviceId as deviceId,
    temperature as temperature,
    humidity as humidity,
    EventProcessedUtcTime as EventProcessedUtcTime,
    result1.[Scored Labels] as result,
    result1.[Scored Probabilities] as resultProbability
FROM  [subquery];

简化:

CREATE TABLE t1(i INT);
CREATE TABLE t2(i INT);
CREATE TABLE src(i INT);
INSERT INTO src(i) VALUES(10),(20);

INSERT INTO t1(i)                 -- target one
OUTPUT inserted.i
INTO t2(i)                        -- target two
SELECT i
FROM src;

DBFiddle Demo

【讨论】:

在这种情况下,我是否将相同的数据放入两个不同的目标? @SamTew 是的,只需检查演示链接,但如果需要,您可以操作列列表。 如果我想把两组不同的数据放到两个表中怎么办? @SamTew 然后你可以使用INSERT over DML 语法。你原来的问题已经解决了。 @SamTew 我在这里看到的唯一区别是 Azure ML 调用。您是否对它进行了独立测试以确保它返回一些值?

以上是关于在 Azure 流分析查询中重用子查询的结果的主要内容,如果未能解决你的问题,请参考以下文章

在 Azure 流分析查询中同时使用数组和记录类型

在 Azure 中运行的流分析查询中的语法问题:列名无效:“有效负载”

使用流分析作业查询从 EventHub 中过滤 Azure 事件

如何在 Azure 流分析查询中检查 null Json 属性?

Azure 流分析作业 - 转换查询 - ARM 模板中的正确格式

如何在运行 Azure 流分析查询时获取系统时间