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 将为结果数据集中的每一行调用一次。
换句话说,它也可以接受一组值作为输入并返回单个输出值。