删除 Firestore 到 BigQuery 扩展的更改日志中的旧行

问题描述 投票:0回答:1

我正在使用 Firebase Extension Stream Firestore to BigQuery 将数据导出到 BQ。 它工作得很好,我已经使用它好几年了。 但是,表大小开始变大,导致查询成本增加。 我有由此和 npx @firebaseextensions/fs-bq-schema-views 创建的下表:

  • mytable_raw_changelog(1,327,594 行)
  • mytable_raw_latest(55,329 行)
  • mytable_schema_changelog(1,332,454 行)
  • mytable_schema_latest(55,745 行,3.2GB 查询)

mytable_schema_latest 表中的单个 SELECT 现在可以处理 3.2GB

我能想到的选项是

  1. 从 _changelog 中删除不再需要的旧行
  2. 使用 Firebase BQ 扩展配置添加时间分区
  3. 创建一个作业将 mytable_schema_latest 复制到另一个表进行查询(不进行历史更改)

我希望选择选项 1 - 暂时删除旧行,因为这似乎是最简单的。 有推荐的方法或任何关于如何执行此操作的指南吗?

我只想删除在文档更新后的特定日期之前发生的旧历史更改。

在删除它们之前将它们复制到历史表中也可能是一个好主意,以防我将来需要它们。

firebase google-cloud-firestore google-bigquery firebase-extensions
1个回答
0
投票

要创建给定表的“备份”,您只需运行查询,然后使用 保存结果 >> BigQuery Table 即可保存到新表。现在您有了一个“备份”,如果出现问题,您可以从这个新表中恢复。

我认为以下 SQL 语句可能会为您删除“旧”行:

DELETE FROM your_dataset.your_table
  WHERE STRUCT(document_id, timestamp) NOT IN (
      SELECT AS STRUCT document_id, MAX(timestamp) AS timestamp
      FROM your_dataset.your_table
      GROUP BY document_id
  )
© www.soinside.com 2019 - 2024. All rights reserved.