【发布时间】:2020-04-29 13:41:41
【问题描述】:
我需要使用 Dataflow 从 BigQuery 表中提取数据并写入 GCS 存储桶。
数据流是使用 apache beam (Java) 构建的。数据流从 BigQuery 中提取并首次完美写入 GCS。
但是,当第一个管道成功执行后启动第二个数据流以从同一个表中提取数据时,它不会从 Big Query 中提取任何数据。我在堆栈驱动程序日志中看到的唯一错误是
Blockquote "请求失败,代码 409,由于 IOExceptions 执行了 0 次重试,由于状态码不成功执行了 0 次重试,HTTP 框架说可以重试请求,(负责重试的调用者):https://www.googleapis.com/bigquery/v2/projects/dataflow-begining/jobs"
我用于提取的示例代码是
pipeline.apply("Extract from BQ", BigQueryIO.readTableRows().fromQuery("SELECT * from bq_test.employee"))
感谢任何帮助
【问题讨论】:
-
您在 Dataflow 的出路过程中是否进行了任何特殊的转换或业务逻辑?我问的原因是因为您没有必须使用 Dataflow。您可以使用 SQL 进行处理,然后调用 BigQuery 的导出 API 将表直接转储到 GCS。它也可以通过不使用 Dataflow 为您节省资金。另外 - 您是否知道在管道中使用 SQL 查询从 BigQuery 读取会产生费用?不要使用
SELECT *。请改用from(TableReference)而不是fromQuery(SQL)。
标签: google-cloud-platform google-bigquery google-cloud-dataflow apache-beam