Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何比较位于不同系统(BigQuery和MySQL)中具有复合键的两个表?_Mysql_Database_Google Bigquery - Fatal编程技术网

如何比较位于不同系统(BigQuery和MySQL)中具有复合键的两个表?

如何比较位于不同系统(BigQuery和MySQL)中具有复合键的两个表?,mysql,database,google-bigquery,Mysql,Database,Google Bigquery,我必须每天用MySQL表中的行更新BigQuery表。通常,我比较两个数据库中的max ID,得到不同的行。例如,我在BigQuery中有TableBQ,在Mysql中有TableM,它们具有相同的模式(具有相同名称和数据类型的列)。当我执行“从中选择最大值(ID)”时,我从TableM中得到1005,从TableBQ中得到1003,我断定TableBQ已过时,然后我只向TableBQ发送ID大于1003的行。这对主键表来说很好,但我也需要更新复合键表 今天,我看到两种解决方案: 1) 最糟糕的

我必须每天用MySQL表中的行更新BigQuery表。通常,我比较两个数据库中的max ID,得到不同的行。例如,我在BigQuery中有TableBQ,在Mysql中有TableM,它们具有相同的模式(具有相同名称和数据类型的列)。当我执行“从中选择最大值(ID)”时,我从TableM中得到1005,从TableBQ中得到1003,我断定TableBQ已过时,然后我只向TableBQ发送ID大于1003的行。这对主键表来说很好,但我也需要更新复合键表

今天,我看到两种解决方案:

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

2) 还不错,但可以避免:创建一个主键并使表像其他表一样工作


在我的例子中,我必须使用两个组合密钥表,其中一个是由WordPress:

< P>创建的。您可以考虑使用<强>代理密钥< /强>。 在本例中,表结构具有复合键(自然键)。如果您可以更改表,我建议您向表中添加顺序代理键,该键对业务没有意义,但对数据移动是必要的,并为其创建索引

你可以

ALTER TABLE `mytable` ADD `rowId` INT(8) UNIQUE NOT NULL AUTO_INCREMENT FIRST;
然后,您可以使用此列来标识需要移动到目标数据库的数据