在 Dremio 查询中使用 FLATTEN 时,有没有办法包含元素索引?
Posted
技术标签:
【中文标题】在 Dremio 查询中使用 FLATTEN 时,有没有办法包含元素索引?【英文标题】:Is there a way to include element index when using FLATTEN in a Dremio query? 【发布时间】:2021-07-10 12:27:38 【问题描述】:我在通过 Dremio 公开的镶木地板文件中有许多行,例如:
id | data |
---|---|
1 | [1.5,8.5,23.004] |
2 | [0.3,4.44, 2.59] |
我想要实现的是一个查询,它将展平数组但给我一个明确的索引,以便我知道哪一行与数组中的哪个元素相关。我需要这个的原因是因为我有另一个等效表,其中“数据”值表示需要查询并应用于原始数据的调整值。
我正在寻找的是这样的结果:
id | data_element | idx |
---|---|---|
1 | 1.5 | 0 |
1 | 8.5 | 1 |
1 | 23.004 | 2 |
2 | 0.3 | 0 |
2 | 4.44 | 1 |
2 | 2.59 | 2 |
看起来这需要某种窗口函数,例如 ROW_NUMBER() OVER(...),但是虽然 Dremio 中提供了窗口函数,但我无法让它工作。
有谁知道: a) 展平时可以引用数组元素的索引吗? b) 使用 flatten 时返回的顺序总是保证和原数组中的顺序一致?
如果 b) 为真,那么我真的不需要担心 a)。
【问题讨论】:
您可能需要在数据中包含索引,可能是通过嵌套数组。例如,如果原始数据是[ [0, 1.5] , [1, 8.5] , [2, 23.004] ]
,那么 flatten
将返回三行,每个数据都包含一个数组,该数组的第一个元素是索引,第二个元素是您实际想要的数据值。
这可能很好用,谢谢。你碰巧也知道 B) 的答案吗?
SQL 数据集没有隐式顺序,而是明确无序。排序的属性只存在于创建可以从中派生排序的列之后。
【参考方案1】:
A)。
您可能需要在数据中包含索引,可能是通过嵌套数组。例如,如果原始数据是 [ [0, 1.5] , [1, 8.5] , [2, 23.004] ]
,则 flatten 将返回三行,每个数据都包含一个数组,该数组的第一个元素是索引,第二个元素是您实际需要的数据值。
B)。
SQL 数据集没有隐式顺序,而是显式无序。排序的属性只存在于创建可以从中派生排序的列之后。
【讨论】:
以上是关于在 Dremio 查询中使用 FLATTEN 时,有没有办法包含元素索引?的主要内容,如果未能解决你的问题,请参考以下文章
dremio ClusterCoordinator 服务简单说明