Sql 是否通过配置单元(HQL)将行值转换为列键?
我有一个大数据库,有些值是用复杂类型格式化的。例如,“sat”列键的格式如下:Sql 是否通过配置单元(HQL)将行值转换为列键?,sql,database,hive,Sql,Database,Hive,我有一个大数据库,有些值是用复杂类型格式化的。例如,“sat”列键的格式如下: id sat 5 'a:100, b:200' 6 'b:300, c:150' 7 'some_other_unknown_key:900' 我想按照下面的格式转换表,并做一些额外的统计 id a b c some_other_unknown_key 5 100 200 null null 6 null
id sat
5 'a:100, b:200'
6 'b:300, c:150'
7 'some_other_unknown_key:900'
我想按照下面的格式转换表,并做一些额外的统计
id a b c some_other_unknown_key
5 100 200 null null
6 null 300 150 null
7 null null null 900
有没有办法不通过HQL创建新表就可以做到这一点?使用
REGXP\u EXTRACT
select id, regexp_extract(foo,'a:([0-9]+)',1) as a,
regexp_extract(foo,'b:([0-9]+)',1) as b,
regexp_extract(foo,'c:([0-9]+)',1) as c from t;
此外,您还可以尝试将字符串转换为有效的JSON(添加双引号和大括号),然后使用JSON_元组提取列,但无论如何,您应该知道列名并在查询中列出它们,配置单元无法动态选择列 演示: 结果:
OK
id a b c some_other_unknown_key
5 100 200 NULL NULL
6 NULL 300 150 NULL
7 NULL NULL NULL 900
Time taken: 0.128 seconds, Fetched: 3 row(s)
如果数据中包含一些未在查询中列出的密钥,则不会提取这些密钥。根据行为准则,请勿在问题末尾添加“谢谢”。您使用的是哪种数据库管理系统?Oracle、MySQL、SQL Server?我对DBMS不太清楚。其他人设置了它,并提供了一个我可以运行HQL查询的web前端。他们叫它蜂巢,谢谢。它可以解决我的大部分问题。如果‘a’、‘b’、‘c’是一个随机值,而我在查询之前不知道它到底是什么呢?@oliver:你要找的是动态枢轴。没有直接的方法可以做到这一点。在运行查询之前,必须使用另一种过程语言/脚本(Java/Shell脚本)动态构造查询,就像上面的一样。更好的方法是更改表设计,单独或使用json存储值,因为列sat看起来接近json。
OK
id a b c some_other_unknown_key
5 100 200 NULL NULL
6 NULL 300 150 NULL
7 NULL NULL NULL 900
Time taken: 0.128 seconds, Fetched: 3 row(s)