如何在 hive 中创建一个空的结构数组?

2024-04-23

我有一个观点Hive 1.1.0,根据条件,它应该返回一个空数组或一个数组struct<name: string, jobslots: int>

这是我的代码:

select
      case when <condition> 
             then array()
           else array(struct(t1.name, t1.jobslots))
       end
from table t1;

这里的问题是,空数组array()属于类型array<string>。因此,当我尝试将其插入表中时,它会抛出错误。

如何更改它以返回类型的空数组array<struct<name: string, jobslots:int>>以便Hive's size()函数在此数组上返回 0?


你可以使用collect_list or colect_set为了收集从连接中获取的结构数组,并且连接条件为 false,则collect_list 将生成一个空的结构数组。

此查询返回大小为 0 的数组:

select a.id, size(collect_list(b.str))=0 array_size_zero
from
(select 2 id ) a
  left join (select 1 as id, named_struct('name',null,'value',null) as str) b
            on a.id=b.id
group by a.id

Result:

a.id    array_size_zero
2       true

如果您更改第一个子查询 a 中的 id 以与 b 连接,它将返回包含 1 个元素的数组。而且这些结果是同一类型的,您可以使用 union all 轻松检查。

检查结果是同一类型:

select a.id, collect_list(b.str) my_array
from
(select 1 id ) a
  left join (select 1 as id, named_struct('name',null,'value',null) as str) b
            on a.id=b.id
group by a.id

union all

select a.id, collect_list(b.str) my_array
from
(select 2 id ) a
  left join (select 1 as id, named_struct('name',null,'value',null) as str) b
            on a.id=b.id
group by a.id  

Result:

id  my_array
1   [{"name":null,"value":null}]
2   []

如果我尝试将不同类型的结构的所有空数组联合起来,例如 array(),会发生什么:

select 1 id, array() my_array

union all

select a.id, collect_list(b.str) my_array
from
(select 2 id ) a
  left join (select 1 as id, named_struct('name',null,'value',null) as str) b
            on a.id=b.id
group by a.id

例外:

编译语句时出错:FAILED: SemanticException Schema of 联合的两边都应该匹配:列 my_array 的类型 第一个表上的数组和类型 第二个表上的 array。无法告诉 空 AST 的位置。

这表明第一个查询确实返回了空的结构数组。 您可以轻松地在查询中执行类似的连接。

如何在带条件的查询中使用它? 演示:

select a.id, case when true --Put your condition here instead of dummy <true> 
                     then collect_list(a.str) --not empty
                  else collect_list(b.str) --this one is empty array of the same type
              end as my_array
from
(select 2 id, named_struct('name',null,'value',null) str) a
  left join (select 1 as id, named_struct('name',null,'value',null) as str) b
            on FALSE
group by a.id

