Hive入门详解(三)

本文详细介绍了Hive的内置函数,包括随机数、阶乘、最大值、最小值等,并展示了如何使用CASE语句进行条件判断。此外,还讲解了自定义UDF的创建和使用,以及通过JDBC连接Hive的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

个人博客原文链接

内置函数UDF和内置运算符

  • 取随机数rand()
    select rand() from t_product;

  • 求a的阶乘
    factorial(INT a)
    select factorial(10) from t_product;

  • 求最大值
    greatest(T v1, T v2, …)
    select greatest(10,123,53,34,1,23,502,120) from t_product;

  • 求最小值
    least(T v1, T v2, …)
    select least(10,123,53,34,1,23,502,120) from t_product;

  • 数学常量e
    select e() from t_product;

  • 数学常量pi
    select pi() from t_product;

  • 返回当前时间
    select current_date from t_product;

  • 如果列中有null值,则返回默认值
    nvl(T value, T default_value)
    select id,nvl(name, ‘无名氏’) from t_product;

  • 对于值的不同判断,取不同的值
    CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END
    如果a=b就返回c,a=d就返回e,否则返回f
    如CASE 4 WHEN 5 THEN 5 WHEN 4 THEN 4 ELSE 3 END 将返回4
    select CASE id WHEN 1 THEN ‘正品’ ELSE ‘山寨’ END,name from t_product;

  • 判断某个文件中是否包含某个字符串
    in_file(string str, string filename)
    select in_file(‘start’,’/home/briup/test’) from t_product;

  • 通过某个符号切割字符串
    split(string str, string pat)
    select split(‘hello,world,briup’, ‘,’) from t_product;

  • 截取字符串
    substr(string|binary A, int start, int len)
    select substr(‘ceo-larry’, 0, 3) from t_product;

  • 在某字符串中查找某个子串第一次出现的位置,位置从1开始
    instr(string str, string substr)
    select instr(‘ceo-larry’, ‘la’) from t_product;

  • 将第一个字符串中的,符合第二个字符串的部分,替换成第三个字符串
    translate(string|char|varchar input, string|char|varchar from, string|char|varchar to)
    select translate(‘hello briup’, ‘briup’, ‘imut’) from t_product;

  • 比较两个字符串,不同的字符个数
    levenshtein(string A, string B)
    select levenshtein(‘hello’, ‘worldd’) from t_product;

  • 把array中的字符用某个符号拼接起来
    concat_ws(string SEP, array)
    select concat_ws(’#’, split(‘hello,world,briup’, ‘,’)) from t_product;

自定义函数UDF

  1. 写一个java类extends UDF,定义某个逻辑
  2. 打成jar包上传到hive所在的节点
  3. 在hive中创建一个函数,和jar中的自定义类建立关联
    • 导入包
      add jar /home/hadoop/udf.jar
    • 建立关联
      create temporary function getArea as ‘com.briup.udf.MyUDF’;
    • 查看自定义函数
      show functions;
    • 使用自定义函数
      select id,name,tel,getArea(tel) from t_student_udf;

JDBC连接hive

  1. 修改配置文件hdfs-site.xml
<property>  
<name>dfs.webhdfs.enabled</name>  
<value>true</value>  
</property>  
  1. 修改配置文件core-site.xml
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>

注:以上两个属性的第三位指的是hive所在机器的用户名
3. 开启hive服务保持持续运行
hive --service hiveserver2 &
4. 编写代码测试连接

public class JDBCTest {
    public static void main(String[] args) throws Exception {
        Class.forName("org.apache.hive.jdbc.HiveDriver");
        Connection conn = DriverManager.getConnection("jdbc:hive2://hadoop1:10000/db1803","hadoop","hadoop");
        System.out.println(conn);
        Statement stat = conn.createStatement();
        String hql = "create table t_student_jdbc(id int,name string,tel string)" +
                " row format delimited" +
                " fields terminated by ','" +
                " stored as textfile";
        stat.execute(hql);
        stat.close();
        conn.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值