hive-f(hive翻译)

本篇文章给大家谈谈hive-f,以及hive翻译对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Hive常用命令

参数说明:

EXTERNAL:创建外部表,在建表的同时可以指定源数据的路径(LOCATION),创建内部表时,会将数据移动到数据仓库指向的路径,若创建外部表不会有任何改变。在删除表时,内部表的元数据和源数据都会被删除,外部表不会删除源数据。

COMMENT:为表和列增加注释

PARTITIONED BY:创建分区表,

——PARTITIONED BY(dt STRING, country STRING)

CLUSTERED BY:创建分桶表

SORTED BY:创建排序后分桶表(不常用)

——CLUSTERED BY(userid) SORTED BY(viewTime) INTO 32 BUCKETS

ROW FORMAT DELIMITED:是用来设置创建的表在加载数据的时候,支持的列分隔符。Hive默认的分隔符是\001,属于不可见字符,这个字符在vi里是^A

—— ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001';

STORED AS:指定存储文件类型 sequencefile (二进制序列文件)、textfile(文本)、rcfile(列式存储格式文件)、ORC

如果文件数据是纯文本,可以使用知则弊 STORED AS TEXTFILE。

如果数据需要压缩,使用 STORED AS SEQUENCEFILE。

LOCATION:指定表在 hdfs 上的存储位置

注意:若是外部表,则还需要删除文件(hadoop fs -rm -r -f hdfspath)

注意:INPATH后面的文件路径不能和hive表路径在hdfs上一致,最好是两个不同的文件路径,在加载过程中,源路径下的文件会被移动到hive表所在路径下,如果一致,会找不到文件错误;

Hive支持内置和自定义开发的文件格式。以下是Hive内置的一些格式:

默认是文本格式.

textfile 存储空间消耗比较大,并且压缩的text 无法分割和合并查询的效率最低,可以直接存储,加载数据的盯让速度最高.

sequencefile 存储空间消耗最大,压缩的文件可以分割和合并查询效率高,需要通过text文件转化来加载.

rcfile 存储空间最小,查询的效率最高 ,需要通过text文件转化来加载,加载的速度最低.

相比传统的行式存储引擎,列式存储引擎具有更高的压缩比,更少的IO操作而备受青睐(注:列式存储不是万能高效的,很多场景下行式存储仍更加高效),搭族尤其是在数据列(column)数很多,但每次操作仅针对若干列的情景,列式存储引擎的性价比更高。

在hive数据库中怎么查看表结构

查看表结构信息如下

1、desc formatted table_name;

2、desc table_name。

一、电脑常见问题

主板答银不启动,开机无显示,有显卡报警声。

故障原因:一般是显卡松动或显卡损坏。  

处理办法:打开机箱,把显卡重新插好即可。要检查AGP插槽内是否有小异物,否则会使显卡不能插接到位;对于使用语音报警的主板,应仔细辨别语音提示的内容,再根据内容解决相应故障。  

如果以上办法处理后还报警,就可能是显卡的芯片坏了,更换或修理显卡。如清陵宴果开机后听到"嘀"的一声自检通过,显示器正常但就是没有图像,把该显卡插在其他主板上汪吵,使用正常,那就是显卡与主板不兼容,应该更换显卡。

hive中quit和exit的区别

执行一个查询

$HIVE_HOME/bin/hive -e 'select a.col from tab1 a'

之后过程中,会在终端上显示mapreduce的进度,执行完毕后,最后把查询结果输出到终端上,接着hive进程退出,不会进入交互模式。

使用静音模式执行一个查询

$HIVE_HOME/bin/hive -S -e '含贺select a.col from tab1 a'

加入-S,终端上的输出不会有mapreduce的进度,执行完毕,只会把查询结果输出到终端上。这个静音模渗配式很实用,,通过第三方程序调用,第三方程序通过hive的标准输出获取结果集。

使用静音模式执行一个查询,把结果集导出

$HIVE_HOME/bin/hive -S -e 'select a.col from tab1 a' tab1.csv

不进入交互模式,执行一个hive script

$HIVE_HOME/bin/hive -f /home/my/hive-script.sql

hive-script.sql是使用hive sql语法编写的脚本文件,执行的过程和-e类似,区别是从文件加载sql.

