提问者:小点点

从PubSub导出到BigQuery-数据流不会发生任何事情


我正在尝试设置一个数据流作业,以将数据从PubSub主题写入BigQuery表。我已经从PubSub主题控制台单击了“导出到BigQuery”,并采取了下面详述的步骤。创建作业后,我看到的流程图有一个框“Write成功记录”,其中时间信息不断增加,日志查看器报告无穷无尽的消息,如下所示:

Operation ongoing in step WriteSuccessfulRecords/StreamingInserts/StreamingWriteTables/StreamingWrite for at least 55m00s without outputting or completing in state finish
  at java.base@11.0.2/jdk.internal.misc.Unsafe.park(Native Method)
  at java.base@11.0.2/java.util.concurrent.locks.LockSupport.park(LockSupport.java:194)
  at java.base@11.0.2/java.util.concurrent.FutureTask.awaitDone(FutureTask.java:447)
  at java.base@11.0.2/java.util.concurrent.FutureTask.get(FutureTask.java:190)
  at app//org.apache.beam.sdk.io.gcp.bigquery.BigQueryServicesImpl$DatasetServiceImpl.insertAll(BigQueryServicesImpl.java:817)
  at app//org.apache.beam.sdk.io.gcp.bigquery.BigQueryServicesImpl$DatasetServiceImpl.insertAll(BigQueryServicesImpl.java:882)
  at app//org.apache.beam.sdk.io.gcp.bigquery.StreamingWriteFn.flushRows(StreamingWriteFn.java:143)
  at app//org.apache.beam.sdk.io.gcp.bigquery.StreamingWriteFn.finishBundle(StreamingWriteFn.java:115)
  at app//org.apache.beam.sdk.io.gcp.bigquery.StreamingWriteFn$DoFnInvoker.invokeFinishBundle(Unknown Source)

当我点击Write成功记录时,我最终出现在“StreamingWrite”框中,并显示相同的时间(这一次是什么意思?)。Write成功记录(和StreamingWrite等)框中的“运行”时间目前超过2天,我大约在一个小时前创建了这个作业。它之前已经接近100小时,没有输出。

我的BigQuery表以空表的形式存在,其中包含PubSub预期的数据架构。我已从BigQuery详细信息选项卡复制了表ID,并将其复制到Dataflow设置中的相应框中(格式为项目ID:dataset. table-name)。BQ数据集与Dataflow作业位于同一区域,尽管我不确定这有多相关。我的Cloud Storage临时存储位置也是有效的,我再次将存储位置复制到Dataflow设置中。

其他数据流设置信息:

  1. 我正在使用模板“Pub/Sub Topic to BigQuery”。
  2. 输入Pub/子主题是项目//主题/
  3. 我们使用共享VPC,所以我指定了完整的路径,看起来像https://www.googleapis.com/compute/v1/projects/[pubsub项目ID]/区域/欧洲西部2/子网络/[子网名]
  4. 还指定了服务帐户电子邮件地址
  5. 如果相关,我的工作者区域也设置为与BigQuery和Pub/Sub区域相同。

此设置是否有任何明显的遗漏?我应该采取哪些后续步骤来改进我的数据流设置?

提前感谢,

东尼


共1个答案

匿名用户

事实证明,服务号需要一些额外的权限才能写入BigQuery。

我不确定流插入的最小角色是什么,但我的猜测是角色/bigquery. dataEditor角色/bigquery.user。 /iam-admin/iam页面将分析服务号的最小权限集,因此您可以从BigQuery Admin开始并缩小范围。另一种策略是查看数据流日志[1]以查看服务号需要什么样的权限。

[1]“BigQuery插入所有错误,重试:访问被拒绝:表项目:dataset. table用户没有表项目的bigquery.table.get权限:dataset.table。”