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