SQL Server Integration Services - 增量数据加载哈希比较

时间:2010-07-27 18:19:39

标签: ssis hash compare etl

使用SQL Server Integration Services(SSIS)执行增量数据加载,比较要导入的哈希值和现有的行数据。我正在使用这个:

http://ssismhash.codeplex.com/

创建SHA512哈希以进行比较。当尝试使用条件性拆分任务(表达式为NEW_HASH == OLD_HASH)从数据库比较数据导入哈希和现有哈希时,输入表达式时出现以下错误:

The data type "DT_BYTES" cannot be used with binary operator "==". The type of one or both of the operands is not supported for the operation. To perform this operation, one or both operands need to be explicitly cast with a cast operator.

在比较之前尝试将每个列转换为字符串(DT_WSTR,64)会导致截断错误。

有更好的方法可以做到这一点,还是我错过了一些小细节?

由于

3 个答案:

答案 0 :(得分:1)

您是否尝试过将长度扩展到64以上?我相信DT_BYTES有效最多8000个字符。我根据books online article验证了以下是DT_BYTES的合法演员目的地:

  1. DT_I4
  2. DT_UI4
  3. DT_I8
  4. DT_UI8
  5. DT_STR
  6. DT_WSTR
  7. DT_GUID
  8. DT_IMAGE
  9. 我还在BIDS中运行了一个测试,并确认一旦我将它们转换为足够长的数据类型,就可以比较这些值。

答案 1 :(得分:1)

SHA512有点像实际碰撞的机会是1 ^ 2 ^ 256。 SHA512总是输出512位,即64字节。我有类似的情况,我检查传入的二进制文件的哈希值。我使用查找转换而不是条件拆分。

答案 2 :(得分:1)

此帖较旧,但为了帮助其他用户......

答案是在SSIS中,您无法使用==运算符比较二进制数据。

我所看到的是人们最常将哈希值转换(并存储)为varchar或nvarchar,可以在SSIS中进行比较。

我相信其他用户已正确回答了您的“截断”问题。