Hive 函数:内置函数和 UDF [用户定义函数] 示例


函数是为执行数学、算术、逻辑和关系运算等特定目的而构建的,这些运算作用于表列名上的操作数。

内置函数

这些是Hive中已有的函数。首先,我们需要检查应用程序需求,然后才能在我们的应用程序中使用这些内置函数。我们可以在应用程序中直接调用这些函数。

语法和类型在下一节中说明。

Hive 中内置函数的类型

  • 集合函数
  • 日期函数
  • 数学函数
  • 条件函数
  • 字符串函数
  • 杂项函数

集合函数

这些函数用于集合。集合是指元素的组合,并根据函数名称中指定的返回类型返回单个元素或元素数组。

返回类型 函数名 描述
INT size(Map<K.V>) 它将获取并返回映射类型中的组件数
INT size(Array<T>) 它将获取并返回数组类型中的元素数
Array<K> Map_keys(Map<K.V>) 它将获取并返回一个包含输入映射键的数组。此处数组是无序的
Array<V> Map_values(Map<K.V>) 它将获取并返回一个包含输入映射值的数组。此处数组是无序的
Array<t> Sort_array(Array<T>) 按数组和元素的升序对输入数组进行排序并返回

日期函数

这些用于执行日期操作和日期类型的转换

函数名 返回类型 描述
Unix_Timestamp() BigInt 我们将以秒为单位获取当前的 Unix 时间戳
To_date(string timestamp) string 它将获取并返回时间戳字符串的日期部分
year(string date) INT 它将获取并返回日期或时间戳字符串的年份部分
quarter(date/timestamp/string) INT 它将获取并返回日期、时间戳或字符串的年份季度,范围为 1 到 4
month(string date) INT 它将返回日期或时间戳字符串的月份部分
hour(string date) INT 它将获取并返回时间戳的小时
minute(string date) INT 它将获取并返回时间戳的分钟
Date_sub(string starting date, int days) string 它将获取并返回从起始日期减去指定天数
Current_date date 它将在查询评估开始时获取并返回当前日期
LAST _day(string date) string 它将获取并返回日期所属月份的最后一天
trunc(string date, string format) string 它将获取并返回根据格式截断的日期。

在此支持的格式

MONTH/MON/MM, YEAR/YYYY/YY。

数学函数

这些函数用于数学运算。我们有一些内置的 Hive 数学函数,而不是创建 UDF。

函数名 返回类型 描述
round(DOUBLE X) DOUBLE 它将获取并返回 X 的四舍五入的 BIGINT 值
round(DOUBLE X, INT d) DOUBLE 它将获取并返回四舍五入到 d 位小数的 X
bround(DOUBLE X) DOUBLE 它将使用 HALF_EVEN 四舍五入模式获取并返回 X 的四舍五入的 BIGINT 值
floor(DOUBLE X) BIGINT 它将获取并返回小于或等于 X 值的最大 BIGINT 值
ceil(DOUBLE a), ceiling(DOUBLE a) BIGINT 它将获取并返回大于或等于 X 值的最小 BIGINT 值
rand(), rand(INT seed) DOUBLE 它将获取并返回一个在 0 到 1 之间均匀分布的随机数

条件函数

这些函数用于条件值检查。

函数名 返回类型 描述
if(Boolean testCondition, T valueTrue, T valueFalseOrNull) T
测试条件为真时,它将获取并给出 True 值,
否则给出 False 或 Null 值。
ISNULL( X) 布尔值 如果 X 为 NULL,它将获取并返回 true,否则返回 false。
ISNOTNULL(X ) 布尔值 如果 X 不为 NULL,它将获取并返回 true,否则返回 false。

字符串函数

字符串操作和字符串运算,可以调用这些函数。

函数名 返回类型 描述
reverse(string X) string 它将返回 X 的反转字符串
rpad(string str, int length, string pad) string 它将获取并返回 str,并使用 pad 右填充至 length(整数值)
rtrim(string X) string 它将获取并返回从 X 的末尾(右侧)删除空格后的字符串
例如,rtrim(‘ results ‘) 的结果是 ‘ results’
space(INT n) string 它将获取并返回一个包含 n 个空格的字符串。
split(STRING str, STRING pat) array 围绕 pat(pat 是一个正则表达式)分割 str。
Str_to_map(text[, delimiter1, delimiter2]) map<String ,String> 它将使用两个分隔符将文本拆分成键值对。

UDF(用户定义函数)

在 Hive 中,用户可以定义自己的函数来满足特定的客户需求。这些被称为 Hive 中的 UDF。用户定义的函数是用 Java 编写的,用于特定模块。

一些 UDF 专门为应用程序框架中的代码重用而设计。开发人员将用 Java 开发这些函数,并将这些 UDF 与 Hive 集成。

在查询执行期间,开发人员可以直接使用代码,UDF 将根据用户定义的任务返回输出。它将在编码和执行方面提供高性能。

例如,对于字符串词干提取,Hive 中没有预定义的函数。为此,我们可以在 Java 中编写 stem UDF。在任何需要 Stem 功能的地方,我们都可以直接在 Hive 中调用此 Stem UDF。

这里的 stem 功能意味着从词根词派生单词。它就像词干提取算法一样,将“wishing”、“wished”和“wishes”这些词简化为词根“wish”。要执行此类功能,我们可以用 Java 编写 UDF 并将其集成到 Hive 中。

根据用例,可以编写 UDF。它们可以接受和产生不同数量的输入和输出值。

通用类型的 UDF 将接受单个输入值并产生单个输出值。如果在查询中使用 UDF,那么 UDF 将为结果数据集中的每一行调用一次。

换句话说,它也可以接受一组值作为输入并返回单个输出值。