Azure 流分析中组合键的引用联接

Posted

技术标签:

【中文标题】Azure 流分析中组合键的引用联接【英文标题】:Reference join on a combined key in Azure Stream Analytics 【发布时间】: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 警告,因为它不适用于我的情况?

【问题讨论】:

【参考方案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 流分析中有效吗?因为它似乎不适用于我的环境

以上是关于Azure 流分析中组合键的引用联接的主要内容,如果未能解决你的问题,请参考以下文章

外键可以引用具有复合(即两列的组合)键的表吗?

sql中创建组合主键和组合外键

Redshift Dist 键、IDentity 列或连接列?列的基数,用于排序键的联接考虑

Selenium WebDriver 中鼠标和键盘事件分析及扩展

具有重复键的对象列表将字段组合到逗号列表中

在这种复杂情况下,如何解决 Django 缺少组合键的问题?