导入/导出 DataFusion 管道

wal*_*r91 3 integration etl google-cloud-platform google-cloud-data-fusion

有谁知道是否可以以编程方式导入/导出 DataFlow 管道(已部署或处于草稿状态)?

我们的想法是编写一个脚本来删除并创建一个 DataFusion 实例,以避免在不使用时计费。通过 gloud 命令行,可以配置 DataFusion 集群并销毁它,但自动导出和导入我的所有管道也会很有趣。

不幸的是,官方文档并没有帮助我......

谢谢!

Aja*_*jai 5

您可以使用 REST API 来执行此操作。但是,您可能需要一些脚本来根据给定的实例 url 自动执行此操作。您应该能够从应用程序列表 API 获取管道配置(参考此处)。在您的情况下,您首先需要获取管道列表(参考此处),然后迭代所有管道并获取各个管道的详细信息,该管道将具有一个名为 的属性,configuration该属性将具有配置管道 json。您仍然需要使用从后端收到的配置 json 创建一个新的 JSON,其中包含名称、描述、工件信息以及配置属性。

样本看起来像这样,

  1. 在您即将销毁的集群中,使用 GET API 来获取artifactName=cdap-data-pipeline,cdap-data-streams作为查询参数的应用程序列表
/namespaces/default/apps?artifactName=cdap-data-pipeline,cdap-data-streams?artifactName=cdap-data-pipeline,cdap-data-streams
Run Code Online (Sandbox Code Playgroud)
  1. 解析响应并迭代各个应用程序并获取应用程序详细信息
namespaces/default/apps/<app-name>
Run Code Online (Sandbox Code Playgroud)

对于每个应用程序,configuration在响应中获取属性并将最终的 JSON 形成为类似以下内容:


{   
  "name": "Pipeline_1",
  "description": "Pipeline to do taskX",
  "artifact": {
    "name": "cdap-data-pipeline",
    "version": "6.1.0-SNAPSHOT",
    "scope": "USER"
  },
  "config": JSON.parse(<configuration-from-app-detailed-api>) 
} 

Run Code Online (Sandbox Code Playgroud)
  1. 然后,在您要创建的新集群中,只需使用上一步中获得的 json 部署管道即可。

需要注意的一件事是,如果您在旧集群中为管道设置了计划或触发器,则不会在新集群中创建这些计划或触发器。如果您只是部署和运行管道,则管道的其余部分应该可以正常工作。

希望这可以帮助。

[更新] 11/20

刚刚意识到这里有关于访问 REST API 进行数据融合的文档,但是它并不完全涉及如何进行 REST api 调用。这是一个关于如何执行此操作的示例,

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -w"\n" -X GET <instance-url>/namespaces/default/apps?artifactName=cdap-data-pipeline,cdap-data-streams?artifactName=cdap-data-pipeline,cdap-data-streams
Run Code Online (Sandbox Code Playgroud)

在这里,我们使用 gcloud 来获取该特定实例的访问令牌。执行此操作的先决条件是使用 gcloud SDK 登录。一旦身份验证成功,这应该会成功返回特定实例中的应用程序列表。