如何在配置单元中md5整行?

toe95027  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(407)

使用配置单元,我想对查询中的整行进行哈希运算。
我尝试了以下方法(不要介意${},查询是从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行:错误的参数“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,timestamp,timestamp,varchar(64),bigint,timestamp,timestamp,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”附近的输入

njthzxwz

njthzxwz1#

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|
+--------------------------------+

相关问题