【问题标题】:Reference join on a combined key in Azure Stream AnalyticsAzure 流分析中组合键的引用联接
【发布时间】:2020-10-07 14:59:22
【问题描述】:

我正在尝试根据组合键上的引用表过滤数据。我确实找到了一个似乎可行的解决方案:

    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。

我测试了这个方法,它似乎得到了正确的结果,但我担心以后通过可能的 CROSS JOIN 可能会产生副作用。或者我可以忽略这个 Azure 警告,因为它不适用于我的情况?

【问题讨论】:

    标签: azure join azure-stream-analytics


    【解决方案1】:

    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
    

    当然,子选择也可以放在单独的步骤中。

    【讨论】:

    • 您确定 SELECT FROM (SELECT) 语法在 Azure 流分析中有效吗?因为它似乎不适用于我的环境
    猜你喜欢
    • 1970-01-01
    • 2017-01-21
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多