1

对于那些不知道的人,Matillion 是一个 ETL/ELT 工具,可用于处理雪花数据流(以及其他)。一个有趣的特性是我们可以用 bash 或 python 编写脚本任务。

过去我在使用 SQL Server Integration Services 时也有过类似的经历,也可以在任务中编写 C#。

恕我直言,这提出了两个大缺陷

  1. 存储为“blob”的 SSIS 包使它们非常不适合版本控制。任何微小的变化(比如只是调整管道上的任务)通常会使两个版本之间的比较几乎不可能
  2. 在任务之间共享代码非常困难(有可能吗???)

Matillion“作业”存储为 json,并且与 SSIS 一样,无法比较同一作业的两个版本,无论变化有多大。此外,在简单的文本窗口中用 python 编写大代码也是不可想象的

所以,我想在 Matillion 之外编写我的 Python 代码,并使用 Matillion 任务作为我在外面编写的不同函数/包之间的“粘合剂”。

有人有这样做的经验吗?

如何使我的 Python 文件/包可用于 Matillion Python 脚本?如何在我的工作的不同 Matillion“版本”中处理不同版本的 Python 包?

谢谢

4

2 回答 2

1

我敢肯定,到现在为止,您可能已经想通了。对于每个人,如果他们正在寻找,这里是另一种方法:

在 Matillion 中有一个 python 脚本组件。我们可以使用它来触发 Matillion 之外的 python 脚本。我一直在使用以下代码段进行操作:

import sys
import os

return_var=os.system("sshpass -p <Remote_Machine_User_Password> ssh <Remote_Machine_User>@<Remote_Machine_IP> -o StrictHostKeyChecking=no '/path/to/python/executable/in/remote/machine /path/to/python/script/in/remote/machine'")
print(return_var)

谢谢!

于 2021-11-01T17:58:19.857 回答
1

回答您的问题:“如何使我的 Python 文件/包可用于 Matillion Python 脚本?如何在我的工作的不同 Matillion“版本”中处理不同版本的 Python 包?”

我认为 Matillion 中的“bash”组件会对您有所帮助。这里唯一的要求是您应该能够从 matillion 服务器 ssh 到存在外部 python 包的任何其他服务器。

在您的 Matillion 作业的 bash 组件中,您只需将 ssh 代码包含到远程服务器和命令行中即可执行您的 python 包。我相信“Here doc”或 Bash Here Document 会对您有所帮助:

ssh -T $remote_server_ip << doc
ls -lrt
python /path/to/python_script/python_script.py

doc

关于您关于版本控制的问题,我不确定,但我也有兴趣了解解决方案。

谢谢

于 2020-06-16T05:12:00.733 回答