气流 <--> 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