赣州新闻网

首页 / 科技

Apache Hive简介

2020-04-13 · 赣州新闻网 · 科技

Hive和SQL编码新手指南

Apache Hive简介

> Image credit — Confusedcoders.com


Apache Hive通常被称为建立在Apache HadA k # P x ^ Voop之上的数据仓库基础架构。 最初由Facebook开发,每天查询大约20TB的数据,目前,程序员可使用它对存储在文件系统(例如HDFS(Hadoop分布式框架系统0 u & D v x S C))中的大型数据集进行临` b G时查询和分析,而无需了解地图的详细信息 -减少。 Hive最好的部分是Hive引擎将查询隐式转换为有效的链映射减少任务。

Hive的功能:

支持不同的存储类型,例如纯{ - C N & E D ] 8文本,csv,Apache Hbase等

数据建模,例如创建数据库,表等

易于编码; 使用称L k w I为HiveQL的类似SQL的查询D _ c 4语言

ETL功能,例如将数据提取,转换和将数据加载到与联接,分区等结合在一8 [ 6 1 y ^ b起的表中。

包含内置的用户定义函数(UDF)以操纵日期,字符串和其^ u ^ Z他数据挖掘工具

无论布局如何,非结构化数据均以数据形式显示为表格

自s ( 2 I ) N定义映射器,Reduc4 [ n L @ q rer和UDF的插件功能

Hadoop上的增强查询

Hive的用例:

文本挖掘-使用map-reduce覆盖和分析具有方便结构的非结构化数据

文档索引编制—将标签分配给多个文档,以便于恢复

业务查询-查询` f n J大量历史数据以获得可行的见解,例如 交易记录,付款记录,客户数据库等

日志处理-处理各种类型的日志文件,例如呼叫日志,We} ( ) C ]b日志,机器日志等。

Hive中的编码

我们将使用一个称为\"事务\"的表来查看如何在0 D c i M z 7Hive中查询数据。 交易表包含属性ID,项目和销售。

这是任何编程语言的一些最佳编码实践。

Hive中的DDL命令

DDL是数据定义语言(Data DeD W 2 4finition Language)的简称,它处理数据库模式和描述,以及如何将数据保# 4 } m 3 0 : d p留在数据库中。 一些常见的例子是

建立表格

创建表-CREATE TABLE transaction(id INT, item STRING, sales FLOAT);

对表进行分区- CREATE TABLE transaction(id INT, ite~ 1 3 x a Sm STRING, sa7 ^ g L 8 J E 8 `les FLOAT) R] - o q ` TOW FORMAT DELIMITED FIELDS TERMINATED BY ‘\\001’ STORED AS TEXTFILE LOCATION <HDFS path name>;

删除表格

DROP TABLE transaction;

修改表

ALTER TABLE transaction RENAME TO transaction_front_of_stores;F ~ D 5 [ s h

添加列— ALTER TABLE transaction ADD COLUMNS (customer_name STRING);

显示表

SHOW& V q D 7 O U Z TABLES;

描述表

DESCRIBE transaction;

DEY | / l z 4SCRIBE EXTENDED transaction;

HIVE中的DML命令

DML是处理数据操作的数据操作语言的简称,包括最常用的SQL语句,例如SELECF ; _ dT,INSERT,UPDATE,DELETE等。它主要用于存储,修改,检m H B S索,删除和更u H H S N (新数据。 数据库。

加载数l 3 Z N : 据中

从外部文件加载数据— LOAD DATA LOCAL INPATH “<file_path>” INTO TABLE <table name>;

LOAD DATA LOCAL INPb ` | h lATH “/C I h O Y E 9 Ydocuments/datasets/transcation.cI { s & q d J ` csv” INTO TABLE transaction;

从单独的表写入数据集-INSERT OVERWRITE TABLE transaction SELECT id, item, date, volume FROM transaction_updated;

选择声明

select语句用于从数据库表中获取数据。 主要用于查看记录,选择所需的字段元素,获取不同的值以及显示来自任何过滤器,限制或按操作分组的结果。

要从事务表中获取所有记录:

SELECT * FROM TransactioY f d G n @n;v 6 , O l

要从交易表中获取不同的交易ID:

SELECT DISTINCT ID FROM Transaction;

限制声明

与Select语句一起使用以限制编码器要查看G L ~ w c l的行数。 任何交易数据库都包含大量数据,这意味着选择每一行都将导致更长的处理时间。

SELECT * FROM transa3 8 I T % vctio) S qn LIMIT 10;

过滤条件

SELECT * FROM transaction= I I W = v ) s n WHERE sales>100;

按声明分组

分组依据语句用于汇总不同级别的数据。 想一想我们要按项目计算总销售额的情况。

SELECT item, SUM(sales) as sale FROM transaction GROUP BY item;

如果我们p @ ] ; + I p想过滤掉所有销售额至少达到1000的商品怎么办?

SELECT item, SUM(saR U ` & , ^ t blesi @ ? b = 9 b K) as sale FROM transaction GROU5 j 8 l Z % R FP BY item HAVING sale>o ? Q : } s;1000;

Jion Hive

为了合并和检索来自多个表的记录,我们使用了Hive Join。 当前,Hive支K b ; ( q @ p持两个或更多表的内部,外部,左和右联接。 语法类似于我们在SQL中使用的语法。 在研究语法之前,让我们了解不同的联接如何工作。

Apache Hive简介

> Different joins in HIVE

SELECT AU Y n W.* FROM ts 2 U W jransaW 2 o , 5ction A {LEFT|RIGHT|FULL} JOIN transaction_date B ON (A.ID=B.ID);

笔记:

Hive不支持l p i @IN / EXISTS子查询

Hive不支持不包含相等条件的联接条件

可以联接多个表,但可以组织表,以使最大的表出现在序列的最后

在Hive中o m = 0优化查询

要优化配置单元中的查询,这是您应该知道的5条经验法则

分组依据,聚合功能和联接默认情况下在化简器中进行,而过滤器操作在映射器中进行

使用hi4 y Q / x K e S 8ve.map.aggr = true选项直接在地图任务中执行第一级聚合

根据执行的任务类型设置映射器/还原] / k B 3 1 6 1 U器的数量。 对于过滤条件,请使用set mapred.mapper.tasks = X;。 对于聚合操D - H 8 L , P ,作:设置mapre} ( * k d.reduce.tasks = Y;

在联接中,序列中的最后一个表通过简化j { Q z r z ] H器流式传输,而其他表则被缓冲。 整w , Y K } Z理表格,使g & 6 z 4 T x G最大的表格出现在序列的X s k 6 R最后

可以使用STRE0 Q L q E MAM T_ $ 8 U Z / s KABLE和MAP JOINS加快连接任务的速度


本文重Q o u g : S | 4点介绍Hive,它的功能,用例和Hive查询。 由于许多DML和DDL查询与SQL非常相似,因此它可以充当SQL新手的基础或构建块。


(本文翻译自Angel Das的文章《Introductioz d T 4 0 (n to Hive》,参考:https://towardsdatascience.com/introduction-to-hive-859ba31a5769)

项目工作文章历史设置销售交易信息崇义