Skip to content

Commit 5c7413c

Browse files
jmwskilaurenzlong
authored andcommitted
fix(firestore-bigquery-export): fix occasional duplicate entries in BigQuery (#118)
1 parent 28f7ad4 commit 5c7413c

File tree

8 files changed

+29
-16
lines changed

8 files changed

+29
-16
lines changed

.prettierignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ package-lock.json
77
# generated files
88
README.md
99
**/functions/lib/**
10+
**/lib/**
1011
**/dist/**
1112

1213
# extension install md files

firestore-bigquery-export/firestore-bigquery-change-tracker/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"url": "github.com/firebase/extensions.git",
66
"directory": "firestore-bigquery-export/firestore-bigquery-change-tracker"
77
},
8-
"version": "1.0.0",
8+
"version": "1.0.1",
99
"description": "Core change-tracker library for Cloud Firestore Collection BigQuery Exports",
1010
"main": "./lib/index.js",
1111
"scripts": {

firestore-bigquery-export/firestore-bigquery-change-tracker/src/bigquery/index.ts

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,29 +51,38 @@ export class FirestoreBigQueryEventHistoryTracker
5151

5252
async record(events: FirestoreDocumentChangeEvent[]) {
5353
await this.initialize();
54-
54+
const options = {
55+
raw: true,
56+
};
5557
const rows = events.map((event) => {
56-
// This must match firestoreToBQTable().
5758
return {
58-
timestamp: event.timestamp,
59-
event_id: event.eventId,
60-
document_name: event.documentName,
61-
operation: ChangeType[event.operation],
62-
data: JSON.stringify(event.data),
59+
insertId: event.eventId,
60+
json: {
61+
timestamp: event.timestamp,
62+
event_id: event.eventId,
63+
document_name: event.documentName,
64+
operation: ChangeType[event.operation],
65+
data: JSON.stringify(event.data),
66+
},
6367
};
6468
});
65-
await this.insertData(rows);
69+
await this.insertData(rows, options);
6670
}
6771

6872
/**
6973
* Inserts rows of data into the BigQuery raw change log table.
7074
*/
71-
private async insertData(rows: bigquery.RowMetadata[]) {
75+
private async insertData(rows: bigquery.RowMetadata[], options: object) {
76+
const payload = {
77+
skipInvalidRows: false,
78+
ignoreUnkownValues: false,
79+
rows: rows,
80+
};
7281
try {
7382
const dataset = this.bq.dataset(this.config.datasetId);
7483
const table = dataset.table(this.rawChangeLogTableName());
7584
logs.dataInserting(rows.length);
76-
await table.insert(rows);
85+
await table.insert(payload, options);
7786
logs.dataInserted(rows.length);
7887
} catch (e) {
7988
// Reinitializing in case the destintation table is modified.

firestore-bigquery-export/firestore-bigquery-change-tracker/tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@
88
"target": "es6"
99
},
1010
"compileOnSave": true,
11-
"include": ["src"]
11+
"include": ["src"],
12+
"exclude": ["**/node_modules/@types/jest/**"]
1213
}

firestore-bigquery-export/functions/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"main": "lib/index.js",
1515
"dependencies": {
1616
"firebase-admin": "~7.0.0",
17-
"@firebaseextensions/firestore-bigquery-change-tracker": "^1.0.0",
17+
"@firebaseextensions/firestore-bigquery-change-tracker": "^1.0.1",
1818
"firebase-functions": "^2.3.0",
1919
"sql-formatter": "^2.3.3"
2020
},

firestore-bigquery-export/scripts/gen-schema-view/tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@
99
"types": ["node", "mocha", "chai"]
1010
},
1111
"compileOnSave": true,
12-
"include": ["src"]
12+
"include": ["src"],
13+
"exclude": ["**/node_modules/@types/jest/**"]
1314
}

firestore-bigquery-export/scripts/import/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
"author": "Jan Wyszynski <wyszynski@google.com>",
2525
"license": "Apache-2.0",
2626
"dependencies": {
27-
"@firebaseextensions/firestore-bigquery-change-tracker": "^1.0.0",
27+
"@firebaseextensions/firestore-bigquery-change-tracker": "^1.0.1",
2828
"@google-cloud/bigquery": "^2.1.0",
2929
"firebase-admin": "^7.1.1",
3030
"firebase-functions": "^2.2.1",

firestore-bigquery-export/scripts/import/tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@
88
"target": "es6"
99
},
1010
"compileOnSave": true,
11-
"include": ["src"]
11+
"include": ["src"],
12+
"exclude": ["**/node_modules/@types/jest/**"]
1213
}

0 commit comments

Comments
 (0)