hive - 如何在 Hive 中对整行进行 md5 处理?
问题描述
使用 Hive,我想对查询中的整行进行哈希处理。
我尝试了以下方法(不要介意 ${xxx},查询是从 bash 脚本构建的):
SELECT md5(*) FROM ${DATABASE_NAME_SUFFIXE}.${DATABASE_PREFIXE}_${TABLE_NAME} WHERE
${TABLE_DATE_FIELD} <= '${LIMIT_DATE}' ORDER BY ${CREATION_DATE_FIELD} DESC LIMIT 1
这将返回以下错误:
第 1:7 行错误的参数“md5”:类 org.apache.hadoop.hive.ql.udf.UDFMd5 没有匹配方法与 (bigint, int, varchar(128), timestamp, timestamp, varchar(64), varchar( 64)、varchar(64)、int、bigint、int、varchar(50)、varchar(255)、bigint、时间戳、时间戳、varchar(64)、bigint、时间戳、时间戳、varchar(64)、int、int、 char(38)、varchar(40)、varchar(1))。可能的选择:FUNC(二进制) FUNC(字符串)
如果我从错误和 md5 函数的文档中正确理解,我需要传递二进制或字符串。我怎样才能做到这一点?
编辑:也试过:
SELECT md5(SELECT * FROM ${DATABASE_NAME_SUFFIXE}.${DATABASE_PREFIXE}_${TABLE_NAME} WHERE ${TABLE_DATE_FIELD} <= '${LIMIT_DATE}' ORDER BY ${CREATION_DATE_FIELD} DESC LIMIT 1)
返回
无法识别函数规范中“SELECT”“*”“FROM”附近的输入
解决方案
concat
所有列,然后md5()
在连接列上。
select md5(concat(a,b)) as md5 from (select string("abc")a,int("2")b)e;
+--------------------------------+
|md5 |
+--------------------------------+
|63872b5565b2179bd72ea9c339192543|
+--------------------------------+
我们还可以定义具有所有列名的变量,然后在concat
函数中使用!
Try with concat(*):
select md5(concat(*)) as md5 from (select string("abc")a,int("2")b)e;
+--------------------------------+
|md5 |
+--------------------------------+
|63872b5565b2179bd72ea9c339192543|
+--------------------------------+
推荐阅读
- database-design - 如何在具有多个关系的 GraphDb (neo4j) 中对“排序顺序”进行建模?
- angular - 我可以使用 FILE 对象将哪种 mime 类型用于 .MSG 文件
- r - 删除重复值,优先从最大组中删除
- hyperledger-fabric - Hyperledger Fabric 中锚交易文件的目的是什么?
- python - 使用 Python 通过代理连接到 Selenium webdriver URL
- php - 如何同时从具有不同值的一列中获取弹性搜索的结果?
- r - 为什么在执行快速傅里叶变换时需要遮罩?
- r - 使用 wilcoxonpairedR 测试 R 中的效应大小
- r - 有没有办法逐行读取excel文件
- java - 使用 Lombok 创建类后如何修复编译器错误