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

2023-12-08

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

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

我有 17 个输入(主要是查找)和 2 个输出(1 个 csv,1 个 bigquery)。我将这些传递给gcloudCLI 像这样:

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

The --parametersargument 是字典类型的参数。您可以通过键入以下内容来阅读文档中的详细信息gcloud topic escaping在 CLI 中,但简而言之,这意味着您需要一个=之间--parameters和参数,格式为 key=value 对,值用引号括起来 ("):

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

逃离物体

然后,对象需要转义引号以避免过早结束该值,因此

{"location1":"gcs://bucket/whatever"...

Becomes

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

选择不同的分隔符

接下来,CLI 会感到困惑,因为虽然键=值对用逗号分隔,但值在对象中也有逗号。因此,您可以通过将其放在克拉之间来定义不同的分隔符(^) 在参数的开头和键=值对之间:

--parameters=^*^inputLocations="{"\location1\":\"...\"}"*outputLocations="{"\location1\":\"...\"}"

I used *因为;不起作用 - 也许是因为它标志着 CLI 命令的结束?谁知道。

另请注意,gcloud topic escaping信息说:

在 Windows 上的 cmd.exe 和 PowerShell 中,^ 是一个特殊字符, 你必须通过重复它来逃避它。在下面的例子中,每次 你看到^,将其替换为^^^^。

别忘了customGcsTempLocation

经历了这一切之后,我忘记了customGcsTempLocation需要添加到 key=value 对中--parameters争论。不要忘记用一个将它与其他的分开*并再次将其括在引号中:

...}*customGcsTempLocation="gs://bucket/whatever"

在线文档中几乎没有对此进行解释,因此我一生中的几天都不会回来 - 希望我能在这方面帮助其他人。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 gcloud cli 执行具有多个输入/输出的 Dataflow 作业 的相关文章

随机推荐

  • JavaScript 按位掩码

    这个问题类似于这另一个问题 但是 我想了解为什么会这样 下面的代码 console log parseInt 0xdeadbeef 16 parseInt 0x000000ff 16 toString 16 console log pars
  • Python 3.7.3 无意中安装在 Mac OS 10.15.1 上 - 现在包含在 Xcode Developer Tools 11.2 中?

    我昨天决定对 Mac 操作系统进行全新安装 例如 擦除整个磁盘并重新安装操作系统 我使用的是 Macbook Air 2018 我全新安装了 Mac OS 10 15 1 由于我之前的 Python 环境非常混乱 所以我进行了全新安装 我希
  • python 中的批量字符串替换?

    假设我有一个如下所示的字符串 str The yquick cbrown bfox Yjumps over the ulazy dog 您会注意到字符串中的很多位置都有一个 符号 后跟一个字符 例如 y 和 c 我需要用字典中的适当值替换这
  • json.org 上使用的生成铁路图的工具[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我喜欢的语法铁路图 on json org这是 BNF 语言的图形表示 我还没有找到任何工具可以产生如此雄辩的结果 任何人都可以识别用于生成这些图表
  • Chrome 不会删除会话 cookie

    我正在尝试在 javascript 中设置会话 cookie 如下所示 document cookie name alex path 但即使我退出浏览器并再次启动 Chrome 也不会删除它 我检查了 Firefox 和 Opera 它们都
  • Django 1.2 会话丢失

    我以前问过类似的问题 但我做了更多研究 这次迭代应该有点不同 似乎有几个 SO 用户在单个视图中注册和登录用户时遇到了问题 但还没有真正得到解决 问题是我在单个 Django 视图中注册 验证和登录用户 对于大多数用户来说这很好 但对于其他
  • 如何调试涉及 Classes.pas 中 ThreadProc 崩溃的设计时包卸载崩溃?

    我不确定如何追踪以下崩溃 当卸载我公司内部使用的设计时包时会发生这种情况 这是我们的代码 因此这是我们要修复的错误 而不是第三方组件供应商的问题 似乎涉及到一个线程 但由于它发生在 Classes pas 中的 Function Threa
  • 使用 pyodbc 在 Access 中处理日期时出现“参数太少”错误

    我正在使用带有 pyodbc 导入的 Python 我使用的是 Microsoft Office 2013 64 位 我正在尝试查询 accdb 数据库以选择范围内的不同日期并将它们分配给游标 以便我可以将它们附加到列表中 我的 Acces
  • 正则表达式从字符捕获到第一个句点

    我的正则表达式字符串看起来像 您的订单 Q 111 111 1111 账单金额为 100 50 美元 如何提取订单号 即 和第一个 之间的字符串 Q 111 111 1111 我试过了 但它正在捕获最后一个点字符 我确信 我需要使用非贪婪匹
  • Linux 是否对页目录和页表使用自映射?

    我只是问这个问题 因为我很好奇 Linux 内核是如何工作的 根据http i web i u tokyo ac jp edu training ss lecture new documents Lectures 02 VirtualMem
  • 是/否消息框始终返回是 - VB.Net

    我正在尝试消息框 并尝试了一个简单的是 否消息框 所以我写了这段简单的代码 但是 无论我按下哪个按钮 chc 变量始终返回为 1 我提供了代码 所以你可能会看到我做错了什么 这可能是严重错误的 If MsgBoxResult Yes The
  • 将多个类绑定到单个变量

    在使用 Tailwind 和实用程序优先的 css 方法时 我经常发现需要将多个类绑定到单个变量 例如 要设置输入表单的样式 我需要添加border red color red等 如果有错误 在 Vue 中是否有一种漂亮而优雅的方式来表达这
  • 仅使用 javascript 在服务器上读取/写入 txt 文件,而不涉及任何服务器端语言

    我正在开发一个简单的 HTML Javascript 应用程序 该应用程序在文本区域中向用户显示一条随机文本消息 我有15 20条这样的短信 最多500个字符 我不想将这些消息保存在数据库中 我有两种情况 我每条消息都有多个 txt 文件
  • 每当声明停止请求时,HasAnyAuthority 总是让我进入 api

    通过 Spring Security 我创建了一个方法 Configuration EnableWebSecurity EnableGlobalMethodSecurity securedEnabled true public class
  • 使用 cmake 从 llvm 源目录开发 llvm 通道

    我正在尝试在我的项目目录下开发 llvm pass 为此 我遵循中的信息http llvm org docs CMake html developing llvm pass out of source 我按照此链接适当地创建了我的 CMak
  • RegEx 在 Javascript 中获取字符串后的 URL 部分

    我有以下网址 http data test com api v1 entity 1231 我需要获取后面的文本v1 和之前 斜线之间 在本例中为单词entity 我正在使用以下正则表达式 但我得到的是entity 1231第 1 组 v1
  • Java 1.5 中的 JTable 对行进行排序

    有没有一种简单的方法可以使用 Java 1 5 对 JTable 中的行进行排序 setAutoCreateRowSorter and TableRowSorter似乎是 Java 1 6 功能 Java 1 5 中的排序只能通过库实现 例
  • 在 Objective-C 中替换字符串中的坏词

    我有一个带有公共高分列表的游戏 我允许图层输入他们的名称 或任何最多 12 个字符的名称 我正在尝试创建几个函数来从坏词列表中过滤掉坏词 我有一个文本文件 我有两种方法 读取文本文件之一 void getTheBadWordsAndSave
  • 如何在Python中读取可以保存为ansi或unicode的文件?

    我必须编写一个脚本来支持读取可以保存为 Unicode 或 Ansi 的文件 使用 MS 的记事本 我的文件中没有任何编码格式的指示 如何支持这两种编码格式 一种在不提前知道格式的情况下读取文件的通用方法 MS 记事本为用户提供了 4 种编
  • 使用 gcloud cli 执行具有多个输入/输出的 Dataflow 作业

    我在 Dataprep 中设计了数据转换 现在尝试使用 Dataflow 中的模板来运行它 我的流程有多个输入和输出 数据流模板将它们作为 json 对象提供 其中每个输入和位置都有键 值对 它们看起来像这样 添加换行符以便于阅读 loca