[ 
https://issues.apache.org/jira/browse/AIRFLOW-1012?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

zgl reassigned AIRFLOW-1012:
----------------------------

    Assignee: zgl  (was: Ruslan Dautkhanov)

> Add run_as_script option so jinja templating can be used for sql parameter
> --------------------------------------------------------------------------
>
>                 Key: AIRFLOW-1012
>                 URL: https://issues.apache.org/jira/browse/AIRFLOW-1012
>             Project: Apache Airflow
>          Issue Type: Improvement
>          Components: core, db
>    Affects Versions: Airflow 1.8
>            Reporter: Ruslan Dautkhanov
>            Assignee: zgl
>            Priority: Major
>              Labels: database, improvement, operators, sql
>
> It would be great to extend jinja templating to sql parameter for SQL 
> Operators.
> With this improvement, it's possible to have extended Jinja template like 
> below that generates multiple SQL statements that can be passed as a single 
> 'sql' parameter, separated by ';' separator:
> {noformat}
>     )
>     >> OracleOperator( task_id='give_owner_grants', oracle_conn_id=ora_conn1, 
> run_as_script=True,
>         sql='''
>           {% for role in ['CONNECT', 'RESOURCE'] %}
>           GRANT {{ role }} TO {{ schema }};
>           {% endfor %}
>           {% for create_grant in ['PROCEDURE', 'SEQUENCE', 'SESSION', 
> 'TABLE', 'VIEW'] %}
>           GRANT CREATE {{ create_grant }} TO {{ schema }};
>           {% endfor %}
>           {% for tbsp in ['DISCOVER_MART_IDX01', 'DISCOVER_MART_TBS01', 
> 'STAGING_NOLOG'] %}
>           ALTER USER {{ schema }} QUOTA UNLIMITED ON {{ tbsp }};
>           {% endfor %}
>           GRANT SELECT ANY TABLE TO {{ schema }};
>           GRANT EXECUTE ON SYS.DBMS_SESSION TO {{ schema }};
>         '''
>     )
>     >> DummyOperator(task_id='stop')
> {noformat}
> Notice there are three Jinja 'for' loops that generate multiple SQL DDL 
> statements. 
> Without this change, sql has to be passed as an Python array, and Jinja 
> templating can't be used.
> I've tested this change with OracleOperator and works as expected. 
> Notice `run_as_script=True` parameter. run_as_script defaults to False so 
> this is a backward-compatible change.
> Most of the change is in airflow/hooks/dbapi_hook.py (very straightforward as 
> run() already supports running an array of statements) and a light change of 
> airflow/operators/oracle_operator.py - so this change can be easily applied 
> to other sql operators.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to