首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当我在数组中使用带有struct的视图时,单元查询失败。

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

Stack Overflow用户
提问于 2016-11-01 18:45:18
回答 1查看 5.6K关注 0票数 1

我有一个带有结构数组的表:

代码语言:javascript
运行
复制
CREATE TABLE test1(
  key_value array<struct<
    key:string, string_value:string
  >>
 );

填充它:

代码语言:javascript
运行
复制
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“元素(不要问为什么我需要这个:)

代码语言:javascript
运行
复制
CREATE VIEW v_test1 AS
SELECT 
  key_value[2].key
FROM test1;

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

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
$ hive --version
Hive 1.1.0-cdh5.7.2
EN

回答 1

Stack Overflow用户

发布于 2016-11-01 19:42:35

在复制和粘贴代码时,insert overwrite语句没有为我编译。

我跑了:

代码语言:javascript
运行
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40366593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档