问题描述
我在通过 Dremio 公开的镶木地板文件中有许多行,例如:
id | 数据 |
---|---|
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).
解决方法
A).
您可能需要通过嵌套数组在数据中包含索引。例如,如果原始数据是 [ [0,1.5],[1,8.5],[2,23.004] ]
,那么 flatten 将返回三行,每个数据都有一个数组,该数组的第一个元素是索引,第二个元素是您实际想要的数据值。
B).
SQL 数据集没有隐式顺序,而是明确无序的。排序的属性只存在于创建可以从中导出排序的列之后。