Здесь я пытаюсь получить данные из открытого источника и добавить их в таблицу как раздел на основе метки времени воздушного потока. Но это вызывает исключение воздушного потока. def partition_sql (тип_объекта): sql ...

0
Smriti 8 Янв 2021 в 17:08

1 ответ

Лучший ответ

Поскольку оба поля cmd и query являются шаблонными, это должно работать:

items = ["artist"] #add more tables to be created dynamically
with DAG(
        dag_id="dag_name",
        default_args=default_args,
) as dag:
    for item in items:
        command = f'python script.py 's3://db/{item}/update/airflow_ts={{ ds }} '
        update = DockerOperator(
            task_id=f'update_table_{item}',
            cmd=command
        )
        sql = f'ALTER TABLE db.{item} ADD IF NOT EXISTS PARTITION (airflow_ts={{ ds }}) LOCATION s3://db/table/update/airflow_ts={{ ds }};'
        partition = AWSAthenaOperator(
            task_id=f'partition_table_{item}',
            query=sql
        )

Вы можете изменить формат даты с {{ ds }} на любой другой. Вы можете просмотреть доступные форматы на странице макросов или настроить один из ваших.

Обратите внимание, что здесь вам не нужно сохранять SQL в коде. Вы можете сохранить его в файлах .sql, как описано в здесь

0
Elad 9 Янв 2021 в 20:13