如何将hashbytes字符串从sql转换为spark等效字符串

5q4ezhmt  于 2021-05-16  发布在  Spark
关注(0)|答案(1)|浏览(419)

我在SQLServer中有一个使用以下select语句的进程

SELECT  HASHBYTES('SHA1', CAST('4100119300' AS NVARCHAR(100))) AS StringConverted

这将为您提供:0x66a2f63c04a3a85347ad2f5cd99f1113f1bdd9ce
我一直在尝试在sparksql中重新创建同样的结果,但运气不好。
我试过了 sha1(encode('4100119300','utf-8')) Spark
但其结果是:b4cf5aae8ce3dc1673da49cfdf2edfa33fdba4
在我的测试中,如果我删除sql区域中的强制转换,那么spark中的结果是相同的。我看到的问题是,在spark中,您不能指定字符串的大小,或者可能正在更改过程中的编码。我已经用nvarchar(100)散列了sql中的数据,不可能从spark等价物中删除它。
有什么建议吗?

pxy2qtax

pxy2qtax1#

你看到这些区别了吗?

SELECT HASHBYTES('SHA1', CAST('4100119300' AS NVARCHAR(100))) AS StringConverted
-- 0x66A2F63C04A3A85347AD2F5CD99F1113F1BDD9CE
SELECT HASHBYTES('SHA1', '4100119300') AS StringConverted
-- 0xB4CF5AAE8CE3DC1673DA4949CFDF2EDFA33FDBA4

要将varbytes存储为字符串,请使用convert with style = 1 标志(转换(&C)

SELECT CONVERT(VARCHAR(100), HASHBYTES('SHA1', '4100119300'), 1) AS StringConverted

这就是你要找的。只是Spark而已 b4cf5aae8ce3dc1673da4949cfdf2edfa33fdba4 小写,不带 0x 前缀。

相关问题