gpt4 book ai didi

sql - 如何在 Hive 中分解数组并创建 View ?

转载 作者:行者123 更新时间:2023-12-04 18:22:56 27 4
gpt4 key购买 nike

我有以下数据,其中 id是一个整数和 vectors是一个数组:

id, vectors
1, [1,2,3]
2, [2,3,4]
3, [3,4,5]

我要爆了 vectors列及其索引定位如下所示:
+---+-----+------+
|id |index|vector|
+---+-----+------+
|1 |0 |1 |
|1 |1 |2 |
|1 |2 |3 |
|2 |0 |2 |
|2 |1 |3 |
|2 |2 |4 |
|3 |0 |3 |
|3 |1 |4 |
|3 |2 |5 |
+---+-----+------+

我想我可以使用 selectExpr 使用 Spark Scala 来做到这一点。
df.selectExpr("*", "posexplode(vectors) as (index, vector)")
但是,这是一项相对简单的任务,我想避免编写 ETL 脚本,并考虑是否可以使用该表达式并创建一个 View 以便通过 Presto 轻松访问。

最佳答案

在 Presto 中使用标准 SQL 语法和 UNNEST 很容易做到这一点。 :

WITH data(id, vector) AS (
VALUES
(1, array[1,2,3]),
(2, array[2,3,4]),
(3, array[3,4,5])
)
SELECT id, index - 1 AS index, value
FROM data, UNNEST(vector) WITH ORDINALITY AS t(value, index)

注意 WITH ORDINALITY 产生的索引是基于 1 的,因此我从中减去 1 以生成您在问题中包含的输出。

关于sql - 如何在 Hive 中分解数组并创建 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56659795/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com