【问题标题】:Airflow export all tables of a postgres DB to BigQueryAirflow 将 postgres 数据库的所有表导出到 BigQuery
【发布时间】:2020-05-16 09:37:54
【问题描述】:

我目前正在使用 Airflow PostgresToGoogleCloudStorageOperatorGoogleCloudStorageToBigQueryOperator 将我的 Postgres DB(托管在 AWS RDS 上)的每个表导出到 BigQuery。它可以工作,但我有 75 个表,所以 Airflow 创建了 75 * 2 个工作。由于我是 Airflow 的新手,我不知道这是否是一个好习惯。

无论如何,我想找到一种方法将所有表一次(pg_dump?)导出到 GCS,然后将它们导入 BigQuery。

【问题讨论】:

    标签: postgresql google-bigquery google-cloud-storage airflow google-cloud-composer


    【解决方案1】:

    这确实是一个见仁见智的问题,但我认为拥有 72 x 2 任务的工作很好。听起来这项工作将是一次性的或不经常的时间表?如果您使用 YAML 文件来指定表并让您的 DAG 查看 YAML 文件以获取要导出的表列表,则会获得奖励积分。

    如果这是您经常运行的事情,那么我认为最好按照您的建议使用 BashOperatorpg_dump,因为 Airflow 在其他任务完成后可能需要相当长的时间来安排任务。您必须对您的 Airflow 并行性和调度程序间隔(可能是其他一些 Airflow 配置选项)进行一些测试,以使其有效运行。

    【讨论】:

    • 作业将每晚运行一次。至于 YML 文件,我目前正在使用 PostgresHook 来获取所有表名。它做得很好,但也许它不是惯用的?无论如何,感谢您的洞察力,我也会考虑使用 BashOperator
    【解决方案2】:

    如果您的 Postgres 实例是使用 Google Cloud SQL 托管的:

    您可以试用新的 Google Cloud Beta 功能Cloud SQL federated queries 您可以在其中为 BigQuery 项目中的 Postgres 创建连接资源,并且可以在 EXTERNAL_QUERY 方法中使用该连接,该方法会返回所需 Postgres 表的 BigQuery 表引用。

    这有点慢(数据正在从 Postgres 复制到 BigQuery),但您可以使用气流(BigQueryOperatordestination_table 选项)将连接结果具体化到一个表中,然后当您查询目标表时性能至少应该和 Postgres 一样好。

    这是否可行,即使这样做,您也需要手动从 postgres 实现所有表/使用一些迭代 postgres 表的脚本。

    【讨论】:

    • 感谢您的建议@fpopic,不幸的是,我的数据库托管在不提供此类功能的 AWS 上。但它可能会帮助其他人!
    猜你喜欢
    • 2021-10-21
    • 2019-02-17
    • 2021-03-02
    • 1970-01-01
    • 2020-01-18
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多