我正在尝试将数据插入到我创建的配置单元中的表中。我一直在努力,所以我尽量简化它,以找到问题的根源。
下面是我创建基本表的简化代码。我基本上有一个单一元素的结构数组。
DROP TABLE IF EXISTS foo.S_FILE_PA_JOB_DATA_T;
CREATE TABLE foo.S_FILE_PA_JOB_DATA_T
PARTITIONED BY (customer_id string)
STORED AS AVRO
TBLPROPERTIES (
'avro.schema.literal'=
'{
"namespace": "com.foo.oozie.foo",
"name": "S_FILE_PA_JOB_DATA_T",
"type": "record",
"fields":
[
{"name":"pa_hwm" ,"type":{
"type":"array",
"items":{
"type":"record",
"name":"pa_hwm_record",
"fields":
[
{"name":"pa_axis" ,"type":["int","null"]}
]
}
}}
]
}');
我的问题是我搞不懂要插入到表中的语法。
insert into table foo.s_FILE_PA_JOB_DATA_T partition (customer_id) values (0,'a390c1cf-4ee5-4ab9-b7a3-73f5f268b669')
这个 0
需要成为一个 array<struct<int>>
但我不懂语法。有人能帮忙吗?谢谢!
1条答案
按热度按时间ymdaylpp1#
不幸的是,你不能直接这么做。另请参见配置单元向数组复杂类型列插入值。
从理论上讲,你应该可以用
也就是说,使用
array()
以及named_struct()
UDF将根据一些标量值分别构造一个数组和一个结构(请参见此处的自定义项文档:https://cwiki.apache.org/confluence/display/hive/languagemanual+udf#languagemanualudf-复杂类型构造函数但不幸的是如果你这么做你会
因为不幸的是,hive不支持在
VALUES
条款还没有。正如其他帖子所建议的,您可以使用一个虚拟表来实现它,这有点难看,但是很有效。