【问题标题】:Apache Airflow - MySQL to BigQuery - how to get data from previous month?Apache Airflow - MySQL 到 BigQuery - 如何获取上个月的数据?
【发布时间】:2019-08-19 02:01:26
【问题描述】:

我们正在使用 Apache Airflow 在 Google BigQuery 中构建数据仓库解决方案,以将 MySQL 表传输到云端。我每天都启动并运行以增量方式获取数据

MySQLToGoogleCloudStorageOperator => GoogleCloudStorageTBigQueryOperator

在 .sql 中使用该位:

WHERE timestamp BETWEEN '{{ macros.ds_add(ds, -1) }}' AND '{{ ds }}'

它运行良好,但我们有一个表,我们想在每月的 10 号每月更新一个表,但要从上个月的整个月中获取数据 - 所以当执行日期为 2019-03-10 运行时,我们想要获取

timestamp BETWEEN '2019-02-01 00:00:00' AND '2019-03-01 00:00:00'

等等。最好和最简单的方法是什么?

【问题讨论】:

    标签: mysql google-cloud-platform google-bigquery airflow


    【解决方案1】:

    您是否考虑过 Cloud BQ 分区?

    您可以创建每月分区(本质上是动态的)并仅修补您希望在 Cloud BQ 上变异的月份的数据。

    通过 Cloud Composer 和 Cloud Functions 之间的耦合,所有这些都可以非常巧妙地编排。

    【讨论】:

      【解决方案2】:
      #standardSQL
      SELECT
        CURRENT_DATE() as today,
        DATE_TRUNC(CURRENT_DATE(), MONTH) as first_day_this_month,
        DATE_SUB(DATE_TRUNC(CURRENT_DATE(), MONTH), INTERVAL 1 MONTH) as first_day_last_month;
      

      结果:

      【讨论】:

        【解决方案3】:

        你不能简单地玩弄执行日期吗? -> 上个月的第一天

        {{ ds.ds_add(-30).replace(day=1) }}
        

        -> 下个月的第一天

        {{ ds.replace(day=1) }}
        

        【讨论】:

          猜你喜欢
          • 2021-09-19
          • 2019-01-03
          • 1970-01-01
          • 1970-01-01
          • 2011-07-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多