gpt4 book ai didi

sql - 在 Hive 中正确使用结构体

转载 作者:行者123 更新时间:2023-12-04 15:42:07 27 4
gpt4 key购买 nike

我想使用一个包含字符串和数组的结构。字符串表示服务的名称,而数组列出了执行该服务的公司 ID。

我知道我可以创建并插入到结构体中,如下所示:

CREATE TABLE struct_test
(
property_id INT,
service STRUCT<
type: STRING
,provider: ARRAY<INT>
>
);

INSERT INTO TABLE struct_test
SELECT 989, NAMED_STRUCT('type','Cleaning','provider', ARRAY(587, 887)) AS address
FROM tmp LIMIT 1;

这给了我以下内容:
>{"type":"Cleaning","provider":[587,887]}

但是,我想考虑同一属性上的多种服务类型。我的 service 怎么可能有不止一种类型结构?

理想情况下,我希望实现类似于以下内容的内容:

{"type":"Cleaning","provider":[587,887]}, {"type":"Pricing","provider":[932]}, {"type":"Security","provider":[187,577,946]}



通过这种方式,我可以在列中存储多个服务以及提供该服务的提供者。这个模型可以使用结构来实现吗?

最佳答案

这可以通过 array<struct<type: STRING, provider: ARRAY<INT>>> 实现

创建表:

CREATE TABLE struct_test
(
property_id INT,
service array<STRUCT<
type: STRING
,provider: ARRAY<INT>
>>
);

插入数据:
with 
test_data as(
SELECT 989 property_id, array(NAMED_STRUCT('type','Cleaning','provider', ARRAY(587, 887)),
NAMED_STRUCT('type','Pricing','provider', ARRAY(932))
) as service
)

INSERT INTO TABLE struct_test
select * from test_data;

检查数据:
select t.property_id, t.service from struct_test t;

结果:
OK
property_id service
989 [{"type":"Cleaning","provider":[587,887]},{"type":"Pricing","provider":[932]}]
Time taken: 0.064 seconds, Fetched: 1 row(s)

如果您想在选择中收集结构数组而不是硬编码值,请参阅此答案: https://stackoverflow.com/a/48175749/2700344

对于如此复杂的数据类型,您肯定需要 brickhouse图书馆

关于sql - 在 Hive 中正确使用结构体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57491644/

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