Hive之HiveQL数据定义

【导读:数据是二十一世纪的石油,蕴含巨大价值,这是·情报通·大数据技术系列第[20]篇文章,欢迎阅读和收藏】

1基本概念

HiveQL 是 Hive 的查询语言,和 MySQL 方言很接近,但有显著差异,比如 Hive 不支持行级插入、更新、删除操作,不支持事务。

HiveQL 的数据定义语言,主要是指创建、修改、删除数据库、表、视图、函数和索引的语句,本章节主要涉及数据库和表。

2术语解释

Hive 的数据库

概念本质上指示表的一个目录或命名空间,对于有很多组、用户的大集群来说,可以避免表名重复。Hive 会为每个数据库创建一个目录,位于属性 hive.metastore.warehouse.dir 所指定的顶层目录之后,目录名为数据库名 .db (只有 default 数据库例外, default 本身没有自己的目录)。

管理表 / 内部表

管理表,也称内部表,由 Hive 控制着数据的生命周期,每个表存储在以数据库目录的子目录下( default 数据库例外,表目录直接位于属性 hive.metastore.warehouse.dir 所指定的顶层目录之后)。删除管理表时, Hive 也会删除表中数据。但是管理表不方便和其他工作共享数据。如果用户开启了 Hadoop 回收站(默认关闭), Hive 删除的管理表数据会被转移到用户在 HDFS 中的 /user/$USER/.Trash 下,如果用户误删管理表,可以先重建表,然后重建所需分区,再从 .Trash 目录将文件移动到正确目录重新存储数据。

外部表

数据由其他工具创建并主要使用,或者会被多个工具共享,同时还想用 Hive 在这份数据上执行一些查询,但 Hive 对该数据没有所有权时,可以在 Hive 创建一个外部表指向这份数据。Hive 删除该表并不会删除数据,只是删除了描述表的 metadata 。此外,有些 HiveQL 语法结构不适用于外部表。

分区( Partition )与内部分区表

通过分区可以水平分散压力,将数据从物理上转移到更接近频繁使用用户的位置。分区表具有重要的性能优势,还可以将数据按符合逻辑的形式组织,比如分层存储。分区是按分区字段顺序来进行的,分区后的表数据分别存放在表目录下名为“字段名 key= 字段值 value ”的子目录。分区字段一旦创建好,跟普通字段一样,一般用户如果不是需要优化 sql 性能,不需要关心字段是否是分区字段。

分区过滤器

在 WHERE 子句中增加按照分区值过滤的谓词。

Strict 严格 /nonstrict 非严格模式

如果表数据和分区数都很大,查询包含所有分区可能会触发巨大的 MapReduce 任务,如果将 Hive 设置为 strict 严格模式, WHERE 子句如果不加分区过滤,任务将禁止提交;反之则允许。

外部分区表

外部表也可以分区,实际上这是管理大型生产数据集最常见的情况,可以按照分层目录结构组织数据。Hive 不关心分区目录是否存在或分区目录下是否有文件,如果没有,那么对这个过滤分区的查询就没结果;用户可以在其他进程开始写数据前就先创建好分区。不管用户将旧数据转移到存档位置还是直接删除,新数据被篡改的风险都降低了。使用外部分区表的优点是逻辑数据管理、高性能的查询等。

表的存储格式:内置格式

Hive 默认存储格式是文本文件格式,也可以通过可选的子句 STORED AS TEXTFILE 显示指定,用户也可指定分隔符。Hive 支持的其他内置文件格式还包括 SEQUENCEFILE 、 RCFILE ,这两种都是用二进制编码和压缩(可选)来优化磁盘空间使用和 IO 带宽性能的。

自定义格式:输入 / 输出格式及 SerDe

Hive 用 inputformat 对象(例如 TEXTFILE 用的是 org.apache.hadoop.mapred.TextInputFormat 类)将输入流分割成记录,然后用 outputformat 对象(例如 TEXTFILE 用的是 org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat 类)将记录格式化为输出流(例如查询的输出结果),再用序列化 / 反序列化器(缩写 SerDe ,例如 TEXTFILE 用的是 org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe )在读数据时将记录解析成列、写数据时将列编码为记录。用户可自定义第三方输入输出格式及 SerDe 。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191221A0E1ME00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券