首页 > 解决方案 > 如何比较位于不同系统(BigQuery 和 MySQL)中的具有复合键的两个表?

问题描述

我必须每天使用 MySQL 表中的行更新 BigQuery 表。通常,我比较两个数据库中的最大 ID 并获取不同的行。例如,我在 BigQuery 中有 TableBQ,在 Mysql 中有 TableM,它们具有相同的架构(具有相同名称和数据类型的列)。当我执行“SELECT MAX(ID) from”时,我从 TableM 获得 1005,从 TableBQ 获得 1003,我得出结论 TableBQ 已过时,然后我只向 TableBQ 发送 ID 大于 1003 的行。这很好用使用主键表,但我也需要更新复合键表。

今天我看到两个解决方案:

1)最坏的情况:每天将整个表(可能已经有 1600 万行)插入 BigQuery

2)不是那么糟糕,但可以避免:创建一个主键并使表像其他表一样工作

就我而言,我必须使用两个复合键表,其中一个是由 Wordpress 创建的:wp_term_relationships

标签: mysqldatabasegoogle-bigquery

解决方案


您可以考虑为您的数据使用代理键

在您的情况下,您的表结构具有复合键(自然键)。如果您可以更改您的表,我建议您将顺序代理键添加到您的表中,该表对业务没有意义但对于数据移动是必要的,并为其创建索引。

你可以

ALTER TABLE `mytable` ADD `rowId` INT(8) UNIQUE NOT NULL AUTO_INCREMENT FIRST;

然后您可以使用此列来识别需要移动到目标数据库的数据


推荐阅读