导出的数据流模板参数未知

时间:2019-02-10 22:43:06

标签: google-cloud-dataflow google-cloud-dataprep

我已经从Dataprep导出了Cloud Dataflow模板,如下所示:

https://cloud.google.com/dataprep/docs/html/Export-Basics_57344556

在Dataprep中,该流程通过通配符从Google Cloud Storage提取文本文件,转换数据,并将其附加到现有的BigQuery表中。所有工作都按预期进行。

但是,当尝试从导出的​​模板启动Dataflow作业时,我似乎无法正确获取启动参数。错误消息不是太具体,但是很明显,我并没有正确定位位置(输入和输出)。

此用例唯一的Google提供的模板(位于https://cloud.google.com/dataflow/docs/guides/templates/provided-templates#cloud-storage-text-to-bigquery)不适用,因为它使用UDF并以批处理模式运行,覆盖了任何现有的BigQuery表,而不是追加。

从Dataprep检查原始的Dataflow作业详细信息会显示许多参数(在元数据文件中找到),但我无法使其在我的代码中正常工作。这是一个失败的配置示例:

import time
from google.cloud import storage
from googleapiclient.discovery import build
from oauth2client.client import GoogleCredentials

def dummy(event, context):
    pass

def process_data(event, context):
    credentials = GoogleCredentials.get_application_default()
    service = build('dataflow', 'v1b3', credentials=credentials)

    data = event
    gsclient = storage.Client()
    file_name = data['name']

    time_stamp = time.time()

    GCSPATH="gs://[path to template]
    BODY = {
        "jobName": "GCS2BigQuery_{tstamp}".format(tstamp=time_stamp),
        "parameters": {
            "inputLocations" : '{{\"location1\":\"[my bucket]/{filename}\"}}'.format(filename=file_name),
            "outputLocations": '{{\"location1\":\"[project]:[dataset].[table]\", [... other locations]"}}',
            "customGcsTempLocation": "gs://[my bucket]/dataflow"
         },
         "environment": {
            "zone": "us-east1-b"
         }
    }

    print(BODY["parameters"])

    request = service.projects().templates().launch(projectId=PROJECT, gcsPath=GCSPATH, body=BODY)
    response = request.execute()

    print(response)

上面的示例指示无效的字段(“ location1”,我从完成的Dataflow作业中提取了该字段。我知道我需要指定GCS位置,模板位置和BigQuery表,但在任何地方都找不到正确的语法如上所述,我在作业的生成的元数据文件中找到了字段名称和样本值。

我意识到这个特定的用例可能不会敲响警钟,但是总的来说,如果有人成功地确定并使用了正确的启动参数来处理从Dataprep导出的Dataflow作业,我将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

我认为您需要阅读本文档,它准确解释了传递各种可用管道选项(包括所需的位置参数)所需的语法... 1

尤其是您的代码段中,以下内容未遵循正确的语法

“” inputLocations“:'{{\” location1 \“:\” [我的存储桶] / {filename} \“}}''。format(filename = file_name)” 除了document1,您还应该查看可用的管道选项及其正确语法2

请使用链接...它们是Google的官方文档链接。这些链接永远不会过时或被删除,它们会得到专门团队的积极监视和维护