【问题标题】:How to compare two database Teradata and BigQuery tables如何比较两个数据库 Teradata 和 BigQuery 表
【发布时间】:2021-07-29 00:16:46
【问题描述】:

我们有 2 个数据库 - Teradata 和 BigQuery。
我们需要将 Teradata 中所有表的数据与 BigQuery 进行比较

由于表多、数据量大,无法提取数据和进行diff操作。

有可用的工具,如 Jetbrains DataGrip,可以帮助通过 JDBC 连接到 teradata(在没有 db 连接器的情况下)。通过 simba 驱动程序和 OAUTH 连接对 Big Query 也是如此。但这些仍然是非常耗时的活动。
https://www.jetbrains.com/datagrip/quick-start/
https://blog.jetbrains.com/datagrip/2018/07/10/using-bigquery-from-intellij-based-ide/

是否有其他更便宜的选项可用于比较两个数据库?

【问题讨论】:

标签: database google-bigquery teradata datagrip


【解决方案1】:

如何在 BQ 中制作 Teradata-DB 的副本,然后将两者进行比较,如下所示: https://medium.com/google-cloud/bigquery-table-comparison-cea802a3c64d

【讨论】:

  • 由于数据量大,无法通过导出文件复制 Teradata DB。在 BQ 中创建 Teradata-DB 还有其他选择吗?
  • 您可以将 Teradata DB 迁移到 BQ。 cloud.google.com/bigquery-transfer/docs/teradata-migration.
  • 其实这个要求是在迁移过程之后来验证迁移是否成功完成或过程中是否发生任何数据截断/重复/删除
【解决方案2】:

如果源 (Teradata) DB 的内容自迁移以来没有改变,快速验证两个表是否相同的常用方法是计算源和目标中每个表的一些哈希值。

您需要在两个系统中产生相同结果的指纹或哈希函数。我认为 MD5 和 SHA1(可作为 Teradata 的扩展)是不错的选择,但您需要验证它们为每种类型生成相同的值,这对于浮点等某些类型可能会很棘手。

因此,对于每一行,我会按照以下方式计算一些东西 SHA1(CONCAT(string_col1, "**", CAST(int_col2 AS STRING), "**", string_col3)) 然后使用BIT_XOR 聚合它以获得表的单个值,该值不依赖于行的顺序。由于所有的计算都由 DBMS 完成,数据不会离开它,所以计算速度应该比较快。

我会为每张桌子做如下的事情

  • 比较 COUNT(*) 以确保我们的行数相同
  • 如上所述为两个数据库计算单个指纹。
  • 如果两个指纹匹配,则表可能相同。
  • 如果计数或指纹不匹配,请使用慢速路线并通过下载数据查找不匹配。

【讨论】:

    猜你喜欢
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 2011-11-28
    • 1970-01-01
    • 2018-08-21
    相关资源
    最近更新 更多