Hadoop+Hive常用知识总结

2017-01-17   出处: 咚咚小报  作/译者: 王沙

                                   

1、什么是Hadoop?什么是hive?

Hadoop:一个分布式系统基础架构,由Apache基金会开发,用户可以在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的威力告诉运算和存储。

Hadoop是项目的总称,主要是由分布式存储(HDFS)、分布式运算(MapReduce)组成。

HIVE是一个SQL解析引擎,它将SQL语句转译成M/RJOB 然后再Hadoop执行,与传统数据库完全不同,只是采用了同样的sql界面。


2、hadoop基本操作

2.1 查看指定目录下内容

Hadoop dfs –ls[文件目录]

如:hadoop dfs –ls /user/war/wangkai.pt

2.2 打开某个已存在的文件

Hadoop dfs –cat [file_path]

如:hadoop dfs –cat /user/war/wangkai.pt/test.txt
2.3 删除某个文件

hadoop fs -rm hdfs://ns4/user/mart_vdp/app.db/app_vdp_jdb_jw_store_task_rules/store_task.txt

2.4 将本地文件存储至hadoop

Hadoop fs –put [本地地址]


3、hive基本操作

3.1 进入hive

登陆hadoop服务器后,输入 hive(这处理的有点慢,多等会)

显示成hive>

            >

后,即表示进入到hive中

3.2  hive基本操作

3.2.1 建表

语句:

CREATE [EXTERNAL] TABLE table_name

          (col_name data_rype,.....)

          [PATTITIONED BY  (col_name data_type)]

[ROW FORMAT DELIMITED            

[FIELDS TERMINATED BY '/t' ]      

[STORED AS TEXTFILE]

举例:

create table input_data_test  #表名

 (                 item_sku_id                      string   , #字段名称 字段类型

provider_code                   string   ,

delivery_center                 string  ,

stock                           bigint             )            

COMMETN '注释:XXXXX'       #表注释

 PARTITIONED BY ("ACTIVE")  #分区表字段(如果文件非常大的话,采用分区表可以快速过滤出按分区字段划分的数字)    

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '/t'    #字段之间是按照什么分割开的,这个例子是中按照tab键分开,还可以使用其他字符,如|分开 

STORED AS TEXTFILE;   #用哪种方式存储数据

3.2.2 查看库

语句:show  databases;

使用某一个库:use database;

3.2.3 查看表

语句:show tables   

可以使用模糊查询:show tables '*TMP*'

查看表有哪些分区: show partitions  table;

使用某一个表:use  table;

查看表字段:desc  table;  

3.2.4删除表

Drop table table_name;

3.2.5增加字段:

 alter table fdm_cep_ql_service_center_chain add columns (jd_account string);

3.2.6 导入数据

使用load命令将数据导入表中  load操作只是将数据复制/移动至Hive表对应的位置,不会对数据进行任何转换。

语句:

 load  data [local] inpath 'filepath' [overwrite] into table tablename [partition ]

举例:

load data local inpath '/python/app/task/data/gdm_m03_item_sku_da_06.txt' into  table gdm.gdm_m03_item_sku_da;(不带分区)

load data local inpath '/python/app/task/data/no_commission_rules.txt' into table app.app_vdp_nojdb_jw_sku_commission_rules;(带分区)

注:就是普通的insert,只不过数据来源是通过inpath路径找到的,insert之前保证表已建完,并且格式于建表语句要求的格式一致(换行、分隔符等)

3.2.7 查询

1、where 语句

    Where语句是个布尔表达式,例如:下面的查询语句只返回销售记录大于10,且归属地属于美国的销售代表。

   Select * from sales where amount >10 and region =’US’

注:hive不支持where子句中的IN、EXIST或子查询。

2、基于partition的查询

  一般select查询会扫描整个表(除非是为了抽样查询)。但是如果一个表使用partitioned by子句建表,查询就可以利用分区剪枝(input pruning)的特性,只扫描一个表中他关心的那一部分。

 Hive当前的是实现是。只有分区断言出现在离from子句最近的那个where子句中,才会取用分区剪枝。

例如,如果表app_vdp_base_jdbang_income_ma_sum使用date列分区,一下语句只会读取分区为‘2016-06-01’的数据。

Select *

from app_vdp_base_jdbang_income_ma_sum

 where tx_dt>=’2016-06-01’ and tx_dt <=’2016-06-31’

3、limit查询

Limit可以限制查询的记录数,查询的结果是随机选择的。下边的查询语句从t1表中随机查询5条记录:

Select * from t1 limit 5;

如果需要查询top多少的数据,则需要使用下面的语句:

查询销售记录最大的5个销售代表:

Select * from sales order by amount desc limit 5;

3.2.8  修改数据

Hive不支持update数据。

同时,hive导入数据的时候不会自动去重。

3.2.9 删除数据

Hive不支持条件删除,只能删除整个表后再重新建。

3.2.10 结果导出

在hive中查询出表数据后,如果数据太多,不好看,可以将数据导出来,然后在本地使用UE等工具查看。此命令在在linux下执行

格式:hive –e  ‘查询语句’ > 文件名.txt   #将查询语句查询出来的结果导出到txt中

例如:

hive - e 'select * from app.app_vdp_jdbang_jwang_xiadan_detail;' > wangsha1.txt



声明:本文为本站编辑转载,文章版权归原作者所有。文章内容为作者个人观点,本站只提供转载参考(依行业惯例严格标明出处和作译者),目的在于传递更多专业信息,普惠测试相关从业者,开源分享,推动行业交流和进步。 如涉及作品内容、版权和其它问题,请原作者及时与本站联系(QQ:1017718740),我们将第一时间进行处理。本站拥有对此声明的最终解释权!欢迎大家通过新浪微博(@测试窝)或微信公众号(测试窝)关注我们,与我们的编辑和其他窝友交流。
368° /3677 人阅读/1 条评论 发表评论

欧桐凤  2017-02-17

收着备用


登录 后发表评论