gpt4 book ai didi

google-cloud-platform - 使用 gcloud cli 执行具有多个输入/输出的 Dataflow 作业

转载 作者:行者123 更新时间:2023-12-03 22:53:33 27 4
gpt4 key购买 nike

我在 Dataprep 中设计了一个数据转换,现在正在尝试使用 Dataflow 中的模板来运行它。我的流有几个输入和输出 - 数据流模板将它们作为 json 对象提供,每个输入和位置都有键/值对。它们看起来像这样(为了便于阅读添加了换行符):

{
"location1": "project:bq_dataset.bq_table1",
#...
"location10": "project:bq_dataset.bq_table10",
"location17": "project:bq_dataset.bq_table17"
}

我有 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"}

但我收到一个错误:
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

从错误消息来看,它似乎正在合并输入和输出,以便我有两个输出,每两个输入与两个输出配对:
input1:output1
input2:output2
input3:output1
input4:output2
input5:output1
input6:output2
...

我试过引用输入/输出对象(单和双,加上删除对象中的引号),将它们包装在 [] 中。 ,使用波浪号但没有乐趣。有没有人设法执行具有多个输入的数据流作业?

最佳答案

我终于通过一个巨大的试错过程找到了解决方案。有几个步骤。
--parameters的格式
--parameters参数是字典类型的参数。您可以通过键入 gcloud topic escaping 阅读文档中的详细信息。在 CLI 中,但简而言之,这意味着您需要一个 =之间--parameters和参数,然后格式是键=值对,值用引号括起来( " ):

--parameters=inputLocations="object",outputLocations="object"

逃离物体

然后,对象需要转义引号以避免过早结束值,所以
{"location1":"gcs://bucket/whatever"...

成为
{\"location1\":\"gcs://bucket/whatever\"...

选择不同的分隔符

接下来,CLI 会感到困惑,因为虽然键=值对由逗号分隔,但值在对象中也有逗号。因此,您可以通过将其放在参数开头的克拉 ( ^ ) 之间以及键=值对之间来定义不同的分隔符:
--parameters=^*^inputLocations="{"\location1\":\"...\"}"*outputLocations="{"\location1\":\"...\"}"

我用过 *因为 ;没有用 - 也许是因为它标志着 CLI 命令的结束?谁知道。

另请注意 gcloud topic escaping信息说:

In cmd.exe and PowerShell on Windows, ^ is a special character and you must escape it by repeating it. In the following examples, every time you see ^, replace it with ^^^^.



别忘了 customGcsTempLocation
毕竟,我忘记了 customGcsTempLocation需要添加到 --parameters 中的键=值对中争论。不要忘记用 * 将它与其他人分开并再次用引号将其括起来:
...}*customGcsTempLocation="gs://bucket/whatever"

在线文档中几乎没有解释这些,所以这是我生命中的几天我不会回来 - 希望我已经帮助过其他人。

关于google-cloud-platform - 使用 gcloud cli 执行具有多个输入/输出的 Dataflow 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51751763/

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