在 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的学习点滴

数据湖引擎-dremio-白话数据架构

dremio ClusterCoordinator 服务简单说明

Dremio: 将 Minio 配置为分布式存储

使用 FLATTEN 的 SQL 调用导致“错误:查询执行期间超出资源”

Dremio: 为 Tableau Desktop 配置 Dremio 连接器