66 lines
1.9 KiB
Python
66 lines
1.9 KiB
Python
from airflow import DAG
|
|
from airflow.providers.common.sql.operators.sql import SQLExecuteQueryOperator
|
|
from airflow.operators.python import PythonOperator
|
|
from datetime import datetime, timedelta
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
## OLD ( Package repliction)
|
|
|
|
def test_oracle_connection(**context):
|
|
"""Test Oracle connection and log the result"""
|
|
conn_id = "marsdb_loader"
|
|
from airflow.providers.oracle.hooks.oracle import OracleHook
|
|
|
|
try:
|
|
logger.debug("Attempting to connect to Oracle database...")
|
|
hook = OracleHook(oracle_conn_id=conn_id)
|
|
conn = hook.get_conn()
|
|
cursor = conn.cursor()
|
|
cursor.execute("SELECT 1 FROM dual")
|
|
result = cursor.fetchone()
|
|
logger.info(f"Connection test successful. Result: {result}")
|
|
cursor.close()
|
|
conn.close()
|
|
except Exception as e:
|
|
logger.error(f"Connection test failed: {str(e)}")
|
|
raise
|
|
|
|
default_args = {
|
|
'depends_on_past': False,
|
|
'start_date': datetime(2025, 6, 25),
|
|
'retries': 1,
|
|
'retry_delay': timedelta(seconds=15),
|
|
}
|
|
|
|
with DAG(
|
|
'oracle_plsql_test_dag',
|
|
default_args=default_args,
|
|
schedule_interval=None,
|
|
catchup=False,
|
|
) as dag:
|
|
|
|
test_connection = PythonOperator(
|
|
task_id='test_oracle_connection',
|
|
python_callable=test_oracle_connection,
|
|
)
|
|
|
|
# With named parameter
|
|
run_plsql = SQLExecuteQueryOperator(
|
|
task_id='run_plsql_procedure',
|
|
conn_id="marsdb_loader",
|
|
sql="""
|
|
BEGIN
|
|
DATA_REPLICATOR.export_table(
|
|
p_table_owner => 'c2d',
|
|
p_table_name => 't_all_assets_servicer',
|
|
p_objectstore_uri => 'https://oci-test-sani.bucket.vpce-0b3a5f000733397b0-kxlyoh5z.s3.eu-central-1.vpce.amazonaws.com/',
|
|
p_date_column => 'SNAPSHOT_DATE'
|
|
);
|
|
END;
|
|
""",
|
|
)
|
|
|
|
test_connection >> run_plsql
|