gpt4 book ai didi

google-bigquery - 数据流作业失败并尝试在 Bigquery 上创建 temp_dataset

转载 作者:行者123 更新时间:2023-12-05 01:11:27 26 4
gpt4 key购买 nike

我正在运行一个简单的数据流作业,以从一个表中读取数据并将其写回到另一个表中。作业失败并出现错误:

Workflow failed. Causes: S01:ReadFromBQ+WriteToBigQuery/WriteToBigQuery/NativeWrite failed., BigQuery creating dataset "_dataflow_temp_dataset_18172136482196219053" in project "[my project]" failed., BigQuery execution failed., Error:Message: Access Denied: Project [my project]: User does not have bigquery.datasets.create permission in project [my project].

虽然我没有尝试创建任何数据集,但它基本上是在尝试创建一个 temp_dataset,因为作业失败了。但我没有得到任何关于幕后真正错误的信息。阅读不是问题,真正失败的是写作步骤。我认为这与权限无关,但我的问题更多是关于如何获得真正的错误而不是这个错误。知道如何处理这个问题吗?

代码如下:

import apache_beam as beam
from apache_beam.options.pipeline_options import PipelineOptions, GoogleCloudOptions, StandardOptions, WorkerOptions
from sys import argv

options = PipelineOptions(flags=argv)
google_cloud_options = options.view_as(GoogleCloudOptions)
google_cloud_options.project = "prj"
google_cloud_options.job_name = 'test'
google_cloud_options.service_account_email = "mysa"
google_cloud_options.staging_location = 'gs://'
google_cloud_options.temp_location = 'gs://'
options.view_as(StandardOptions).runner = 'DataflowRunner'
worker_options = options.view_as(WorkerOptions)
worker_options.subnetwork = 'subnet'

with beam.Pipeline(options=options) as p:
query = "SELECT ..."

bq_source = beam.io.BigQuerySource(query=query, use_standard_sql=True)

bq_data = p | "ReadFromBQ" >> beam.io.Read(bq_source)

table_schema = ...
bq_data | beam.io.WriteToBigQuery(
project="prj",
dataset="test",
table="test",
schema=table_schema,
create_disposition=beam.io.BigQueryDisposition.CREATE_IF_NEEDED,
write_disposition=beam.io.BigQueryDisposition.WRITE_APPEND
)

最佳答案

在使用 BigQuerySource 时,SDK 会创建一个临时数据集并将查询的输出存储到一个临时表中。然后它从该临时表发出导出以从中读取结果。

所以它创建这个 temp_dataset 是预期的行为。这意味着它可能没有隐藏错误。

这没有很好的文档记录,但可以通过读取调用在 BigQuerySource 的实现中看到:BigQuerySource.reader() --> BigQueryReader() --> BigQueryReader().__iter__() --> BigQueryWrapper.run_query() --> BigQueryWrapper._start_query_job() .

关于google-bigquery - 数据流作业失败并尝试在 Bigquery 上创建 temp_dataset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63155221/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com