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编程笔记:集合数据类型的主要内容,如果未能解决你的问题,请参考以下文章