从 BigQuery 读取数据并将其写入云存储上的 avro 文件格式

Posted

技术标签:

【中文标题】从 BigQuery 读取数据并将其写入云存储上的 avro 文件格式【英文标题】:Read data from BigQuery and write it into avro file format on cloud storage 【发布时间】:2019-09-11 12:27:50 【问题描述】:

我的目标是从 BigQuery 表中读取数据并使用 Java 将其写入云存储上的 Avro 文件。如果有人提供代码片段/想法来编写 BigQuery 表数据并使用 Cloud Dataflow 将其写入 avro 格式的数据,那就太好了。

【问题讨论】:

【参考方案1】:

可以将数据从 BigQuery 以 Avro 格式导出到 GCS 作为一次性导出,这可以通过客户端库(包括 Java)来完成。 Here 是一些 sn-ps(完整示例可以在 GitHub 中找到),对于 java,您可以编写代码:

Job job = table.extract(format, gcsUrl);
// Wait for the job to complete
try 
  Job completedJob =
      job.waitFor(
          RetryOption.initialRetryDelay(Duration.ofSeconds(1)),
          RetryOption.totalTimeout(Duration.ofMinutes(3)));
  if (completedJob != null && completedJob.getStatus().getError() == null) 
    // Job completed successfully
   else 
    // Handle error case
  
 catch (InterruptedException e) 
  // Handle interrupted wait

format variable 可以是 CSV、JSON 或 AVRO,gcsUtl 变量应包含存储桶和文件路径,例如gs://my_bucket/文件名

【讨论】:

我正在寻找使用 GCP 数据流建立 ETL 流程,所以我不能从 BQ 控制台 UI 进行手动流程。 我认为 Flavien 提供的链接也有关于如何以编程方式(例如从 Java 中)进行操作的说明,因此您不必从 BQ 控制台 UI 进行操作。另外,我认为 Cloud Dataflow 支持直接从 BigQuery 表而不是 GCS 位置读取,所以也许您根本不需要写入 GCS?

以上是关于从 BigQuery 读取数据并将其写入云存储上的 avro 文件格式的主要内容,如果未能解决你的问题,请参考以下文章

GCP Dataflow- 从存储中读取 CSV 文件并写入 BigQuery

在加入并将它们导出到 GCS 之前,如何等待 BigQuery 上的异步表写入?

在 Dataflow 中从 BigQuery 写入云存储时如何设置文件大小而不是分片数

使用 spark 将 parquet 数据从 Google 云存储加载到 BigQuery

如何获取 ValueProvider 的值并将其写入 BigQuery 表?

从 pyspark 中删除 bigquery 表