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

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

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

  1. CREATE TABLE test1(
  2. key_value array<struct<
  3. key:string, string_value:string
  4. >>
  5. );

填充它:

  1. INSERT OVERWRITE TABLE test1
  2. SELECT array(
  3. named_struct('key','key0', 'string_value','some string 0'),
  4. named_struct('key','key1', 'string_value','some string 1'),
  5. named_struct('key','key2', 'string_value','some string 2'),
  6. named_struct('key','key3', 'string_value','some string 3')
  7. );

然后,我针对该表创建了一个视图,可以直接访问数组中第二个元素struct的“key”元素(不要问我为什么需要这个:)

  1. CREATE VIEW v_test1 AS
  2. SELECT
  3. key_value[2].key
  4. FROM test1;

当我查询这个视图时,我得到一个错误:

  1. hive> SELECT * from v_test1;
  2. FAILED: SemanticException Line 0:-1 . Operator is only supported on struct or list of struct types 'key' in definition of VIEW v_test1 [
  3. SELECT
  4. null.`key`
  5. FROM `default`.`test1`
  6. ] used as v_test1 at Line 1:14

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

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

az31mfrm1#

复制和粘贴代码时 insert overwrite 这句话不适合我。
我跑了:

  1. create table test1 as
  2. SELECT array(
  3. named_struct('key','key0', 'string_value','some string 0'),
  4. named_struct('key','key1', 'string_value','some string 1'),
  5. named_struct('key','key2', 'string_value','some string 2'),
  6. named_struct('key','key3', 'string_value','some string 3')
  7. ) as key_value;

以及 select * from v_test1 按预期工作 key2 ).
当我用一个较短的数组填充表时-我得到了 NULL .
我正在使用hive版本1.2.1

相关问题