Airflow 将 postgres 数据库的所有表导出到 BigQuery

Airflow export all tables of a postgres DB to BigQuery

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

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

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

您可以试用新的 Google Cloud Beta 功能 Cloud SQL federated queries 您在 BigQuery 项目中为 Postgres 创建连接资源的位置,您可以在 EXTERNAL_QUERY 方法中使用连接,returns BigQuery table 引用所需的 Postgres table .

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

那行得通吗,即使这样做,您也需要实现来自 postgres table 的所有 table 一些遍历 postgres tables 的脚本。

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

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