【问题标题】:SQL Server Integration Services - Incremental data load hash comparisonSQL Server Integration Services - 增量数据加载哈希比较
【发布时间】:2010-07-27 18:19:38
【问题描述】:

使用 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) 会导致截断错误。

有没有更好的方法来做到这一点,还是我遗漏了一些小细节?

谢谢

【问题讨论】:

  • 您是否尝试将其转换为 int?

标签: ssis hash compare etl


【解决方案1】:

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

  1. DT_I4
  2. DT_UI4
  3. DT_I8​​i>
  4. DT_UI8​​i>
  5. DT_STR
  6. DT_WSTR
  7. DT_GUID
  8. DT_IMAGE

我还在 BIDS 中运行了一个测试,并验证在我将它们转换为足够长的数据类型后,比较这些值没有问题。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      这篇文章比较老,但为了帮助其他用户...

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

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

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

      【讨论】:

        猜你喜欢
        • 2018-09-18
        • 2020-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-09
        • 1970-01-01
        • 2012-02-07
        • 1970-01-01
        相关资源
        最近更新 更多