Hive编程笔记:集合数据类型

Posted 吴混山

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive编程笔记:集合数据类型相关的知识,希望对你有一定的参考价值。

CREATE TABLE employees (

    name STRING,

    salary FLOAT,

    subordinates ARRAY<STRING>,

    deductions MAP<STRING, FLOAT>,

    address STRUCT<street:STRING, city:STRING, state:STRING>);


ARRAY: 具有相同类型和名称的变量的集合,每个元素有个编号,从0开始。


SELECT * FROM employee WHERE subordinates[0] = 'Bob';

SELECT empname FROM employees 

    lateral view explode(subordinates) subordinates as empname;

--explode将数组拆分成行

--lateral view来实现聚合成列呈现


MAP: 一组key-value对元组集合,使用数组表示,可访问元素。Hive中没有键的概念,但可以对表建立索引。


SELECT deductions['Insurance'] from employees;

SELECT * FROM employees WHERE deductions['Insurance'] = 0.1;


STRUCT: 可通过 ' . ' 点符号访问元素内容,升级版MAP,可以混合多种不同的数据类型;一旦声明好结构,其位置不可再改变。


SELECT address.street FROM employees GROUP BY address.street;

SELECT * FROM employees WHERE address.street = 'bagayalu';

----

内部表和外部表

删除表后:

    内部表元数据和表数据都被删除;

    外部表仅删除了元数据,表数据还保存在目录下。外部表使用场景如,原始日志文件;同时被多部门操作的数据集,若不小心删了元数据,HDFS上可回复,安全性高。

----

不建议插入大量数据时用insert,因其产生临时表,重新连接后会消失。

----

大多数关系型数据库并不支持这些集合数据类型,因为它们可能会破坏标准格式,如传统数据模型中,struct可能需要多个表拼装而成,表间或需使用外键进行连接。

破坏标准格式可能带来增大数据冗余的风险,导致消耗不必要的磁盘空间,以及因数据改变而冗余的拷贝数据无法同步所造成的数据不一致。

但不遵循数据标准的一个好处是可提供更高吞吐量的数据,按数据集进行封装可以通过减少寻址次数可提高查询速度。(还不太懂)

以上是关于Hive编程笔记:集合数据类型的主要内容,如果未能解决你的问题,请参考以下文章

函数式编程 读书笔记

shell脚本编程学习笔记-shell数组

Java学习笔记系列-基础篇-集合

python学习笔记6:面向对象

python学习笔记-面向对象基础

PYTHON学习笔记-DAY-6