hive-f(hive翻译)
本篇文章给大家谈谈hive-f,以及hive翻译对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、Hive常用命令
- 2、在hive数据库中怎么查看表结构
- 3、hive中quit和exit的区别
- 4、hive核心组件及流程(一)
- 5、hive使用教程(2)--数据导入导出、查询与排序
- 6、如何将hive查询结果导出成txt文件
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翻译的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。