梅尔塔诺(Meltano):点时代的腰带

2021-03-01 13:02:24

管道是代码,易于版本控制,容器化和连续部署。在本地进行开发和测试,然后与内置的Airflow集成一起在生产环境中部署,或者在您的协调器内部部署。

Meltano包含Singer标准及其由社区维护的开源提取程序和加载程序库,并利用dbt进行转换。

#为了使这些示例正常工作,请确保:#-您正在运行Linux或macOS#-已安装Python 3.6、3.7或3.8 python3 --version#为Meltano项目创建目录mkdirmeltanoano-projectsmelanoano-projects#创建并激活虚拟environmentpython3 -m venv .venv .venv / bin / activate#安装Meltanopip3安装melano

Meltano体验的核心是您的Meltano项目,该项目代表有关ELT管道的唯一事实来源:应如何集成和转换数据,应如何协调管道以及应如何构成管道的各种插件被配置。

由于Meltano项目只是文件系统上包含基于文本的文件的目录,因此您可以将其视为任何其他软件开发项目,并从DataOps最佳实践中受益,例如版本控制,代码审查以及持续集成和部署(CI / CD)。

#使用`meltano`命令之前,请确保:#-您已导航到Meltano项目演示项目#-您已激活虚拟环境../.venv/bin/activate

您可以使用现有的Singer水龙头和目标器,也可以轻松地编写自己的数据,以从任何SaaS工具或数据库中提取数据并将其加载到任何数据仓库或文件格式中。

Meltano可以为您管理分接和目标配置,使您轻松选择要提取的实体和属性,并跟踪增量复制状态,从而使具有相同作业ID的后续管道始终在上一个运行位置的右边继续运行。离开。

#将GitLab提取器添加到您的项目中meltano添加提取器tap-gitlab#配置tap-gitlab以从...中提取数据#-https://gitlab.com/meltano/meltano projectmeltano config tap-gitlab项目meltano / meltano#-进行返回2020年5月1日,meltano config tap-gitlab start_date 2020-05-01T00:00:00Z#选择" tags"的所有属性entitymeltano选择tap-gitlab标签" *" #添加JSONL loadermeltano添加loader target-jsonl#确保target-jsonl输出目录存在mkdir -p output#运行数据集成管道meltano elt tap-gitlab target-jsonl --job_id = gitlab-to-jsonl#读取最新标签头-n 1输出/ tags.jsonl

一旦原始数据到达数据仓库,就可能需要转换其架构以使其更适合于分析。

Meltano还通过内置(但可选!)支持为运行dbt模型提供了内置(但可选!)支持,这是您的管道的一部分。

当您将dbt转换器添加到项目中时,完整的dbt项目将自动在transform目录中初始化。添加到Meltano项目中的任何transform插件也将自动添加到dbt项目中,但是您可以轻松地安装现有的dbt从包中建模或自己编写。

#为了使这些示例正常工作,请确保:#-您在某个地方运行PostgreSQL#-您创建了一个新数据库#-您在下面适当地更改了以下配置#添加PostgreSQL loadermeltano添加loader target-postgres --variantmeltano#配置目标-在环境中的Postgres TARGET_POSTGRES_HOST =本地主机TARGET_POSTGRES_PORT = 5432 TARGET_POSTGRES_USER = meltano TARGET_POSTGRES_PASSWORD = meltano TARGET_POSTGRES_DBNAME =演示仓库#添加dbt转换器并初始化dbt projectmeltano添加与dbt兼容的转换器-为dbt#添加模型选择所有实体的所有属性meltano select tap-gitlab" *" " *" #运行数据集成和转换管道meltano elt tap-gitlab target-postgres --transform = run --job_id = gitlab-to-postgres#启动连接到仓库数据库PGPASSWORD的psql shell PGPASSWORD = $ TARGET_POSTGRES_PASSWORD psql -U $ TARGET_POSTGRES_USER -h $ TARGET_POSTGRES_HOST -p $ TARGET_POSTGRES_PORT -d $ TARGET_POSTGRES_DBNAME

project_id | commit_id | tag_name |目标|消息------------ + ------------------------------------ ------ + ---------- + -------------------------------- ---------- + --------- 7603319 | c82160a5c74aa76489d304a114617c02598f4e81 | v1.70.0 | c82160a5c74aa76489d304a114617c02598f4e81 |(1行)

一旦设法成功运行一次ELT管道,您可能会想一次又一次地运行它。

Meltano允许您设置管道计划,然后由受支持的协调器(如Apache Airflow)自动将其排入并运行。

当您将气流编排器添加到项目中时,Meltano DAG生成器将自动添加到orchestrate / dags目录中,默认情况下Airflow将在其中查找DAG。 ,您可以轻松修改DAG生成器或添加自己的DAG生成器。

#调度管道meltano调度gitlab-to-jsonl tap-gitlab target-jsonl @hourlymeltano调度gitlab-to-postgres tap-gitlab target-postgres @daily --transform = run#列出调度的管道meltano调度列表#添加Airflow Orchestrator和默认的DAG generatormeltano添加Orchestrator airflow#启动Airflow Scheduler(在后台添加`-D`)meltano调用airflow scheduler

现在您已经在本地运行了管道,现在该在生产中重复此技巧了!

由于您的Meltano项目是唯一的事实来源,因此在生产中部署管道非常简单,但是您可以通过将它们全部包装到特定于项目的Docker容器映像中来极大地简化此过程(并防止环境之间的不一致引起的问题!)。 :轻巧,独立,可执行的软件包,其中包含运行应用程序所需的一切:代码,运行时,系统工具,系统库和设置。

然后,可以在运行Docker的任何环境(或兼容的工具,如Kubernetes)上使用此映像,以在项目上下文中直接运行meltano命令,而无需分别管理Meltano,项目的插件或任何其他项目的安装。他们的依赖性。

#为了使这些示例正常工作,请确保#已安装Docker docker --version#将Docker文件添加到您的项目中meltano添加文件docker#构建包含#Meltano,您的项目及其所有插件的Docker镜像docker build --tagmeltano-demo -项目:开发

#查看Meltano版本docker运行meltano-demo-project:dev --version#运行gitlab-to-jsonl管道并#挂载卷以提取目标jsonl输出docker run \ --volume $()/ output:/ project / output \ meltano -demo-project:dev \ elt tap-gitlab target-jsonl --job_id = gitlab-to-jsonl

与我们目前关注于能够使用CLI和版本控制的数据工程师一致,Meltano已针对meltano CLI的使用进行了优化,并直接更改了melano.yml项目文件。

但是,当您要快速检查项目的计划管道的状态和最新日志时,或者要让较少的技术团队成员或客户选择配置其提取程序的选项时,也可以使用基于Web的UI,加载程序和管道本身。