百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

Hive 函数 + Shell编程的具体实践与运用

bigegpt 2024-09-20 14:02 4 浏览

Hive Shell参数

1.Hive命令行

(1). 命令:hive -i filename

含义:从文件初始化HQL

filename为test001.sql的内容如下

hive -i test001.sql命令执行结果如下

(2). 命令:hive -e 'sql语句'

含义:从命令行执行指定的HQL指令

具体执行示例如下:

(3). 命令:hive -f filename

含义:执行文件中的HQL脚本

这里的filename为test001.sql文件,文件内容如下

hive -f test001.sql执行结果如下

(4). 命令:hive -v

含义:输出执行的HQL语句到控制台

(5). 命令:hive -p

含义:connect to Hive Server on port number -hiveconf x=y Use this to set hive/hadoop configuration variables.

(6). 命令:hive -hiveconf set x=y;

含义:设置hive运行时候的参数配置信息


2.Hive参数配置方式

目的:设定 Hive 的参数可以优化 HQL 代码的执行效率,协助定位问题。

三种参数设定方式:

  • 配置文件
  • 命令行参数
  • 参数声明


配置文件

Hive 的配置文件包含:

  • 用户自定义的配置文件:$HIVE_CONF_DIR/hive-site.xml
  • 默认配置文件:$HIVE_CONF_DIR/hive-default.xml

用户自定义的配置文件会覆盖默认配置文件。

另外,Hive 也会读入 Hadoop 的配置,因为 Hive 是作为 Hadoop 的客户端启动的,Hive的配置会覆盖 Hadoop 的配置。

配置文件的设定对本机启动的所有 Hive 进程都有效。


命令行参数

启动 Hive 客户端或 Server 方式时,可以在命令行添加 -hiveconf param=value 来设定参数,例如:

hive -hiveconf hive.root.logger=INFO,console

这一设定对本次启动的 Session(对于 Server 方式启动,则是所有请求的 Sessions)有效。


参数声明

可以在 HQL 中使用 SET 关键字设定参数,例如:

set mapred.reduce.tasks=100;

这一设定的作用域也是Session(一次会话)级别的。

上述三种设定方式的优先级依次递增。即参数声明 > 命令行参数 > 配置文件参数

注意:
某些系统级的参数,例如:log4j 相关的设定,必须用参数声明或命令行参数这两种方式设定,因为那些参数的读取在 Session 建立以前已经完成了。


Hive函数

1.内置函数

(1).查看系统自带的函数

show functions;

从上图中可以看到 hive 有许多系统自带的内置函数。

(2).显示自带的函数的用法

# 查看abs函数的用法
desc function abs;

abs函数的含义:返回一个数的绝对值

(3).详细显示自带的函数的用法

# 详细显示upper函数的使用方法
desc function extended upper;

上图是举例说明,upper函数的功能是将字符串"Facebook"全部转换成大写"FACEBOOK"返回


(4).常用内置函数

# 字符串拼接函数:concat
用法:select concat('abc', 'def', 'gh');
实现效果:abcdefgh
# 带分隔符字符串连接函数:concat_ws
用法:select concat_ws('-','hello','world')
实现效果:hello-world
# 数据类型转换函数:cast
用法:select cast(1.8 as int);
实现效果:1
# json解析函数,用来处理json串:get_json_object
用法:select get_json_object('{"name":"tom", "age":"10"}', '$.name');
实现效果:tom
# URL解析函数:parse_url
用法:select parse_url('http://www.baidu.com/path1?key1=value1&key2=value2#Ref1', 'HOST')
实现效果:
当关键字为HOST时,获取到的值为:www.baidu.com
当关键字为PATH时,获取到的值为:/path1
当关键字为QUERY时,获取到的值为:key1=value1&key2=value2
当关键字为QUERY,key1时,获取到的值为:value1

2.自定义函数

当 Hive 提供的内置函数无法满足我们的业务需求时,此时就可以考虑使用用户自定义函数。

自定义函数类别分为以下三种:
(1): UDF(User-Defined-Function): 一进一出

(2): UDAF(User-Defined Aggregation Function): 聚集函数,多进一出,类似于count、max等函数

(3): UDTF(User-Defined Table-Generating Functions): 一进多出,例如lateral view explore()


实现UDF函数注意事项

(1): 需要继承org.apache.hadoop.hive.ql.UDF

(2): 需要实现evaluate函数,且evaluate函数支持重载

(3): UDF必须要有返回类型,可以返回null,但是返回类型不能是void;
UDF中常用Text字符串、LongWritable等类型,不推荐使用java类型;