但是sql文件,对于bash来说,不能使用变量,而使用-e的方式,可以在bash里使用变量(但是对于sql文件的形式,可以利用程序基于变量动态生成sql文件,丛老指再执行,稍微麻烦点)。

这里可以和静音模式-S联合使用,通过第三方程序调用,第三方程序通过hive的标准输出获取结果集。

[img]

hive核心组件及流程(一)

依赖第三方组件: Meta store(mysql),hdfs,MapReduce

hive:

Client客户端 CLI、JDBC

Driver连接客户端与服务端的桥梁

SQL Pareser解析器,将SQL转换为抽象语法树AST

1.将HQL语句转换为Token

2.对Token进行解析,生成AST

Physical Plan编译器将AST编译生成逻激虚帆辑誉磨执行计划

Query Optimizer优化器,对逻辑执行计划进行优化

1.将AST转换为QueryBlock

2.将QueryBlock转换为OperatorTree

3.OperatorTree进行逻辑优化

4.生成TaskTree

5.TaskTree执行物理优化

Execution执行器把逻辑执行计划转换成可以运行的物理计划

1.获取MR临时工作目录

3.定义Mapper和Reducer

2.定义Partitioner

4.实例化Job

5.提交Job

1.以Antlr定义的语法规则,对SQL完成词法解析,将SQL转换为AST

2.遍历AST,抽象出查询基本组成单元QueryBlock。

3.遍历QueryBlock,将其转换为OperatorTree,逻辑执行单元

4.利用逻辑优化器对OperatorTree进行逻辑优化。

5.遍历OperatorTree转换为TaskTree,将逻辑执行计划转化为物理执行计划

6.使用物理优化器对TaskTree进行物理优化

7.生成最终的执行计划,提交执行

$HIVE_HOME/bin/hive可以进入客户端

$HIVE_HOME/bin/hive -e "{SQL语句}"可以执行SQL语句

$HIVE_HOME/bin/hive -f {SQL文件名.sql}可以执行sql文件

开启hiveserver2服务,可以通过JDBC提交SQL

创建Driver

创建OptionsProcessor

初始化log4j

标准输入输出以及错误输出流的定义,后续需要输入 SQL 以及打印控制台信息

解析输入的参数,包含"-e -f -v -database"

读取输入的sql

按照";"分割的方式解析

解析单行SQL

遇到为"quit"或者"exit"退出

遇到为"source"开头,执行 SQL 文件,读取文件并解析

如果命令以"!"开头,则表示用户需要执行 shell命令

以上三种都不是的情况下执行SQL,进行SQL解析

获取当前系统时间

获取系统结束时间

编译SQL语句

SQL生成AST,构建词法解析器,将关键词替换为TOKEN,明雹进行语法解析,生成最终AST

处理AST,转换为QueryBlock然后转换为OperatorTree,对Operator进行逻辑优化,然后转换为任务树,然后进行物理优化。

根据任务树构建MrJob

添加启动任务,根据是否可以并行来决定是否并行启动Task

设置MR任务的InputFormat、OutputFormat 等等这些 MRJob 的执行类

构建执行MR任务的命令

向yarn提交任务

打印头信息

获取结果集并获取抓取到的条数

打印SQL执行时间及数据条数

hive使用教程(2)--数据导入导出、查询与排序

1.语法

(1)load data:表示加载数据

(2)local:表示从本地加载数据到hive表;否则从HDFS加载数据到hive表

(3)inpath:表示加载数据的路径

(4)overwrite:表示覆盖表中已有数据,否则表示追加

(5)into table:表示加载到哪张表

(6)student:表示具体的表

(7)partition:表示上传到指定分区

2.实操案例

(0)创建一张表

(1)加载本地文件到hive

(2)加载HDFS文件到hive中

上传文件到HDFS

加载HDFS上数据

(3)加载数据覆盖表中已有的数据

上传文件到HDFS

加载数据覆盖表中已有的数据

1.创建一张分区表

2.基本插入数据

3.基本模式插入(根据单张表查询结果)

4.多插入模式(根据多张表查询结果)(有问题,只高辩是查询单表不同分区的)

根据查询结果创建表(查询的结果会添加到新创建的表中)

1.创建表,并指定在hdfs上的位置

2.上传数据到hdfs上

3.查询数据

