【问题标题】:Presto MD5 Hash for multiple Columns in DB Table数据库表中多列的 Presto MD5 哈希
【发布时间】:2017-09-15 13:18:53
【问题描述】:

经过两个小时的反复试验,我面临着一个让我发疯的挑战......

我需要使用 presto 对关系表的至少两列进行哈希处理(实际上是使用使用 presto 引擎的 Amazon Athena)。

我现在的状态是这样的:

SELECT concat(lower(to_hex(md5(to_utf8(trim(column1))))),
              lower(to_hex(md5(to_utf8(trim(column2)))))) AS HK
FROM table
limit 10

这个问题是,它首先对列进行哈希处理,然后将它们连接起来,最终看起来像这样,因为它连接了哈希:

8f9bfe9d1345237cb3b2b205864da075ce8ae9da5b7cd6c3df2929543a9af92d

而不是先连接字符串然后散列它应该像这样结束:

8f9bfe9d1345237cb3b2b205864da075

对于如何解决此问题的任何想法,我将不胜感激。

编辑:

我有一个解决方案,但仅在不使用 trim() 函数的情况下,查询不起作用并导致错误消息

INVALID_FUNCTION_ARGUMENT:必须有两个或多个串联参数

当前查询:

SELECT lower(to_hex(md5(to_utf8(concat(user, email))))) AS UserMailHK FROM table limit 10

对此有什么想法吗?

【问题讨论】:

  • 您使用的是哪个 dbms?
  • 输入数据来自存储在 AWS S3 上的 CSV 文件。我刚刚在 Athena 中创建了一个表,并在该表上运行查询。
  • 你试过SELECT lower(to_hex(md5(to_utf8(concat(trim(user), trim(email)))))) AS UserMailHK FROM table吗?
  • 那行得通。我之前尝试过,但我没有输出,它只是空白。但是感谢您的回答,这就是解决方案!

标签: sql hash md5 presto amazon-athena


【解决方案1】:

感谢 Piotr,我找到了解决方案!

SELECT lower(to_hex(md5(to_utf8(concat(trim(user), trim(email)))))) AS UserMailHK FROM table limit 10 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    • 2018-02-01
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    相关资源
    最近更新 更多