我在sql server中有一个使用以下select语句的进程。
SELECT HASHBYTES('SHA1', CAST('4100119300' AS NVARCHAR(100))) AS StringConverted这将为您提供: 0x66A2F63C04A3A85347AD2F5CD99F1113F1BDD9CE
我一直在尝试在Spark SQL中重新创建同样的结果。
我在Spark里试过这个sha1(encode('4100119300','utf-8'))
但其结果是: b4cf5aae8ce3dc1673da4949cfdf2edfa33fdba4
在我的测试期间,如果我删除sql区域中的强制转换,结果在spark中是相同的。我看到的问题是,在spark中,你不能指定字符串的大小,或者可能在过程中改变了编码。我已经在sql中使用nvarchar(100)散列了数据,并且不可能将其从spark等效项中删除。
有什么建议吗?
发布于 2020-12-10 16:09:36
你看到这些不同之处了吗?
SELECT HASHBYTES('SHA1', CAST('4100119300' AS NVARCHAR(100))) AS StringConverted
-- 0x66A2F63C04A3A85347AD2F5CD99F1113F1BDD9CESELECT HASHBYTES('SHA1', '4100119300') AS StringConverted
-- 0xB4CF5AAE8CE3DC1673DA4949CFDF2EDFA33FDBA4为了将varbytes存储为字符串,我使用带style = 1标志(CAST & CONVERT)的CONVERT
SELECT CONVERT(VARCHAR(100), HASHBYTES('SHA1', '4100119300'), 1) AS StringConverted这个就是你要找的。它是没有0x前缀的小写Sparks b4cf5aae8ce3dc1673da4949cfdf2edfa33fdba4。
https://stackoverflow.com/questions/65224698
复制相似问题