【问题标题】:Dataflow BigQueryBatchFileLoads cant find project ID with DirectRunnerDataflow BigQueryBatchFileLoads 无法使用 DirectRunner 找到项目 ID
【发布时间】:2021-04-14 23:39:25
【问题描述】:

我正在尝试在本地调试批量上传到 BigQuery 的 Dataflow 作业,但在使用 DirectRunning BigQueryBatchFileLoads 在本地运行时会吐出

    "code": 400,
    "message": "Project id is missing",
    "errors": [
      {
        "message": "Project id is missing",
        "domain": "global",
        "reason": "invalid"
      }
    ],

我已经尝试对项目 idoptions.view_as(beam.options.pipeline_options.GoogleCloudOptions).project = PROJECT_ID 进行硬编码
并使用 cli 标志 python mycode.py --dataset mydataset --project myprojectid 但没有运气。

据我所知,BigQueryBatchFileLoads 正在从运行时值提供程序获取项目 ID,我尝试在 DoFn 中调试值提供程序中的值,但无法解析任何值。

我是 Dataflow / ApacheBeam 的新手,所以我希望答案是良性的,因为这一定是一个非常常见的用例。

任何建议将不胜感激。

【问题讨论】:

  • 如果您的环境设置正确,则无需在梁配置中设置项目 ID。也许你需要运行gcloud config set project my-project
  • 我的 gcloud 配置正确
  • 确保设置了GOOGLE_APPLICATION_CREDENTIALS 环境变量。此问题与您的光束管道无关,您的环境中的某些内容设置不正确。
  • 您是否尝试过 --project= --dataset= 假设您使用示例中的 parser = argparse.ArgumentParser() 以及 pipeline_options = PipelineOptions(pipeline_args..

标签: python google-cloud-platform google-bigquery apache-beam


【解决方案1】:

假设您使用的是 WriteToBigQuery - 您是否尝试过传递包含项目名称的表名?

另外,您使用的是什么版本的 Beam?

【讨论】:

    【解决方案2】:

    我最近在使用 DirectRunner 时也遇到了这个问题。花了很多时间进行故障排除并找到了一些解决方法!

    在您的 WriteToBigQuery 步骤中,

    • 解决方法 1(适用于模板)

      使用project=[PROJECT] 参数或table=[PROJECT]:[DATASET].[TABLE] 参数直接指示项目。

    • 解决方法 2(模板时不起作用)

      如果您在 CLI 中运行代码时指定了没有项目的表参数,即 table=[DATASET].[TABLE] 并解析了 --project [PROJECT] 参数,请使用以下语法 table="{}".format("[DATASET].[TABLE]")。我不确定为什么会这样,但我猜这是 Apache Beam 的错误。

    在 2.30.0 上测试。

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 2018-01-26
      • 1970-01-01
      • 2022-09-29
      • 1970-01-01
      • 2023-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多