如何更好地缓存bigquery表来快速查找单个行?

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

我在bigquery中有一个原始数据表,其中包含数亿行。我每24小时运行一次计划的查询,以产生一些聚合结果,从而使表达到3,300万行(6gb)的标记范围,但可能会缓慢增长到其当前大小的大约两倍。

我需要一种方法,通过ID在单独的事件驱动管道中一次通过ID快速访问查找该聚合表的行。也就是说,流程通知某人A刚刚采取了一项行动,我们从汇总表中了解到该人的历史信息吗?

很明显,bigquery是生成聚合表的正确工具,但对于快速查找却不是正确的工具。因此,我需要将其偏移到诸如firestore之类的辅助数据存储中。但是,这样做的最佳过程是什么?

我可以设想几种策略:

1)将agg表的转储计划到GCS。启动数据流作业以将gcs转储的内容流式传输到pubsub。创建一个无服务器功能来侦听pubsub主题并将行插入到firestore中。

2)计算引擎上运行时间较长的脚本,该脚本仅直接从BQ流表并运行插入。 (似乎比策略1慢)

3)安排将agg表转储到GCS。格式化它可以通过gcloud beta firestore import gs://[BUCKET_NAME]/[EXPORT_PREFIX]/

将其直接导入到Firestore

4)也许某种数据流作业直接针对bigquery表执行查找?以前没有玩过这种方法。不知道有多昂贵/性能。

5)我没有考虑过的其他选择?

理想的解决方案将允许我在毫秒内快速访问agg行,这将使我可以将数据追加到实时事件。

在我应该说服的策略中,有没有明显的最佳赢家?

google-cloud-platform google-cloud-firestore google-bigquery google-cloud-dataflow
1个回答
0
投票

[请记住,您还可以通过id来聚类表-使查找查询的方式更快且数据消耗更少。他们仍然需要一秒钟多的时间才能运行。

您还可以设置从BigQuery到CloudSQL的导出,以获得亚秒级的结果:

并且请记住,现在BigQuery可以直接从CloudSQL中读取内容,如果您希望它成为“热数据”的真实来源:

© www.soinside.com 2019 - 2024. All rights reserved.