码迷,mamicode.com
首页 > 其他好文 > 详细

hive 初使用

时间:2015-12-02 17:49:23      阅读:453      评论:0      收藏:0      [点我收藏+]

标签:

1. create table

创建一张目标表,指定分隔符和存储格式:
create table tmp_2 (resource_id bigint ,v int)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\,‘
LINES TERMINATED BY ‘\n‘
STORED AS TEXTFILE;
 
//ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\,‘---这里设置字段间以逗号分隔;
//LINES TERMINATED BY ‘\n‘ ---这里设置行与行之间以换行分隔
//STORED AS TEXTFILE   ---指定文件以text形式存储;Hive 中默认有三个文件格式 TextFile,SequenceFile 以及 RCFile
//在建表的时候还可以通过"PARTITIONED BY(file STRING)"指定分区字段
 
2. 将分析结果导入目标表
hivesql是"insert overwrite table...",  overwrite 表示覆盖重写文件
 
3. ODPS(阿里大数据平台) & HIVE
1)dateadd 与 date_sub
dateadd(to_date(‘@@{yyyy-MM-dd}‘,‘yyyy-mm-dd‘),-400,‘dd‘),‘ ‘,1)
DATE_SUB(FROM_UNIXTIME(UNIX_TIMESTAMP(),‘yyyy-MM-dd‘),400) 
 
2)split_part 与 split
split_part(CAST(to_date(‘@@{yyyy-MM-dd}‘,‘yyyy-mm-dd‘) AS STRING), ‘-‘,1)
split(CAST(FROM_UNIXTIME(UNIX_TIMESTAMP() ,‘yyyy-MM-dd‘)AS STRING), ‘-‘)[0]
 

--odps

SELECT
‘@@{yyyy-MM-dd}‘, -- time(2015-12-02)
DATEADD(to_date(‘@@{yyyy-MM-dd}‘,‘yyyy-mm-dd‘),-400,‘dd‘),                        -- 2014-10-28
split_part(CAST(to_date(‘@@{yyyy-MM-dd}‘,‘yyyy-mm-dd‘) AS STRING), ‘-‘,1),    -- 2015
split_part(CAST(to_date(‘@@{yyyy-MM-dd}‘,‘yyyy-mm-dd‘) AS STRING), ‘-‘,2),    -- 12
split_part(CAST(to_date(‘@@{yyyy-MM-dd}‘,‘yyyy-mm-dd‘) AS STRING), ‘-‘,3)     -- 02
FROM DUAL;

 

--hive

USE test;
SELECT
UNIX_TIMESTAMP(),                                                                                            -- unix time(2015-12-02), 秒为单位
DATE_SUB(FROM_UNIXTIME(UNIX_TIMESTAMP(),‘yyyy-MM-dd‘),400),                      -- 2014-10-28
split(CAST(FROM_UNIXTIME(UNIX_TIMESTAMP() ,‘yyyy-MM-dd‘)AS STRING), ‘-‘)[0],  -- 2015
split(CAST(FROM_UNIXTIME(UNIX_TIMESTAMP() ,‘yyyy-MM-dd‘)AS STRING), ‘-‘)[1],  -- 12
split(CAST(FROM_UNIXTIME(UNIX_TIMESTAMP() ,‘yyyy-MM-dd‘)AS STRING), ‘-‘)[2]   -- 02

FROM DUAL;

4. lateral view 使用

和split, explode等UDTF一起使用,将一行数据拆成多行数据(UDTF),在此基础上可以对拆分后的数据进行聚合(虚拟表)

lateral view首先为原始表的每行调用UDTF,UTDF会把一行拆分成一或者多行,lateral view再把结果组合,产生一个支持别名表的虚拟表.

                                                                                                                                                                test

                                cids

,1000004525,215937867,1015096900,

        dt

2014-12-12

,1,9, 2015-12-12

使用 lateral view explode(split(cids,‘,‘)) t as cid 将原表的cids拆分 生成新的虚拟表,字段为cid.

SELECT cid,dt 
FROM test LATERAL VIEW explode(cids) test_new AS cid;
1000004525 2014-12-12
215937867 2014-12-12
1015096900 2014-12-12
1 2015-12-12
9 2015-12-12

 

一个FROM语句后可以跟多个lateral view语句,后面的lateral view语句能够引用它前面的所有表和列名。

SELECT cid,dt1 
FROM test LATERAL VIEW explode(dt)   test1 AS dt1 
          LATERAL VIEW explode(cids) test2 AS cid;

 

 

 

hive 初使用

标签:

原文地址:http://www.cnblogs.com/skyEva/p/5012946.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!