使用配置单元,我想对查询中的整行进行哈希运算。
我尝试了以下方法(不要介意${},查询是从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”附近的输入
1条答案
按热度按时间njthzxwz1#
concat
所有列,然后md5()
在连接列上。我们还可以定义一个包含所有列名的变量,然后在
concat
功能!Try with concat(*):
```select md5(concat(*)) as md5 from (select string("abc")a,int("2")b)e;
+--------------------------------+
|md5 |
+--------------------------------+
|63872b5565b2179bd72ea9c339192543|
+--------------------------------+