我在google存储桶中存储了大量数据,具有以下结构:  gs://project_garden/plant_logs/2019/01/01/humidity/plant001/hour.gz。我想要的是制作一个下载所有内容的Kubernetes Job,解析它并将解析后的文件并行上传到BigQuery。到目前为止,我已经设法在没有任何并行性的情况下在本地进行,通过编写python代码,该代码将日期间隔设置为input并循环执行gsutil -m cp -r下载的每个工厂,gunzip用于提取,pandas用于转换。我想做同样的事情,但每个工厂使用Kubernetes并行。是否可以通过定义为每个pod传递不同工厂ID的作业并为每个studio下载文件来并行化该过程?

分析解答

无法从Kubernetes直接上传到BigQuery,您只能使用以下方法将数据上传到BigQuery [1]:

  • 来自Cloud Storage
  • 来自其他Google服务,例如Google Ad Manager和Google Ads
  • 从可读数据源(例如本地计算机)
  • 通过使用流插入插入单个记录
  • 使用DML语句执行批量插入
  • 在Cloud Dataflow管道中使用BigQuery I/O转换将数据写入BigQuery

正如前面评论中提到的最简单的解决方案是使用DataFlow上传数据,您可以找到一个模板,将文件从Google Cloud Storage (GCS)上传到BigQuery链接[2]

如果您必须使用Google Cloud Engine (GKE),则需要执行以下步骤:

  1. 使用GKE从GCS读取数据。您可以在下一个链接中找到如何在容器中mount桶的示例[3]
  2. 使用您的问题中提到的代码解析数据
  3. 将数据从GCS上传到BigQuery,链接[4]中的更多信息

[1] https://cloud.google.com/bigquery/docs/loading-data

[2] https://cloud.google.com/dataflow/docs/guides/templates/provided-streaming#gcstexttobigquerystream

[3] https://github.com/maciekrb/gcs-fuse-sample

[4] https://cloud.google.com/bigquery/docs/loading-data-cloud-storage