当我在数组中使用带有struct的视图时,配置单元查询失败

oogrdqng  于 2021-06-28  发布在  Hive
关注(0)|答案(1)|浏览(317)

我有一个带有struct数组的表:

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

如您所见,由于某些原因,表达式键\u值[2]。键被转换为null。key
为什么会发生这种情况?我该如何解决?非常感谢!
升级版本:

$ hive --version
Hive 1.1.0-cdh5.7.2
az31mfrm

az31mfrm1#

复制和粘贴代码时 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

相关问题