数据流模板作业未采用输入参数

时间:2019-02-06 17:14:37

标签: python google-cloud-dataflow apache-beam

我有一个使用以下命令创建的数据流模板

    python scrap.py --setup_file /home/deepak_verma/setup.py
  --temp_location gs://visualization-dev/temp
 --staging_location gs://visualization-dev/stage 
--project visualization-dev --job_name scrap-job 
--subnetwork regions/us-east1/subnetworks/dataflow-internal 
--region us-east1  --input sentiment_analysis.table_view 
--output gs://visualization-dev/incoming 
--runner DataflowRunner 
--template_location gs://visualization-dev/template/scrap 

我的数据流管道接受输入和输出参数作为这样的值提供程序

@classmethod
def _add_argparse_args(cls, parser):
    parser.add_value_provider_argument(
        '--input', dest='input', required=True,
        help='Input view. sentiment_analysis.table_view',
    )

    parser.add_value_provider_argument(
        '--output', dest='output', required=True,
        help='output gcs file path'
    )

并且我将其用作

beam.io.Read(beam.io.BigQuerySource(query=read_query.format(
        table=options.input.get(), limit=(LIMIT and "limit " + str(LIMIT) or '')), use_standard_sql=True)))

where read_query is defined as `SELECT upc, max_review_date FROM `{table}`

现在,当我使用带有不同输入参数的模板调用此模板时

template_body = {
                'jobName': job_name,
                'parameters': {'input': 'table_view2'}
            }
            credentials = GoogleCredentials.get_application_default()
            service = build('dataflow', 'v1b3', credentials=credentials)
            request = service.projects().locations().templates().launch(projectId=constants.GCP_PROJECT_ID, location=constants.REGION, gcsPath=template_gcs_path, body=template_body)

数据流不会为table_view2调用此函数,而是将table_view用于此作业。

2 个答案:

答案 0 :(得分:0)

问题是,在暂存模板时您已经传递了input值,这就是要解决的值。运行第一个命令时,请删除--input sentiment_analysis.table_view并将其留空。使用'parameters': {'input': 'sentiment_analysis.table_view2'}执行模板时,仅将其指定为参数。

如果您仍然需要默认值,则可以在添加this example中的值提供程序参数时执行此操作:

parser.add_value_provider_argument(
        '--input', dest='input', required=True,
        help='Input view. sentiment_analysis.table_view',
        default='sentiment_analysis.table_view'
    )

答案 1 :(得分:0)

您需要的是能够以ValueProvider(而不是已经格式化的字符串)形式传递查询。在Beam中,这还不可能。

此处有一个开放功能请求:https://issues.apache.org/jira/browse/BEAM-1440