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

标签 sql apache-spark hive presto

我有以下数据,其中 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/

相关文章:

sql - 转换 json 字段的输入

java - 阅读 Apache Spark 中的多行 JSON 文件后,如何获取嵌套属性作为列?

hadoop - msck修复触发器表统计信息吗

hive - 如何更改现有 Hive 表中的列注释而不包含新的列名称和类型?

sql - "Data Load"或 "ETL"的工具——从 SQL Server 到 Amazon Redshift

php - 更改PHP插入MySQL数据库的日期格式

MYSQL根据不同条件对列进行分组查询

java - Spark + Java - 从数据集中获取结果

python - pyspark mongoDB 连接器问题

hadoop - 比较 Hive 中的文本