参考加入Azure Stream Analytics中的组合键

问题描述

我正在尝试根据组合键上的参考表过滤数据。我从根本上找到了一个似乎可行的解决方案:

    SELECT 
        i.id,i.timestamp,i.PropertyName,i.PropertyValue
    FROM iothub AS i
    LEFT JOIN Reference AS R
    ON CONCAT(i.id,'|','i.PropertyName) = R.uid
    WHERE R.keepIt = 1

但是,如果执行此操作,则会收到警告,我的查询包含一个没有键选择器的JOIN,它将被转换为CROSS JOIN。

Warning emitted by Azure

我测试了该方法,它似乎可以产生正确的结果,但是恐怕以后可能通过CROSS JOIN产生副作用。还是我可以忽略此Azure警告,因为它不适用于我的情况?

解决方法

CONCAT(i.id,'|','i.PropertyName) = R.uid不是键选择器,因为等式的左侧是表达式而不是列引用。 因此,这将被转换为CROSS JOIN,并按照警告提示的顺序过滤。

这是一个警告,并不影响结果的功能正确性。

您可以在进行引用数据联接之前将表达式投影为一列,然后将其作为正确的键查找联接。这是您的示例查询的样子:

    SELECT 
        i.id,i.timestamp,i.PropertyName,i.PropertyValue
    FROM (SELECT id,timestamp,PropertyName,PropertyValue,uid = CONCAT(id,PropertyName)
          FROM iothub) AS i
      LEFT JOIN Reference AS R
        ON i.uid = R.uid
    WHERE R.keepIt = 1

当然,也可以将子选择置于单独的步骤中。