hql方法java,HQL语法及自定义函数

本文介绍了如何在Hive中进行数据操作,包括新增分区、查询结果输出到本地目录,以及处理集合和Map类型数据。还展示了如何创建自定义函数UDF,用于手机号码转地区,并在Hive表中应用该函数处理数据。最后,提到了使用shell脚本执行HQL语句以及集群分桶的概念。
摘要由CSDN通过智能技术生成

1b886e01fb6cf6771d2069176464ece5.png

show partitions t_order_wk;

新增分区:

alter table t_order_wk partition(month="201402")

把查询结果输出:

insert overwrite local directory  "hiveout.txt" seletc * from t_order_wk where partition="201401";

支持集合类型,但是需要加每个集合字段的分隔符

01,13812345678,18     tom,beijing,fengtai

02,13512345678,23   merry,shanghai,putong

create table t_order_wk(a array ,b array)

partitioned by(month string)

row  format delimited

fields ternimated by "/t"

collection iterms terminated by ","

;

支持map类型数据

fengjie   age:18,size:36A,addr:USA

furong   age:20,size:37C,addr:beijing,weight:100KG

create table tab_map(name,map)

row format delimited

fields terminated by "/t"

collection iterms terminated by ","

map keys terminated by ";"

;

shell脚本输出HQL

hive -S -e ""select * from wk110.t_order_wk;

在shell中同样也会显示出查询的结果,在实际生产中就是使用shell脚本

有了这种执行机制,就使得我们可以利用脚本语言(bash shell,python)进行hql语句的批量执行

自定义函数UDF

ee1281d8531ea7cf5963a9b63c0a4b1d.png

1.写出java类实现逻辑功能

需要导入hive下的lib

package cn.itcast.bigdata;

import java.util.HashMap;

//写的这个java类需要符合一定的规范,继承extends

public class PhoneNumberToArea extends UDF{

//是一个重载的方法,需要根据自定义去写出这个重载的方法

//public void evaluate() {

//}

public static HashMap areaMap = new HashMap();

static {

areaMap.put("1398","北京");

areaMap.put("1378","上海");

areaMap.put("1368","深圳");

areaMap.put("1358","苏州");

}

//一定要用public修饰才能被hive调用

public String evaluate(String pnb) {

String result = areaMap.get(pnb.substring(0,4))==null?(pnb+"huoxing"):(pnb+areaMap.get(pnb.substring(0,4)));

return result;

}

}

2.打成jar包上传到linux系统中,然后通过hive传入到lib中

501a6ff927ec91ed9325ddfb0bbf9c6f.png

3.创建一个函数与jar包关联

create temporary function getArea as "cn.itcast.bigdata.PhoneNumberToArea";

3979279e36ff5ec13d2f8b6ba4bfb004.png

创建表,导入数据

create table t_flower(phoneNumber String,upflow string,upflowstring)

row format delimited

fields terminated by ",";

load data local inpath "home/hadoop/flow.data" into table t_flower;

使用UDF自定义函数来操作hive

select getArea(phoneNumber),upflow,upflow from t_flower;

cluster    分桶

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值