我将从一个例子开始来帮助阐明我的需求。
我有一张table叫 schema1.base_tbl
包含一个名为 col_nm_1
样本数据如下:
col_nm_1
abc1234
abc5678
def1234
我创建了另一个名为 schema1.tbl_dv1
像这样:
CREATE TABLE schema1.tbl_dv1 row format delimited fields terminated by '|' stored as textfile as
SELECT
struct(col_nm_1)
FROM schema1.base_tbl;
查询时的表结果 select * from schema1.tbl_dv1
```
c0
{"col1":"abc1234"}
{"col1":"abc5678"}
{"col1":"def1234"}
我创建了另一个表,这次是一个外部表来获取数据 `schema1.tbl_dv1` :
CREATE EXTERNAL TABLE IF NOT EXISTS schema1.tbl_dv2
(col_data string)
row format delimited fields terminated by '|' stored as textfile
LOCATION
'maprfs:/data/tbl_dv2';
INSERT INTO schema1.tbl_dv1(col_data) SELECT c0 FROM schema1.tbl_dv1;
查询时的表结果 `select * from schema1.tbl_dv2` ```
col_data
abc1234
abc5678
def1234
这不是我期望的结果。我想要的结果应该包含struct data type创建的所有标记,即expect result:
col_data
{"col1":"abc1234"}
{"col1":"abc5678"}
{"col1":"def1234"}
在目录中查看配置单元的部件文件时,它也应该与上面的结果类似。
我知道这涉及到配置单元字符串类型和配置单元结构类型,我想知道是否有任何方法可以转换查询包含插入到字符串类型的所有标记的结构类型列的结果?
2条答案
按热度按时间tez616oj1#
您可以使用brickhouse第三方配置单元udf将struct转换为json字符串。是的
to_json
函数,可以将任何复杂类型转换为json字符串。首先,克隆并构建jar:然后将brickhouse jar复制到hdfs并将jar添加到hive中:
注册
to_json
Hive中的自定义项现在你可以用它了,例如。,
toe950272#
在stackoverflow中搜索,我发现这可能是解决方案:
它保留了结构标记。