UDF自定义函数开发实例

step1: 创建Maven工程

step2: 开发Java类集成UDF

step3: 项目打成jar包,上传到Hive的lib目录下

step4: Hive客户端添加打好的jar包

# 进入hive的lib目录下
cd /opt/hadoop/apache-hive-2.7.5-bin/lib

# 给jar包重命名
mv original-hiveudf-1.0-SNAPSHOT.jar udf_upper.jar

# Hive客户端添加jar包
add jar /opt/hadoop/apache-hive-2.7.5-bin/lib/udf_upper.jar

step5: 设置函数与我们自定义函数关联

create temporary function udf_upper as 'cn.itcast.udf.MyUDF';

step6: 使用自定义函数

select udf_upper('how are you?');

# 实际返回结果:实现了首字母大写的功能
How are you?

相关推荐

pyproject.toml到底是什么东西?(py trim)

最近,在Twitter上有一个Python项目的维护者,他的项目因为构建失败而出现了一些bug(这个特别的项目不提供wheel,只提供sdist)。最终,发现这个bug是由于这个项目使用了一个pypr...

BDP服务平台SDK for Python3发布(bdp数据平台)

下载地址https://github.com/imysm/opends-sdk-python3.git说明最近在开发和bdp平台有关的项目,用到了bdp的python的sdk,但是官方是基于p...

Python-for-Android (p4a):(python-for-android p4a windows)

一、Python-for-Android(p4a)简介Python-for-Android(p4a),一个强大的开发工具,能够将你的Python应用程序打包成可在Android设备上运行...

Qt for Python—Qt Designer 概览

前言本系列第三篇文章(QtforPython学习笔记—应用程序初探)、第四篇文章(QtforPython学习笔记—应用程序再探)中均是使用纯代码方式来开发PySide6GUI应用程序...

Python:判断质数(jmu-python-判断质数)

#Python:判断质数defisPrime(n):foriinrange(2,n):ifn%i==0:return0re...

为什么那么多人讨厌Python(为什么python这么难)

Python那么棒,为什么那么多人讨厌它呢?我整理了一下,主要有这些原因:用缩进替代大括号许多人抱怨Python完全依赖于缩进来创建代码块,代码多一点就很难看到函数在哪里结束,那么你就需要把一个函数拆...

一文了解 Python 中带有 else 的循环语句 for-else/while-else

在本文中,我们将向您介绍如何在python中使用带有else的for/while循环语句。可能许多人对循环和else一起使用感到困惑,因为在if-else选择结构中else正常...

python的numpy向量化语句为什么会比for快?

我们先来看看,python之类语言的for循环,和其它语言相比,额外付出了什么。我们知道,python是解释执行的。举例来说,执行x=1234+5678,对编译型语言,是从内存读入两个shor...

开眼界!Python遍历文件可以这样做

来源:【公众号】Python技术Python对于文件夹或者文件的遍历一般有两种操作方法,一种是至二级利用其封装好的walk方法操作:import osfor root,d...

告别简单format()!Python Formatter类让你的代码更专业

Python中Formatter类是string模块中的一个重要类,它实现了Python字符串格式化的底层机制,允许开发者创建自定义的格式化行为。通过深入理解Formatter类的工作原理和使用方法,...

python学习——038如何将for循环改写成列表推导式

在Python里,列表推导式是一种能够简洁生成列表的表达式,可用于替换普通的for循环。下面是列表推导式的基本语法和常见应用场景。基本语法result=[]foriteminite...

详谈for循环和while循环的区别(for循环语句与while循环语句有什么区别)

初九,潜龙勿用在刚开始使用python循环语句时,经常会遇到for循环和while循环的混用,不清楚该如何选择;今天就对这2个循环语句做深入的分析,让大家更好地了解这2个循环语句以方便后续学习的加深。...

Python编程基础:循环结构for和while

Python中的循环结构包括两个,一是遍历循环(for循环),一是条件循环(while循环)。遍历循环遍历循环(for循环)会挨个访问序列或可迭代对象的元素,并执行里面的代码块。foriinra...

学习编程第154天 python编程 for循环输出菱形图

今天学习的是刘金玉老师零基础Python教程第38期,主要内容是python编程for循环输出菱形※。(一)利用for循环输出菱形形状的*号图形1.思路:将菱形分解为上下两个部分三角形图案,分别利用...

python 10个堪称完美的for循环实践

在Python中,for循环的高效使用能显著提升代码性能和可读性。以下是10个堪称完美的for循环实践,涵盖数据处理、算法优化和Pythonic编程风格:1.遍历列表同时获取索引(enumerate...