Hive 函数:内置函数和 UDF [用户定义函数] 示例
函数是为了特定目的而构建的,用于对表列名的操作数执行数学、算术、逻辑和关系等运算。
内建功能
这些是 Hive 中已有的函数。首先,我们必须检查应用程序需求,然后才能在我们的应用程序中使用这些内置函数。我们可以在应用程序中直接调用这些函数。
语法和类型在下一节中提到。
HIVE 中的内置函数类型
- 采集功能
- 日期函数
- 数学函数
- 条件函数
- 字符串函数
- 杂项功能
采集功能
这些函数用于集合。集合是指元素的分组,并返回单个或元素数组,具体取决于函数名称中提到的返回类型。
返回类型 | 功能名称 | 描述 |
---|---|---|
INT | 尺寸(地图) | 它将获取并给出地图类型中的组件编号 |
INT | 大小(数组) | 它将获取并给出数组类型中的元素编号 |
大批 | Map_keys(地图) | 它将获取并返回一个包含输入映射的键的数组。这里的数组是无序的 |
大批 | Map_values(地图) | 它将获取并给出一个包含输入映射值的数组。这里的数组是无序的 |
大批 | Sort_array(数组) | 按数组和元素的升序对输入数组进行排序并返回 |
日期函数
这些用于执行日期操作和日期类型从一种类型到另一种类型的转换:
功能名称 | 返回类型 | 描述 |
---|---|---|
Unix_Timestamp() | BigInt有 | 我们将获得最新 Unix的 时间戳(以秒为单位) |
To_date(字符串时间戳) | 绳子 | 它将获取并给出时间戳字符串的日期部分: |
年份(字符串日期) | INT | 它将获取日期或时间戳字符串中的年份部分 |
季度(日期/时间戳/字符串) | INT | 它将获取并给出 1 到 4 范围内的日期、时间戳或字符串的季度 |
月(字符串日期) | INT | 它将给出日期或时间戳字符串的月份部分 |
小时(字符串日期) | INT | 它将获取并给出时间戳的小时数 |
分钟(字符串日期) | INT | 它将获取并给出时间戳的分钟数 |
Date_sub(字符串开始日期,int 天数) | 绳子 | 它将获取并减去开始日期的天数 |
当前日期 | 日期 | 它将在查询评估开始时获取并提供当前日期 |
LAST _day(字符串日期) | 绳子 | 它将获取并给出日期所属月份的最后一天 |
trunc(字符串日期,字符串格式) | 绳子 | 它将获取并给出按格式指定的单位截断的日期。
其中支持的格式: 月/月,年/年/年。 |
数学函数
这些函数用于数学 Operations。我们不需要创建 UDF,而是在 Hive 中使用一些内置数学函数。
功能名称 | 返回类型 | 描述 |
---|---|---|
圆形(双X) | 双盒套装 | 它将获取并返回 X 的四舍五入的 BIGINT 值 |
圆形(DOUBLE X,INT d) | 双盒套装 | 它将获取并返回四舍五入到小数点后 d 位的 X |
圆形(DOUBLE X) | 双盒套装 | 它将使用 HALF_EVEN 舍入模式获取并返回 X 的舍入 BIGINT 值 |
地板(DOUBLE X) | 大数据 | 它将获取并返回等于或小于 X 值的最大 BIGINT 值 |
天花板(DOUBLE a),天花板(DOUBLE a) | 大数据 | 它将获取并返回等于或大于 X 值的最小 BIGINT 值 |
rand(),rand(INT 种子) | 双盒套装 | 它将获取并返回一个从 0 到 1 均匀分布的随机数 |
条件函数
这些函数用于条件值检查。
功能名称 | 返回类型 | 描述 |
---|---|---|
if(布尔测试条件,T 值 True,T 值 FalseOrNull) | T | 当以下情况时,它将获取并返回 True 值 测试条件为真, 否则给出值 False 或 Null。 |
ISNULL(X) | 布尔 | 如果 X 为 NULL,它将获取并返回 true,否则返回 false。 |
不为空(X) | 布尔 | 如果 X 不为 NULL,它将获取并返回 true,否则返回 false。 |
字符串函数
字符串操作和字符串操作这些函数都可以调用。
功能名称 | 返回类型 | 描述 |
---|---|---|
反转(字符串 X) | 绳子 | 它将给出 X 的反转字符串 |
rpad(字符串 str,整数长度,字符串 pad) | 绳子 | 它将获取并给出 str,用 pad 向右填充,长度为 length(整数值) |
rtrim(字符串 X) | 绳子 | 它将获取并返回从 X 的末尾(右侧)修剪空格后得到的字符串 举个例子, rtrim(' results ') 导致 ' results' |
空格(INT n) | 绳子 | 它将获取并给出一个由 n 个空格组成的字符串。 |
拆分(STRING str,STRING pat) | 排列 | 围绕 pat 分割 str (pat 是一个正则表达式)。 |
Str_to_map(文本[, 分隔符1, 分隔符2]) | 地图 | 它将使用两个分隔符将文本拆分为键值对。 |
UDF(用户定义函数)
在 Hive 中,用户可以定义自己的函数来满足某些客户端需求。这些在 Hive 中称为 UDF。用 Java 对于特定模块。
一些 UDF 是专门为应用程序框架中的代码可重用性而设计的。开发人员将在 Java 并将这些 UDF 与 Hive 集成。
在查询执行过程中,开发人员可以直接使用代码,UDF 将根据用户定义的任务返回输出。它将在编码和执行方面提供高性能。
例如,对于字符串词干提取,我们在 Hive 中没有任何预定义函数。为此,我们可以在 Java无论我们在哪里需要 Stem 功能,我们都可以在 Hive 中直接调用这个 Stem UDF。
这里的词干功能是指从词根派生出单词。就像词干提取算法将单词“wishing”、“wished”和“wishes”简化为词根“wish”。为了执行这种类型的功能,我们可以在 Java 并将其与 蜂房.
根据用例,可以编写 UDF。它将接受并产生不同数量的输入和输出值。
一般类型的 UDF 会接受单个输入值并产生单个输出值。如果在查询中使用 UDF,则结果数据集中的每一行都会调用一次 UDF。
另一方面,它可以接受一组值作为输入并返回单个输出值。