【问题标题】:Split data in Amazon Athena / Presto by varchar column按 varchar 列拆分 Amazon Athena / Presto 中的数据
【发布时间】:2018-10-06 02:41:43
【问题描述】:

我想通过 varchar 列在相似部分上拆分 Amazon Athena 数据库中的数据。如果我可以将 varchar 转换为 integer 我会使用 some_hash_function(data) mod n。但是 Athena 的哈希函数返回 varbinary 并且不能转换为 integer

那么,有没有可能用另一种方式解决这个问题?

【问题讨论】:

    标签: presto amazon-athena


    【解决方案1】:

    您可以使用 from_big_endian_64 函数将 8 字节的 varbinary 转换为 bigint。这是一个完整的例子:

    select from_big_endian_64(substr(sha256(to_utf8('test')), 1, 8));

    【讨论】:

    • substr 不能在 Athena 中直接在二进制数据类型上工作,因此您还需要转换为字符串然后再返回(to_hex,from_hex)
    【解决方案2】:

    一般来说,Dain 的答案是正确的,但有一点需要注意:因为substrvarchar 作为第一个参数,但sha256 返回varbinary,所以代码会失败。

    这是一个可行的替代方案:

    from_big_endian_64(xxhash64(to_utf8(user_id)))

    【讨论】:

    • substr 不能在 Athena 中直接在二进制数据类型上工作,因此您还需要转换为字符串然后再返回(to_hex,from_hex)例如from_big_endian_64(from_hex(substr(to_hex(md5(to_utf8(user_id || 'experiment_name'))),1,16)))
    猜你喜欢
    • 2019-05-13
    • 2020-09-11
    • 2021-09-10
    • 2020-02-14
    • 2019-10-03
    • 2021-05-07
    • 2021-02-19
    • 1970-01-01
    • 2019-11-08
    相关资源
    最近更新 更多