これにより、データの挿入に時間がかかりすぎるなどの懸念に対処できます。毎回テーブルを作り直すように理解しました。したがって、そうする代わりに、テーブルにまだ存在しない新しいデータをフェッチするだけです。データがレポートテーブルにすでに存在するかどうかを調べるのもコストがかかる可能性があるため、デルタを取得するだけです。方法は次のとおりです。
すべてのテーブルに、次のような列が必要であることを確認してください。
ALTER TABLE yourTable ADD COLUMN created timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
もちろん、このON UPDATE
条項はオプションですが、変更を追跡する必要があるかどうかはわかりません。もしそうなら、私にコメントをください、そして私はあなたがあなたのデータの歴史を保つことができる解決策をあなたに提供することができます。
ここで、いくつかのメタ情報を保持する小さなテーブルが必要です。
CREATE TABLE deltameta (tablename varchar(50), LSET timestamp, CET timestamp);
LSETはLastSuccessfulExtraction Timeの略で、CETはCurrentExtractionTimeの略です。
データを取得すると、次のように機能します。
UPDATE deltameta SET CET = CURRENT_TIMESTAMP WHERE tablename = 'theTableFromWhichYouGetData';
SELECT @varLSET := LSET, @varCET := CET FROM deltameta WHERE tablename = 'theTableFromWhichYouGetData';
INSERT INTO yourReportTable (
SELECT whatever FROM aTable WHERE created >= @varLSET AND created < @varCET
);
UPDATE deltameta SET LSET = CET WHERE tablename = 'theTableFromWhichYouGetData';
スクリプトの挿入中に問題が発生すると停止し、次にスクリプトを実行したときに同じデータが取得されます。さらに、ロールバックする必要がある場合は、ここでトランザクションを操作できます。繰り返しになりますが、これについてサポートが必要な場合はコメントを書き込んでください。