HIVE的分区、hive关联Hbase、UDF函数

来源:互联网 发布:cst仿真软件破解版 编辑:程序博客网 时间:2024/06/07 22:49

Hive and HDFS

                                             原始数据

这里写图片描述

//建立hive和Hdfs的外部关联表

CREATE EXTERNAL TABLE people(id int,sex string,name string)
partitioned by (logdate string,hour string)
row format delimited fields terminated by ‘,’;

//追加数据

ALTER TABLE people ADD IF NOT EXISTS PARTITION(logdate=20160111,hour=00)
LOCATION ‘/user/yuhui/20160111/00’;
这里写图片描述

Hive partition Query

分区背景

1)在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作。有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念。
2)分区表指的是在创建表时指定的partition的分区空间。
3)如果需要创建有分区的表,需要在create表的时候调用可选参数partitioned by

分区技术细节

1)一个表可以拥有一个或者多个分区,每个分区以文件夹的形式单独存在表文件夹的目录下。
2)表和列名不区分大小写。
3)分区是以字段的形式在表结构中存在,通过describe table命令可以查看到字段存在,但是该字段不存放实际的数据内容,仅仅是分区的表示

ALTER TABLE people ADD IF NOT EXISTS PARTITION(logdate=20160111,hour=00) LOCATION ‘/user/yuhui/20160111/00’;

ALTER TABLE people ADD IF NOT EXISTS PARTITION(logdate=20160112,hour=00) LOCATION ‘/user/yuhui/20160112/00’;

这里写图片描述

Hive 条件查询和多表查询

Hive的条件查询和多表join查询都和SQL查询一样,唯一不同的是hive将查询转为
MapReduce的job运行。

这里写图片描述

Hive and Hbase

Hbase的建表
这里写图片描述

Hbase的数据插入
这里写图片描述

创建hive连接Hbase的外部表

CREATE EXTERNAL TABLE hive_join_hbase(
key string,
id string,
name string,
sex string
)
STORED BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler’
WITH SERDEPROPERTIES
(“hbase.columns.mapping”=”:key,info:id,info:name,info:sex”)
TBLPROPERTIES(“hbase.table.name”=”bigdata”);

通过hive查询数据

根据rowkey查询
select * from hive_join_hbase where key=‘people1‘

根据某个字段查询
select * from hive_join_hbase where name =‘wangya‘

组合查询
select * from hive_join_hbase where name = wangya ’ and sex=man’

Hive and UDF

编辑Java程序
import org.apache.hadoop.hive.ql.exec.UDF;
public class helloUDF extends UDF {
public String evaluate(String str) {
try {
return “HelloWorld ” + str;
} catch (Exception e) {
return null;
}
}
}

添加到hive的第三方jar hive>ADD JAR helloudf.jar;
自定义hive临时函数名称 hive>create temporary function helloworld as ‘com.hrj.hive.udf.helloUDF’;
使用UDF函数 hive> select helloworld(t.col1) from t limit 10;
删除UDF函数 hive> drop temporary function helloworld;

Hive的第三方Jar包的路径
Hive/conf/hive-env.sh
export HIVE_AUX_JARS_PATH=$HIVE_HOME/lib

Hive的相关命令

创建新表
hive> CREATE TABLE t_hive (a int, b int, c int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t’;

导入数据t_hive.txt到t_hive表
hive> LOAD DATA LOCAL INPATH ‘/home/cos/demo/t_hive.txt’ OVERWRITE INTO TABLE t_hive ;

正则匹配表名
hive>show tables ‘t‘;

增加一个字段
hive> ALTER TABLE t_hive ADD COLUMNS (new_col String);

重命令表名
hive> ALTER TABLE t_hive RENAME TO t_hadoop;

从HDFS加载数据
hive> LOAD DATA INPATH ‘/user/hive/warehouse/t_hive/t_hive.txt’ OVERWRITE INTO TABLE t_hive2;

从其他表导入数据
hive> INSERT OVERWRITE TABLE t_hive2 SELECT * FROM t_hive ;

创建表并从其他表导入数据
hive> CREATE TABLE t_hive AS SELECT * FROM t_hive2 ;

仅复制表结构不导数据
hive> CREATE TABLE t_hive3 LIKE t_hive;

通过Hive导出到本地文件系统
hive> INSERT OVERWRITE LOCAL DIRECTORY ‘/tmp/t_hive’ SELECT * FROM t_hive;

Hive查询HiveQL
from ( select b,c as c2 from t_hive) t select t.b, t.c2 limit 2;
select b,c from t_hive limit 2;

0 0
原创粉丝点击