我有一些文件包含需要插入到Google BigQuery中的数千行,因此,由于执行时间超过了AppEngine中的60s请求限制,我将BQ查询移到任务队列中。
目前,它运作良好,但我不知道这是否是放置BQ查询的最佳位置。我这样说是因为请求需要3分钟才能完成,我认为这有点慢。您是否认为有更快/更好的地方来查询BQ?
PS:我正在使用google bigquery api发送查询。
答案 0 :(得分:1)
有两种选择:
您的数据文件已格式化为与 BQ加载作业一起使用。在这种情况下 - 您开始在任务队列中加载作业 - 并将您从REST调用获得的jobid存储到数据存储区。并退出任务队列。作为另一个进程你设置appengine cron运行说每分钟只检查所有正在运行的jobids并更新状态(从cron运行作为任务队列并使用 - 因此它将在10分钟限制内)如果更改并在需要时启动另一个进程。在这种情况下,我认为它将是非常可扩展的
您处理文件并以某种方式手动插入行 - 在这种情况下,最好的操作案例将使用pubsub或在taskqueue中再次启动多个任务 - 通过手动将数据拆分成小块并使用 BQ Streaming insert API - 当然这取决于你的行的大小 - 但我发现每个进程1000-5000 recs在这里运行良好。
答案 1 :(得分:0)
如果您的文本文件位于Google云端存储中,那么云数据流可以成为适合您情况的自然解决方案{1}。
您可以使用Google提供的模板在创建云数据流管道{2}的过程中节省一些时间。 通过这种方式,您可以创建批处理管道,以便将数据从Google云端存储(文件)移动(并根据需要转换)到BigQuery。
{1}:https://cloud.google.com/dataflow/
{2}:https://cloud.google.com/dataflow/docs/templates/provided-templates#cloud-storage-text-to-bigquery