Apache Airflow - от MySQL до BigQuery - как получить данные за предыдущий месяц? - PullRequest
0 голосов
/ 28 марта 2019

Мы создаем решение для хранилища данных в Google BigQuery, используя Apache Airflow для переноса таблиц 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'

и так далее. Какой самый лучший и простой способ сделать это?

Ответы [ 3 ]

0 голосов
/ 28 марта 2019
#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;

Результаты: enter image description here

0 голосов
/ 28 марта 2019

Не могли бы вы просто поиграть с датой исполнения? -> первый день прошлого месяца

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

-> первые дни следующего месяца

{{ ds.replace(day=1) }}
0 голосов
/ 28 марта 2019

Рассматривали ли вы разделы Cloud BQ?

Вы можете создавать ежемесячные разделы (которые являются динамическими по своему характеру) и вносить в патч только данные за месяц, который вы хотите изменить на Cloud BQ.

Все это можно очень аккуратно организовать с помощью связи между Cloud Composer и Cloud Functions.

...