Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 是否通过配置单元(HQL)将行值转换为列键?_Sql_Database_Hive - Fatal编程技术网

Sql 是否通过配置单元(HQL)将行值转换为列键?

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

我有一个大数据库,有些值是用复杂类型格式化的。例如,“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    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)