Ada*_*son 1 google-cloud-platform gcloud google-cloud-dataflow google-cloud-dataprep
我已经在Dataprep中设计了一个数据转换,现在正尝试使用Dataflow中的模板来运行它。我的流程有几个输入和输出-数据流模板将它们作为json对象提供,每个输入和位置都有键/值对。它们看起来像这样(添加了换行符以便于阅读):
{
"location1": "project:bq_dataset.bq_table1",
#...
"location10": "project:bq_dataset.bq_table10",
"location17": "project:bq_dataset.bq_table17"
}
Run Code Online (Sandbox Code Playgroud)
我有17个输入(主要是查找)和2个输出(一个csv,一个bigquery)。我将这些传递给gcloud
CLI像这样:
gcloud dataflow jobs run job-201807301630 /
--gcs-location=gs://bucketname/dataprep/dataprep_template /
--parameters inputLocations={"location1":"project..."},outputLocations={"location1":"gs://bucketname/output.csv"}
Run Code Online (Sandbox Code Playgroud)
但是我遇到一个错误:
ERROR: (gcloud.dataflow.jobs.run) unrecognized arguments:
inputLocations=location1:project:bq_dataset.bq_table1,outputLocations=location2:project:bq_dataset.bq_output1
inputLocations=location10:project:bq_dataset.bq_table10,outputLocations=location1:gs://bucketname/output.csv
Run Code Online (Sandbox Code Playgroud)
从错误消息看,它似乎正在合并输入和输出,以便当我有两个输出时,每两个输入都与两个输出配对:
input1:output1
input2:output2
input3:output1
input4:output2
input5:output1
input6:output2
...
Run Code Online (Sandbox Code Playgroud)
我试过引用输入/输出对象(单个和两个,再加上删除对象中的引号),将它们包装成[]
,使用波浪号,但不高兴。是否有人设法执行具有多个输入的数据流作业?
我终于通过大量的反复试验找到了解决方案。涉及几个步骤。
--parameters
该--parameters
参数是字典类型的参数。您可以通过gcloud topic escaping
在CLI中键入内容来阅读文档中的详细信息,但总之,这意味着您将需要=
介于--parameters
和之间的参数,然后格式为key = value对,其值用引号("
)括起来。:
--parameters=inputLocations="object",outputLocations="object"
Run Code Online (Sandbox Code Playgroud)
然后,对象需要使用引号转义以避免过早结束该值,因此
{"location1":"gcs://bucket/whatever"...
Run Code Online (Sandbox Code Playgroud)
成为
{\"location1\":\"gcs://bucket/whatever\"...
Run Code Online (Sandbox Code Playgroud)
接下来,CLI感到困惑,因为虽然键=值对之间用逗号分隔,但这些值在对象中也包含逗号。因此,您可以通过^
在参数开头的克拉()之间和key = value对之间放置分隔符来定义其他分隔符:
--parameters=^*^inputLocations="{"\location1\":\"...\"}"*outputLocations="{"\location1\":\"...\"}"
Run Code Online (Sandbox Code Playgroud)
我使用它*
是因为;
没有用-也许是因为它标志着CLI命令的结束?谁知道。
另请注意,该gcloud topic escaping
信息显示:
在Windows的cmd.exe和PowerShell中,^是一个特殊字符,您必须通过重复将其转义。在以下示例中,每次看到^时,均将其替换为^^^^。
customGcsTempLocation
毕竟,我忘记了customGcsTempLocation
需要添加参数中的key = value对--parameters
。不要忘了用a分隔它,*
然后再次用引号引起来:
...}*customGcsTempLocation="gs://bucket/whatever"
Run Code Online (Sandbox Code Playgroud)
在线文档中几乎没有任何解释,所以这是我一生中不会回来的日子-希望我已经帮助了其他人。
归档时间: |
|
查看次数: |
807 次 |
最近记录: |