注意:先用export导出后,再将数据导入。

1.将查询的结果导出到本地

2.将查询的结果格式化导出到本地

3.将查询的结果导出到HDFS上(没有local)

基本语法:(hive -f/-e 执行语句或者脚本 file)

后续..............................。

注意:Truncate只能删除管理表,不能删除外部表中数据

1.全表查询

2.选择特定列查询

注意:

(1)SQL 语言大小写不敏感。

(2)SQL 可以写在一行或者多行

(3)关键字不能被缩写也不能分行

(4)各子句一般要分行写。

(5)使用缩进提高语句的可读性。

1.重命名一个列

2.便于计算

3.紧跟列名,也可以在列名和别名之间加入关键字‘AS’

4.案例实操

查询名称和部门

(1)where针对表中的列发挥作用,查询数据;having针对查询结果中的列发挥作用,筛选数据。

(2)where后面不能写分组函数,而having后面可以使用分组函数。

(3)having只用于group by分组统计语句。

空字段赋值

5.CASE WHEN

需求

求出不同部门男女各多少人。结果如下:

创建本地emp_sex.txt,导入数据

创建hive表并导入数据

按需求查询数据

Order By:全局排序,一个Reducer

1.使用 ORDER BY 子句排序

ASC(ascend): 升序(默认)

DESC(descend): 降序

2.ORDER BY 子句在SELECT语句的结尾

3.案例实操

(1)查询员工信息按工资升序排列

(2)查询员工信息按工资降序排列

按照员工薪水的2倍排序

按照部门和工携册资升序排序

Sort By:每个Reducer内部进行排序,对全局结果集来说不是排序。

1.设置reduce个数

2.查看设置戚隐缺reduce个数

3.根据部门编号降序查看员工信息

4.将查询结果导入到文件中(按照部门编号降序排序)

Distribute By:类似MR中partition,进行分区,结合sort by使用。

注意,Hive要求DISTRIBUTE BY语句要写在SORT BY语句之前。

对于distribute by进行测试,一定要分配多reduce进行处理,否则无法看到distribute by的效果。

案例实操:

当distribute by和sorts by字段相同时,可以使用cluster by方式。

cluster by除了具有distribute by的功能外还兼具sort by的功能。但是排序只能是升序排序,不能指定排序规则为ASC或者DESC。

1)以下两种写法等价

注意:按照部门编号分区,不一定就是固定死的数值,可以是20号和30号部门分到一个分区里面去。

如何将hive查询结果导出成txt文件

最近在使用hive时,需要将hive查询的数据导出到本地文件系统,HQL语法如下:

INSERT OVERWRITE [LOCAL] DIRECTORY directory1 select_statement1

查询早含结果导出到本地文件后,试图使用excel加载时遇上了麻烦:不知道hive导出文件时使用的分隔符老誉,

使用文本编辑器打开也显示乱码。

最后在官方文档上找了半天才发现,hive使用 ^A 符号作为域的分隔符,原文如下:

Data written to the filesystem is serialized as text with columns separated by ^A

在python中可以使用line.split('\x01')来进行切分,也可以使用line.split('\001'),注意其中是单引号

在java中可以使用split("\\u0001")来进行切分

如果确实需要将查询结果导出到本地文件,最好使用hive的命令:

[sql] view plaincopy在CODE上查看代码片派生到我的代码片

bin/hive -e "select * from test" res.csv

或者是:

bin/hive -f sql.q res.csv

其中文件sql.q写入你想要执行的查询语句

这问题在使用hive hql streaming时也会遇到,当你使用hql strreaming 将输出直接写入到hdfs目录,然后你在该目录上创建hive 外部表时,hive的输出结果会将streaming 的key和value之间的分隔符修改为 \001,所以,在hql streaming和输出为hive 外部表时,最好将streaming的最后输出的分隔符修改为\001,并且hive外部表的分隔符应该设置为\001,注意:不要使用^A和\x01,如:

[html] view plaincopy在CODE上查看代码片派生到我的侍睁段代码片

create external table site_user_mapping_info_month(uid String,tag string,project_ids string,site_interests string) PARTITIONED BY(year String, month String) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001' LOCATION '/project/site_grouping/site_user_mapping_info_month';

关于hive-f和hive翻译的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表