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,
    )

本條目有用嗎?