From ee64adf9598fc5bbf0a59a1599f39f0ff1b636fc Mon Sep 17 00:00:00 2001 From: Corie Watson Date: Fri, 16 May 2025 01:30:16 +0100 Subject: [PATCH] fix(firestore-bigquery-change-tracker): keep partition value on delete using old data --- .../src/bigquery/partitioning.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/firestore-bigquery-export/firestore-bigquery-change-tracker/src/bigquery/partitioning.ts b/firestore-bigquery-export/firestore-bigquery-change-tracker/src/bigquery/partitioning.ts index 1d3a468fe..7e309df91 100644 --- a/firestore-bigquery-export/firestore-bigquery-change-tracker/src/bigquery/partitioning.ts +++ b/firestore-bigquery-export/firestore-bigquery-change-tracker/src/bigquery/partitioning.ts @@ -1,5 +1,5 @@ import { FirestoreBigQueryEventHistoryTrackerConfig } from "."; -import { FirestoreDocumentChangeEvent } from ".."; +import { ChangeType, FirestoreDocumentChangeEvent } from ".."; import * as firebase from "firebase-admin"; import * as logs from "../logs"; @@ -7,7 +7,6 @@ import * as bigquery from "@google-cloud/bigquery"; import * as functions from "firebase-functions"; import { getNewPartitionField } from "./schema"; import { BigQuery, TableMetadata } from "@google-cloud/bigquery"; - import { PartitionFieldType } from "../types"; export class Partitioning { @@ -195,11 +194,16 @@ export class Partitioning { Delete changes events have no data, return early as cannot partition on empty data. **/ getPartitionValue(event: FirestoreDocumentChangeEvent) { - if (!event.data) return {}; + // When old data is disabled and the operation is delete + // the data and old data will be null + if (event.data === null && event.oldData === null) return {}; const firestoreFieldName = this.config.timePartitioningFirestoreField; const fieldName = this.config.timePartitioningField; - const fieldValue = event.data[firestoreFieldName]; + const fieldValue = + event.operation === ChangeType.DELETE + ? event.oldData[firestoreFieldName] + : event.data[firestoreFieldName]; if (!fieldName || !fieldValue) { return {};