Как выполнить sql Script с несколькими операторами из Airflow OracleOperator - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь вызвать файл SQL с несколькими операторами, разделенными; через OracleOperator в airflow, но его выдача ниже ошибки с несколькими операторами

E.g файл, содержащий

CALL DROP_OBJECTS ('TABLE_XYZ');

CREATE TABLE TABLE_XYZ КАК ВЫБРАТЬ 1 Dummy from DUAL;

[2019-06-18 18: 19: 12,582] { init .py: 1580} ОШИБКА - ORA-00933: команда SQL не завершена должным образом Traceback (последний вызов был последним): Файл "/usr/local/lib/python3.6/site-packages/airflow/models/init.py", строка 1441, в _run_raw_task result = task_copy.execute (context = context) Файл "/usr/local/lib/python3.6/site-packages/airflow/operators/oracle_operator.py", строка 63, в исполнении Параметры = self.parameters) Файл "/usr/local/lib/python3.6/site-packages/airflow/hooks/dbapi_hook.py", строка 172, в работе cur.execute (ы) cx_Oracle.DatabaseError: ORA-00933: команда SQL неправильно завершена

Даже с одним утверждением, оканчивающимся на; давая ниже ошибка:

например, файл

CREATE TABLE TABLE_XYZ КАК ВЫБРАТЬ 1 Dummy from DUAL;

[2019-06-18 17: 47: 53,137] { init .py: 1580} ОШИБКА - ORA-00922: отсутствует или недействителен Traceback (последний вызов был последним): Файл "/usr/local/lib/python3.6/site-packages/airflow/models/init.py", строка 1441, в _run_raw_task result = task_copy.execute (context = context) Файл "/usr/local/lib/python3.6/site-packages/airflow/operators/oracle_operator.py", строка 63, в исполнении Параметры = self.parameters) Файл "/usr/local/lib/python3.6/site-packages/airflow/hooks/dbapi_hook.py", строка 172, в работе cur.execute (ы)

with DAG('my_simple_dag',
     default_args=default_args,
     template_searchpath=['/root/rahul/'],
     schedule_interval='*/10 * * * *',
     ) as dag:

opr_oracle = OracleOperator(task_id='oracleTest',oracle_conn_id='STG',
                    sql='test.sql')

мне нужно передать какой-либо дополнительный параметр, чтобы dbhook понял, что файл нужно разделить в отдельном выражении?

согласно документации, которую он ожидает param sql: код sql для выполнения. Может получить str, представляющий SQL-оператор, список str (операторов sql) или ссылка на файл шаблона. Ссылка на шаблон распознается по str, оканчивающемуся на «.sql» (Шаблонный)

но шаблон .sql не работает с несколькими операторами. Любая помощь будет оценена . Спасибо !!

1 Ответ

0 голосов
/ 19 июня 2019

Вместо sql-файла вы можете назначить строковый формат SQL-выражения " Ниже приведен оригинальный документ API для работы с Oracle в потоке воздуха. sql может быть str или список str. Если вы предпочитаете использовать шаблон файла, вам нужно отобразить шаблон файла с параметром. Примечание: в Airflow используется jinjia2 в качестве шаблона.

API oracle_operator

sql (str или list [str]) - SQL-код, который будет выполнен. Может получить строку, представляющую оператор SQL, список строк (оператор SQL) или ссылка на файл шаблона. Ссылка на шаблон распознается str оканчивающийся на ".sql" (шаблонный)

oracle_conn_id (str) - ссылка на конкретную базу данных Oracle

параметры (отображение или итерация) - (необязательно) параметры для отображения SQL-запрос с.

autocommit (bool) - если True, каждая команда автоматически фиксируется. (значение по умолчанию: False)

...