gpt4 book ai didi

hadoop - Hive 解析和编辑数组以构造字段

转载 作者:可可西里 更新时间:2023-11-01 16:28:13 27 4
gpt4 key购买 nike

我有一个 Hive 复杂数据结构的要求,我是新手。我尝试了一些没有成功的事情。我想知道是否有解决方案,或者我正在寻找死胡同。要求 :Table1 和 Table2 具有相同的创建语法。我想从 table1 中选择所有列并将其插入到 table2 中,其中将修改很少的列值。对于结构字段,我可以使用 named_struct 使其工作。但是如果 table1 有 array> 类型,那么我不确定如何让它工作。

例如,

CREATE TABLE IF NOT EXISTS table1 (
ID INT,
XYZ array<STRUCT<X:DOUBLE, Y:DOUBLE, Z:DOUBLE>>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '$'
MAP KEYS TERMINATED BY '#' ;

CREATE TABLE IF NOT EXISTS table2 (
ID INT,
XYZ array<STRUCT<X:DOUBLE, Y:DOUBLE, Z:DOUBLE>>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '$'
MAP KEYS TERMINATED BY '#' ;

hive> select * from table1 ;
OK
1 [{"x":1,"y":2,"z":3},{"x":4,"y":5,"z":6},{"x":7,"y":8,"z":9}]
2 [{"x":4,"y":5,"z":6},{"x":7,"y":8,"z":9}]

如何在插入时更新数组中的结构字段。假设如果 structField y 是 5,那么我希望它作为 0 插入。

最佳答案

对于复杂类型结构,您可以使用 Brickhouse UDF。下载 jar 并将其添加到您的脚本中。

add jar hdfs://path_where_jars_are_downloaded/brickhouse-0.6.0.jar

创建一个收集函数。

create temporary function collect_arrayofstructs as 'brickhouse.udf.collect.CollectUDAF';

查询:将y值替换为0

select ID, collect_arrayofstructs( 
named_struct(
"x", x,
"y", 0,
"z", z,
)) as XYZ
from table1;

关于hadoop - Hive 解析和编辑数组以构造字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50988497/

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