DB2是IBM的一款關係型資料庫管理系統,JDBC DB2 Source Connector是一個用於透過JDBC讀取外部資料來源資料的聯結器。Apache SeaTunnel如何支援JDBC DB2 Sink Connector?請參考本文件。
支援引擎
Spark
Flink
SeaTunnel Zeta
主要功能
使用
Xa 事務
來確保精確一次性
。因此,只支援對支援Xa 事務
的資料庫進行精確一次性
操作。您可以設定is_exactly_once=true
來啟用它。
描述
透過 JDBC 寫入資料。支援批處理模式和流式模式,支援併發寫入,支援精確一次性語義(使用 XA 事務保證)。
支援的資料來源資訊
資料來源 | 支援的版本 | 驅動程式 | URL | Maven |
---|---|---|---|---|
DB2 | 不同的依賴版本有不同的驅動程式 | com.ibm.db2.jdbc.app.DB2Driver | jdbc:db2://127.0.0.1:50000/dbname | 下載 |
資料庫依賴
請下載與 'Maven' 相對應的支援列表,並將其複製到
'$SEATNUNNEL_HOME/plugins/jdbc/lib/'
工作目錄中
例如,對於 DB2 資料來源:cp db2-connector-java-xxx.jar $SEATNUNNEL_HOME/plugins/jdbc/lib/
資料型別對映
Sink 選項
名稱 | 型別 | 必填 | 預設值 | 描述 |
---|---|---|---|---|
url | 字串 | 是 | - | JDBC 連線的 URL。例如:jdbc:db2://127.0.0.1:50000/dbname |
driver | 字串 | 是 | - | 用於連線到遠端資料來源的 JDBC 類名,如果使用 DB2,則值為 com.ibm.db2.jdbc.app.DB2Driver 。 |
user | 字串 | 否 | - | 連線例項的使用者名稱 |
password | 字串 | 否 | - | 連線例項的密碼 |
query | 字串 | 否 | - | 使用此 SQL 將上游輸入資料寫入資料庫。例如 INSERT ... ,query 具有更高的優先順序。 |
database | 字串 | 否 | - | 使用此 database 和 table-name 自動生成 SQL,並接收上游輸入資料寫入資料庫。此選項與 query 互斥,並具有更高的優先順序。 |
table | 字串 | 否 | - | 使用資料庫和此表名自動生成 SQL,接收上游輸入資料寫入資料庫。此選項與 query 互斥,並具有更高的優先順序。 |
primary_keys | 陣列 | 否 | - | 此選項用於支援自動生成 SQL 時的 insert 、delete 和 update 操作。 |
support_upsert_by_query_primary_key_exist | 布林 | 否 | false | 根據查詢主鍵是否存在選擇使用 INSERT SQL、UPDATE SQL 處理更新事件(INSERT、UPDATE_AFTER)。此配置僅在資料庫不支援 upsert 語法時使用。請注意,此方法效能較低。 |
connection_check_timeout_sec | 整數 | 否 | 30 | 用於等待驗證連線的資料庫操作完成的時間(以秒為單位)。 |
max_retries | 整數 | 否 | 0 | 提交失敗(executeBatch)的重試次數。 |
batch_size | 整數 | 否 | 1000 | 用於批處理寫入,當緩衝記錄數量達到 batch_size 或時間達到 batch_interval_ms 時,資料將重新整理到資料庫。 |
batch_interval_ms | 整數 | 否 | 1000 | 用於批處理寫入,當緩衝記錄數量達到 batch_size 或時間達到 batch_interval_ms 時,資料將重新整理到資料庫。 |
is_exactly_once | 布林 | 否 | false | 是否啟用精確一次性語義,將使用 XA 事務。如果啟用,需要設定 xa_data_source_class_name 。 |
generate_sink_sql | 布林 | 否 | false | 基於要寫入的資料庫表自動生成 SQL 語句。 |
xa_data_source_class_name | 字串 | 否 | - | 資料庫驅動程式的 XA 資料來源類名,例如,DB2 為 com.db2.cj.jdbc.Db2XADataSource 。其他資料來源請參考附錄。 |
max_commit_attempts | 整數 | 否 | 3 | 事務提交失敗的重試次數。 |
transaction_timeout_sec | 整數 | 否 | -1 | 事務開啟後的超時時間,預設為 -1(永不超時)。請注意,設定超時可能會影響精確一次性語義。 |
auto_commit | 布林 | 否 | true | 預設啟用自動事務提交。 |
common-options | 否 | - | Sink 外掛的通用引數,請參考 Sink Common Options 獲取詳細資訊。 |
提示
如果未設定
partition_column
,則將以單一併發方式執行;如果設定了partition_column
,則根據任務的併發度並行執行。
任務示例
簡單示例:
該示例定義了一個 SeaTunnel 同步任務,透過 FakeSource 自動生成資料併傳送到 JDBC Sink。FakeSource 生成總共 16 行資料(row.num=16),每行有兩個欄位,name(字串型別)和 age(整數型別)。最終的目標表是 test_table,在表中也將有 16 行資料。在執行此作業之前,您需要在您的 DB2 中建立資料庫 test 和表 test_table。如果您尚未安裝和部署 SeaTunnel,請按照 安裝 SeaTunnel 中的說明安裝和部署 SeaTunnel。然後按照 使用 SeaTunnel 引擎快速入門 中的說明執行此作業。
# 定義執行時環境
env {
# 您可以在這裡設定 Flink 配置
execution.parallelism = 1
job.mode = "BATCH"
}
source {
# 這是一個示例源外掛,僅用於測試和演示源外掛功能
FakeSource {
parallelism = 1
result_table_name = "fake"
row.num = 16
schema = {
fields {
name = "string"
age = "int"
}
}
}
# 如果您想要獲取更多關於如何配置 SeaTunnel 並檢視完整的源外掛列表的資訊,
# 請訪問 https://seatunnel.apache.org/docs/category/source-v2
}
transform {
# 如果您想要獲取更多關於如何配置 SeaTunnel 並檢視完整的轉換外掛列表的資訊,
# 請訪問 https://seatunnel.apache.org/docs/category/transform-v2
}
生成 Sink SQL
該示例不需要編寫複雜的 SQL 語句,您可以配置資料庫名稱和表名稱,以自動生成要插入的語句。
sink {
jdbc {
url = "jdbc:db2://127.0.0.1:50000/dbname"
driver = "com.ibm.db2.jdbc.app.DB2Driver"
user = "root"
password = "123456"
query = "insert into test_table(name,age) values(?,?)"
}
# 如果您想要獲取更多關於如何配置 SeaTunnel 並檢視完整的接收外掛列表的資訊,
# 請訪問 https://seatunnel.apache.org/docs/category/sink-v2
}
sink {
jdbc {
url = "jdbc:db2://127.0.0.1:50000/dbname"
driver = "com.ibm.db2.jdbc.app.DB2Driver"
user = "root"
password = "123456"
# 根據資料庫表名自動生成 SQL 語句
generate_sink_sql = true
database = test
table = test_table
}
}
精確一次性:
為了確保精確寫入場景,我們保證精確一次性。
sink {
jdbc {
url = "jdbc:db2://127.0.0.1:50000/dbname"
driver = "com.ibm.db2.jdbc.app.DB2Driver"
max_retries = 0
user = "root"
password = "123456"
query = "insert into test_table(name,age) values(?,?)"
is_exactly_once = "true"
xa_data_source_class_name = "com.db2.cj.jdbc.Db2XADataSource"
}
}
本文由 白鯨開源 提供釋出支援!