Google cloud platform 在加入并导出到GCS之前,如何等待BigQuery上的异步表写入?
我有一个系统运行在谷歌云平台上,它的工作原理如下: 首先,有一个云功能,由特定bucket上的数据上传触发。然后,它将这些数据组织起来,并生成作为“.json”的处理器作业,这些作业保存到另一个存储桶中 还有第二个云函数——系统的核心——由这个“.json”上传触发。然后,它处理数据并将输出结果作为单个表写入BigQuery数据集中 我还编写了另一个云函数,它连接这个BigQuery数据集中的所有表,并将其导出到Google云存储桶中的CSVGoogle cloud platform 在加入并导出到GCS之前,如何等待BigQuery上的异步表写入?,google-cloud-platform,google-bigquery,google-cloud-functions,Google Cloud Platform,Google Bigquery,Google Cloud Functions,我有一个系统运行在谷歌云平台上,它的工作原理如下: 首先,有一个云功能,由特定bucket上的数据上传触发。然后,它将这些数据组织起来,并生成作为“.json”的处理器作业,这些作业保存到另一个存储桶中 还有第二个云函数——系统的核心——由这个“.json”上传触发。然后,它处理数据并将输出结果作为单个表写入BigQuery数据集中 我还编写了另一个云函数,它连接这个BigQuery数据集中的所有表,并将其导出到Google云存储桶中的CSV 因此问题出现了:我只能在所有表都插入BigQuery
因此问题出现了:我只能在所有表都插入BigQuery后调用最后一个聚合云函数。我如何管理这个?只有在所有表都存在之后,我如何才能触发此函数?没有简单的方法,但我有两个建议
- 若您并没有时间限制,并且可以按顺序处理文件,那个么您可以这样做
- 第一个函数进行拆分并构建
文件。然后用in参数调用第二个函数,overview.json
文件中第一个json的名称overvien.json
- 第二个函数根据参数处理JSON文件的数据,并将其写入BQ。然后使用
文件中的下一个条目调用第二个函数。如果是最后一个条目,调用第三个函数overview.json
- 第三个函数在处理完所有数据后调用
- 第一个函数进行拆分并构建
- 另一种解决方案是使用Datastore/Firestore。要做到这一点
- 第一个函数在Datastore/Firestore中进行拆分并写入一个条目,其中包含要处理的JSON文件列表及其状态为“未处理”
- 第二个函数在json上传时触发(如今天),处理数据,将其写入BigQuery,将Datastore/Firestore中json文件的状态更新为“已处理”,并调用第三个函数
- 第三个函数查询Datastore/Firestore,并检查要处理的所有json文件是否都处于“已处理”状态。如果否,则退出该函数。如果是,则执行此功能中的处理
- 创建一个空间(表或集合),用于记录某些内容。在您的情况下,它可以与Firestore中的概述文档一起使用
- 第三个功能,检查所有零件是否已处理后,检查第三个功能是否正在运行
- 如果是,退出
- 如果否,则在表/集合中(在您的案例中,在Firestore中)写入由函数生成的唯一ID(例如UUID)
- 第三个再次读取表/集合(在您的案例中,在Firestore中),并检查保存的ID是否为其自己的ID
- 如果是,流程是什么
- 如果没有,退出
它并不完美,但可以涵盖大多数情况。答案并不简单。我只想了解您的体系结构的一些细节:为什么要生成不同的JSON,独立处理它们,然后将所有数据合并到同一个表中?加载作业是否具有不同的模式?不能在单个作业中加载它们?其他问题:您是否知道每次运行的JSON数量和加载作业数量?或者它是可变的?你知道加载作业的最长持续时间吗?由于计算能力的原因,我生成了不同的JSON。如果云函数只在一个实例中处理所需的所有内容,那么它将无法处理数据量。因此,我划分了必须计算的内容,并且有多个云函数实例并行处理数据。是的,我事先知道生成的json的数量,我还创建了一个overview.json,其中包含诸如作业数之类的汇总信息——但请注意,这可能会很棘手,因为函数可能会失败,并且无法在BigQuery中创建表。作业持续时间是可变的。我也更喜欢第二种解决方案。我还考虑在BigQuery表中写入状态。您对此有何看法,尤其是与Firestore解决方案进行比较时?有什么优点/缺点吗?我想知道(比赛条件)的提示,谢谢!关于全局构建ID,在First Cloud函数中开发ID分配功能已经在路线图上了。Bigquery也是一个解决方案。一切都取决于你想做什么。是否要对每个零件的加工持续时间进行分析和统计?是的,BigQuery是分析、绘图和统计的正确场所。但是,如果你不需要,我强烈推荐Firestore:更快更便宜。对于竞赛条件,我更新我的答案