如何在 GCS 中的增量表之上创建 BQ 外部表并仅显示最新快照

Posted

技术标签:

【中文标题】如何在 GCS 中的增量表之上创建 BQ 外部表并仅显示最新快照【英文标题】:How to create an BQ external table on top of the delta table in GCS and show only latest snapshot 【发布时间】:2021-03-29 17:57:11 【问题描述】:

我正在尝试在增量表之上创建一个外部 BQ 外部表,该表使用谷歌存储作为存储层。在增量表上,我们执行包含删除的 DML。

我可以在所有增量文件都存在的 gs 存储桶上创建一个 BQ 外部表。但是,它甚至会拉取删除记录,因为 BQ 外部表无法读取 delta 的事务日志,其中说明要考虑哪些 parquet 文件以及要删除哪些文件。

除了以编程方式将数据从 delta 复制到 BQ 之外,还有什么方法可以将 BQ 中 delta 表(gs 位置)的最新快照公开为外部表?

【问题讨论】:

您的文件有命名约定吗?您的文件更新频率是多少? 【参考方案1】:

我也在开发这种管道,我们将我们的 delta Lake 文件转储到 GCS 中,并将其呈现在 Bigquery 上。从您的 GCS 增量文件生成清单文件将根据您的增量文件上当前设置的版本为您提供最新的快照。然后,您需要创建一个自定义脚本来解析该清单文件以获取文件列表,然后运行提及这些文件的 bq 加载。

val deltaTable = DeltaTable.forPath(<path-to-delta-table>)
deltaTable.generate("symlink_format_manifest")

【讨论】:

以上是关于如何在 GCS 中的增量表之上创建 BQ 外部表并仅显示最新快照的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 最佳 ETL 方法(外部表和视图与数据流)

数据流 GCS 到 BQ 问题

在 gcs 上使用 parquet 文件创建新的大查询外部表时。显示错误

从 GCS 获取海量 csv 文件到 BQ

将 CSV 从 GCS 批量加载到 BigQuery 时,表数据是增量查看还是仅在所有文件加载后才可查看?

具有目标表的bq查询的定价