gpt4 book ai didi

sql - 具有动态列数的 Hive 表

转载 作者:可可西里 更新时间:2023-11-01 16:32:05 35 4
gpt4 key购买 nike

TestTable
inputsCOLUMN
3-300-150-150-R
3-200-100-100-A
5-500-00-500-A


output
3_open 3_spent 3_closing 3_type 5_open 5_spent 5_closing 5_type
-------- --------- ----------- -------- -------- --------- ----------- --------
300 150 150 R 500 00 500 A
200 100 100 A

上面是名为 TestTable 的输入表。它有两列包含数据行(字符串)并且有一个所需的输出表,其列名基于输入字符串。列名是字符串中的第一个数字 + 另一个字符串名称,如 CONCAT(split(inputsCOLUMN,'\\-')[0],'-','type')

这样输出就是想要的输出。并且当我尝试连接我认为不允许的别名时,由于该部分,下面的查询无法正常工作。如果有办法找到所需的输出,请帮助我。

SELECT split(inputsCOLUMN,'\\-')[1] as CONCAT(split(inputsCOLUMN,'\\-')[0],'-','open'),
split(inputsCOLUMN,'\\-')[2] as CONCAT(split(inputsCOLUMN,'\\-')[0],'-','spent'),
split(inputsCOLUMN,'\\-')[3] as CONCAT(split(inputsCOLUMN,'\\-')[0],'-','closing'),
split(inputsCOLUMN,'\\-')[4] as CONCAT(split(inputsCOLUMN,'\\-')[0],'-','type')

最佳答案

Hive 不能有动态的列数,也不能有动态的列名。它必须能够在查询计划时确定整个架构(列数、类型和名称),而无需查看任何数据。

我也不清楚您是如何将输入记录准确匹配到一行中的。例如,你怎么知道哪条“3”记录对应哪条“5”记录。

如果您知道,例如,总会有一个“3”记录和一个“5”记录,并且您可以 promise 这些是唯一的列名,并且如果您有一种一致的方式来匹配记录“扁平化”这些数据,那么它是可能的,但很难。我以前几乎完成过这个确切的操作,它涉及一个自定义 UDTF 和一个自定义 UDAF,以及一些自动生成实际查询的代码,在某些情况下最终长达数百行。我会重新评估您最初为什么要这样做,看看您是否可以想出另一种方法。

关于sql - 具有动态列数的 Hive 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26038277/

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