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 流分析中组合键的引用联接的主要内容,如果未能解决你的问题,请参考以下文章
Redshift Dist 键、IDentity 列或连接列?列的基数,用于排序键的联接考虑