我有一个带有结构数组的表:
CREATE TABLE test1(
key_value array<struct<
key:string, string_value:string
>>
);
填充它:
INSERT OVERWRITE TABLE test1
SELECT array(
named_struct('key','key0', 'string_value','some string 0'),
named_struct('key','key1', 'string_value','some string 1'),
named_struct('key','key2', 'string_value','some string 2'),
named_struct('key','key3', 'string_value','some string 3')
);
然后,我根据该表创建了一个视图,直接访问数组中的第二个元素中的struct的"key“元素(不要问为什么我需要这个:)
CREATE VIEW v_test1 AS
SELECT
key_value[2].key
FROM test1;
当我查询该视图时,会得到一个错误:
hive> SELECT * from v_test1;
FAILED: SemanticException Line 0:-1 . Operator is only supported on struct or list of struct types 'key' in definition of VIEW v_test1 [
SELECT
null.`key`
FROM `default`.`test1`
] used as v_test1 at Line 1:14
如您所见,由于某种原因,表达式key_value2.key被转换为null.key
。
为什么会发生这种事,我怎么才能解决呢?非常感谢!
UPD:
$ hive --version
Hive 1.1.0-cdh5.7.2
发布于 2016-11-01 19:42:35
在复制和粘贴代码时,insert overwrite
语句没有为我编译。
我跑了:
create table test1 as
SELECT array(
named_struct('key','key0', 'string_value','some string 0'),
named_struct('key','key1', 'string_value','some string 1'),
named_struct('key','key2', 'string_value','some string 2'),
named_struct('key','key3', 'string_value','some string 3')
) as key_value;
select * from v_test1
如预期的那样工作(得到了key2
)。
当我用更短的数组填充表时,我得到了NULL
。
我使用的是hive版本1.2.1
https://stackoverflow.com/questions/40366593
复制相似问题