CASE 表达式非常满意,并且不会引发有关不兼容类型的异常

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 hive 中创建一个空的结构数组? 的相关文章

  • 在 Transact SQL 中何时使用 EXCEPT 而不是 NOT EXISTS?

    我最近刚刚通过阅读同事编写的代码了解到 SQL Server 中存在新的 EXCEPT 子句 有点晚了 我知道 真的让我很惊讶 但是我对它的使用有一些疑问 建议什么时候使用它 使用它与使用 AND NOT EXISTS 的相关查询在性能方面
  • 使用 forEach 映射对象数组的 Object.entries 返回未定义,除非使用 console.log

    我有一个具有键值对的对象数组 我想在每个对象中找到特定的键并返回值 数组的示例 filterCounties StateName Delaware CountyName Kent FIPS 10001 Eligibles 2017 3329
  • 有用的库存 SQL 数据集吗?

    有谁知道有哪些资源可以提供优质 有用的股票数据集 例如 我下载了一个包含美国所有州 城市和邮政编码的 SQL 脚本 这在最近的一个应用程序中节省了我很多时间 我希望能够按地理位置进行查找 你们中有人知道其他可以免费下载的有用数据集吗 例如
  • 优化Python:大数组、内存问题

    我在运行 python numypy 代码时遇到速度问题 我不知道如何让它更快 也许其他人 假设有一个表面有两个三角剖分 一个是细三角剖分 fine 有 M 个点 一个是粗剖分 有 N 个点 此外 还有每个点的粗网格数据 N 个浮点数 我正
  • 如何使用 jq 对可能不存在的数组进行排序?

    给定以下 JSON alice items foo bar bob items bar foo charlie items foo bar 我可以排序items数组如下 jq lt users json map items sort ite
  • 在 JavaScript 中,将 NodeList 转换为数组的最佳方法是什么?

    DOM 方法document querySelectorAll 和其他一些 返回一个NodeList 对列表进行操作 例如使用forEach the NodeList必须首先转换为Array 转换的最佳方式是什么NodeList to an
  • 制作一个未知大小的数组 C# [重复]

    这个问题在这里已经有答案了 可能的重复 C 中未知长度的数组 https stackoverflow com questions 599369 array of an unknown length in c sharp 我想创建一个程序 用
  • jsonb 与 jsonb[] 对于客户的多个地址

    在 PostgreSQL 的 jsonb 字段中保存多个地址是个好主意 我是 nosql 新手 我想测试 PostgreSQL 来做到这一点 我不想有另一个包含地址的表 我更喜欢将其放在同一个表中 但我有疑问 我见过PostreSQL有js
  • 从有序结果集中查找“运行”行

    我试图找出一种方法来识别满足某些条件的 运行 结果 按顺序连续行 目前 我正在订购结果集 并通过眼睛扫描特定模式 这是一个例子 SELECT the date name FROM orders WHERE the date BETWEEN
  • 从另一列计算出的列?

    给出下表 id value 1 6 2 70 有没有办法添加根据同一个表中的另一列自动计算的列 与 VIEW 类似 但属于同一个表的一部分 举个例子 calculated将是一半value Calculated应该会自动更新value变化
  • 使用多个小数点 (.) 对 Oracle 中的记录进行排序

    UPDATE 甲骨文版本10G 我有一个记录列表Oracle如下 这些其实是各种书籍的章节记录按以下格式生成 主主题 子主题 第一级部分 最后级部分 Sections 1 7 1 6 2 7 1 7 4 6 8 3 6 8 2 10 1 1
  • 列表项未正确删除(React)

    如果我的笔记应用程序能提供一些帮助 我将不胜感激 假设我的笔记列表中有 3 个笔记 我想删除列表顶部的注释 无论我尝试删除哪一个 总是首先删除列表最底部的注释 我检查了 React 控制台 应用程序组件状态中的注释数组表明它已正确删除 但从
  • C 中有数组大小/长度的快捷方式吗?

    有什么方法可以加快 C 中获取数组大小的速度吗 打字sizeof array sizeof int 每次都会变老 有没有 C 库有类似的东西 length或者有什么方法我可以定义sizeof array sizeof int 作为某种较短的
  • sql 查询查找匹配属性

    我目前正在做一个类似易货系统的系统 情况是这样的 客户 Jasmine 要求输入 NAME 属性 她需要寻找的内容 并输入 SEEK 属性 她需要寻找的内容 为了获得结果 SEEK 属性必须与其他客户的 Name 属性匹配 其他客户的 SE
  • R 将 data.frame 转换为 json

    我正在尝试将 data frame 转换为 json 格式 我的 data frame 具有以下结构 a lt rep c Mario Luigi each 3 b lt sample 34 57 size length a df lt d
  • Python,将CSV文件转换为SQL表

    我有一个没有标题的 CSV 文件 并尝试从文件中的某些列创建 SQL 表 我尝试了这里给出的解决方案 使用 Python 将 CSV 文件导入 sqlite3 数据库表 https stackoverflow com questions 2
  • Spark 上的 Hive 2.1.1 - 我应该使用哪个版本的 Spark

    我在跑蜂巢2 1 1 Ubuntu 16 04 上的 hadoop 2 7 3 根据Hive on Spark 入门 https cwiki apache org confluence display Hive Hive on Spark
  • 在 C 中初始化结构体的静态数组

    我正在用 C 实现一个纸牌游戏 纸牌有很多种类型 每种纸牌都有大量信息 包括一些需要单独编写与其关联的脚本的操作 给定这样的结构 并且我不确定我的语法是否适合函数指针 struct CARD int value int cost This
  • C# 泛型中的通配符等效项

    假设我有一个通用类 如下所示 public class GeneralPropertyMap
  • 在另一个数组的每隔一个元素之后插入一个数组中的元素(一次一个)(不均匀拉链)

    合并两个数组的优雅方法是什么 使得生成的数组具有第一个数组中的两个项目 后跟第二个数组中的单个项目 以这种方式重复 array1 A1 A2 A3 A4 A5 potentially longer array2 B1 B2 B3 B4 B5

随机推荐