JdbcOperator¶
Java Database Connectivity (JDBC) 是用於 Java 程式語言的應用程式程式設計介面 (API),它定義了客戶端如何訪問資料庫。
警告
之前,JdbcOperator 用於執行此類操作。但目前 JdbcOperator 已被棄用,並將在提供程式的未來版本中移除。請考慮儘快切換到 SQLExecuteQueryOperator。
前置任務¶
要使用此運算子,您需要
安裝 python 模組 jaydebeapi: .. code-block:: bash
pip install apache-airflow[jdbc]
安裝一個 JVM 並新增
JAVA_HOME環境變數。安裝好您資料庫的 JDBC 驅動程式。
滿足這些前置條件後,您應該能夠執行此 Python 程式碼片段(將變數值替換為您驅動程式相關的值)。
如果缺少 jaydebeapi 模組或驅動程式不可用,其他錯誤訊息會通知您。一個 Connection Refused 錯誤意味著連線字串指向的主機沒有資料庫正在監聽新連線。
driver_class = "com.exasol.jdbc.EXADriver" driver_path = "/opt/airflow/drivers/exasol/EXASolution_JDBC-7.0.2/exajdbc.jar" connection_url = "jdbc:exa:localhost" credentials = ["", ""] conn = jaydebeapi.connect( driver_class, connection_url, credentials, driver_path, )
用法¶
使用 SQLExecuteQueryOperator 對可透過 JDBC 驅動程式訪問的資料庫(或資料儲存)執行命令。
JDBC 連線 必須作為 conn_id 傳遞。
tests/system/jdbc/example_jdbc_queries.py
insert_data = SQLExecuteQueryOperator(
task_id="insert_data",
sql="insert into my_schema.my_table select dt, value from my_schema.source_data",
conn_id="my_jdbc_connection",
autocommit=True,
)
引數 sql 可以接收一個字串或一個字串列表。每個字串可以是一個 SQL 語句或一個模板檔案的引用。模板引用透過以 ‘.sql’ 結尾來識別。
引數 autocommit 如果設定為 True,將在每個命令後執行提交(預設為 False)。
模板化¶
您可以使用 Jinja 模板 對 sql 進行引數化。
tests/system/jdbc/example_jdbc_queries.py
delete_data = SQLExecuteQueryOperator(
task_id="delete_data",
sql="delete from my_schema.my_table where dt = {{ ds }}",
conn_id="my_jdbc_connection",
autocommit=True,
)