气流 <--> Greenplum

Posted

技术标签:

【中文标题】气流 <--> Greenplum【英文标题】:Airflow <--> Greenplum 【发布时间】:2017-04-26 07:25:09 【问题描述】:

是否可以建立从 Airflow 到 Greenplum 的连接?记住 Greenplum 基于 PostgreSQL,是否可以建立到 Greenplum 主服务器的连接?

【问题讨论】:

【参考方案1】:

安德烈亚,

我认为您可以使用 Airflow 在 Greenplum 中对您的分析数据运行 ETL。

Jon 提供的“否”答案显然是关于使用 Greenplum 作为后端元数据存储,Airflow 在内部使用它来跟踪其 DAG 和任务。 Jon 用作示例的代码是 Airflow 如何创建用于其后端元数据存储的表,这与您要管理的 Greenplum 数据仓库的内容无关。

我怀疑您对 Greenplum 感兴趣的是您的大量分析数据,而不是 Airflow 后端。所以答案几乎肯定是肯定的!

你甚至可以通过使用标准的 PostgreSQL 钩子和操作符来获得:

我这样说是因为 Greenplum 似乎可以使用标准的 PostgreSQL Python API: https://gpdb.docs.pivotal.io/4330/admin_guide/managing/access_db.html

如果 Airflow 的标准 PostgreSQL 钩子 & 运算符不适合您,您可以轻松创建自己的。例如,请参阅我在 Snowflake 数据仓库中的工作;将 Snowflake Python 连接器集成到气流中是一件简单的事情。

https://github.com/aberdave/airflow-snowflake

如果不这样做,您应该能够使用 ODBC 或 JDBC 通过 Airflow 在 Greenplum 中管理日期。我使用 Python 与 Snowflake 一起工作,因为定制他们的 Python 连接器非常容易。

【讨论】:

谢谢你,@DaveAbercrombie。目前正在尝试您提到的两种方法。【参考方案2】:

没有。快速浏览一下 Airflow github repo 会发现他们正在使用主键约束加上一个具有唯一约束的附加列,Greenplum 不支持该列。

例如:

    op.create_table(
        'user',
        sa.Column('id', sa.Integer(), nullable=False),
        sa.Column('username', sa.String(length=250), nullable=True),
        sa.Column('email', sa.String(length=500), nullable=True),
        sa.PrimaryKeyConstraint('id'),
        sa.UniqueConstraint('username')
    )

在 Greenplum 中,您不能在 (id) 上拥有主键,在 (username) 上拥有另一个唯一约束。

他们的 github 存储库也没有提及其他 MPP 数据库平台,例如 Netezza 和 Teradata。也许 Airflow 适用于小数据、数据科学,但这听起来有点矛盾。

【讨论】:

以上是关于气流 <--> Greenplum的主要内容,如果未能解决你的问题,请参考以下文章

气流 - 如何获得所有未来的运行日期

如何在气流中配置 Google Cloud BigQuery

如何强制气流任务失败?

气流 - 如何仅“填充 DagBag”一次

安装气流时出错:默认情况下,Airflow 的依赖项之一安装 GPL

气流:一次运行气流子项的模式