I like the idea a lot. Good direction. I know we have a few people who are better in functional thinking than me so I think I would love those people to work it out. Happy to listen to the discussions :)
One thing that struck me however. I am not sure if that falls in the same camp, but I have a feeling that there is at least some common part with the proposal from Bolke about the Lineage. Those two things (functional DAG API and Lineage) are not directly connected but I think the design of both has at least some common part and it would make sense that at least we talk about this and how they play together. WDYT Bolke? J On Fri, Feb 21, 2020 at 7:13 PM Dan Davydov <ddavy...@twitter.com.invalid> wrote: > Here is the link to the AIP for folk's convenience: > > https://cwiki.apache.org/confluence/display/AIRFLOW/AIP-31%3A+Airflow+functional+DAG+API > > The proposal and this all looks really good to me :)! I do want to call out > to others that it's important we get the interface 95%+ right from the > get-go since it could be hard to change later once users start depending on > it. > > On Fri, Feb 21, 2020 at 12:07 PM Gerard Casas Saez > <gcasass...@twitter.com.invalid> wrote: > > > Hi everyone, > > > > Sending a new message to everyone to gather feedback on the AIP-31 about > > Airflow functional DAG API. This was initially discussed and proposed in > > [DISCUSS] Airflow functional DAGs. After leaving open a small doc to > > iterate on the proposal for a couple weeks, I decided to move forward to > > formalize it as an AIP document in confluence. I will still be tracking > > comments on the doc but would rather move the conversation here. > > > > AIP - 31 focuses on solving the issue about implicit message passing in > > Airflow by extending the DAG/Operator API to include a way to set up a > > message passing dependency on the same DAG file. This is complimentary to > > task dependency declaration and is intended to be used as another option > to > > declare dependencies by declaring message dependencies. > > > > In addition, AIP-31 proposes a way to declare PythonOperators from a > > function using decorators. This should help embed custom behavior into > DAGs > > without needing to create custom operators for everything. > > > > Changes proposed: > > > > > > • Add __call__ function in BaseOperator: Add a functional interface to > > replace class attributes on execution time. > > • XComArg class: This object is a reference to an XCom value that has not > > been created and will need to be resolved in the future. > > • PythonFunctionalOperator and Python Function Operator: Extend > > PythonOperator to map op_args and op_kwargs from a decorated interface > for > > easier set up and add a decorator to create PythonOperators from a > function > > in an easier way. > > > > > > See AIP document for a DAG example. > > > > Any help on how to proceed with this will be appreciated (also joined > > Slack and posted in. #airflow-creative). My guess is once we agree on > what > > the API should look like, next step is to do a vote and if successful to > > create JIRA issues and GitHub PRs with the mentioned changes. > > > > Please let me know if there’s any aspect that people feel > > strongly opinionated against or aspects that are not clear and I should > > work on expanding further. > > > > Best, > > > > Gerard Casas Saez > > Twitter | Cortex | @casassaez > > > -- Jarek Potiuk Polidea <https://www.polidea.com/> | Principal Software Engineer M: +48 660 796 129 <+48660796129> [image: Polidea] <https://www.polidea.com/>