Sql 具有动态列数的配置单元表

Sql 具有动态列数的配置单元表,sql,hadoop,hive,analytics,bigdata,Sql,Hadoop,Hive,Analytics,Bigdata,上面是名为TestTable的输入表。它有两列,其中包含数据行(字符串) 还有一个所需的输出表,其列名基于输入字符串。 列名是字符串上的第一个数字+另一个字符串名,如CONCAT(split(inputsCOLUMN,\\\-')[0],'-','type') 因此,输出是所需的输出。下面的查询无法按预期工作,因为当我尝试连接别名时,我认为这是不允许的。因此,如果有什么方法可以找到所需的输出,请帮助我 TestTable inputsCOLUMN 3-300-150-150-R

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

因此,输出是所需的输出。下面的查询无法按预期工作,因为当我尝试连接别名时,我认为这是不允许的。因此,如果有什么方法可以找到所需的输出,请帮助我

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

配置单元不能具有动态列数,也不能具有动态列名。它必须能够在查询计划时确定整个模式(列计数、类型和名称),而不查看任何数据

我也不清楚如何将输入记录匹配到一行中。例如,您如何知道哪个“3”记录对应于哪个“5”记录


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

我试图操纵alias,使其包含ID,但失败请重新构造问题正确的答案库Joe,为清楚起见,请尝试检查我的查询语句,它准确地显示了我想要的,并且再次显示了问题所在。我的主要问题是将ID从数据连接到字符串以生成别名,但UDTF和UDAF只能更改行数而不能更改列数。
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')