天天看點

Datax 3.0讀寫mysql

讀寫樣例

{
	"job": {
		"setting": {
			"speed": {
				"channel": 3
			},
			"errorLimit": {
				"record": 0,
				"percentage": 0.02
			}
		},
		"content": [
			{
				"reader": {
					"name": "mysqlreader",
					"parameter": {
						"username": "jydb",
						"password": "jydb",
						"column": [
							"id",
							"fund_code",
							"underlying_security_id",
							"component_share",
							"creation_redemption_unit",
							"estimate_cash_component",
							"creation_cash_substitute",
							"substitute_flag",
							"trading_day"
						],
						"splitPk": "id",
						"connection": [
							{
								"table": [
									"dim_etf_info"
								],
								"jdbcUrl": [
									"jdbc:mysql://192.168.**.**:33061/test"
								]
							}
						]
					}
				},
				"writer": {
					"name": "mysqlwriter",
					"parameter": {
						 "writeMode": "insert",
                        "username": "root",
                        "password": "123456",
                        "column": [
                            "id",
							"fund_code",
							"underlying_security_id",
							"component_share",
							"creation_redemption_unit",
							"estimate_cash_component",
							"creation_cash_substitute",
							"substitute_flag",
							"trading_day"
                        ],
                        "session": [
                        	"set session sql_mode='ANSI'"
                        ],
                        "preSql": [
                            "delete from dim_etf_info"
                        ],
                        "connection": [
                            {
                                "jdbcUrl": "jdbc:mysql://10.26.114.11:3306/fl_db?useUnicode=true&characterEncoding=utf-8",
                                "table": [
                                    "dim_etf_info"
                                ]
                            }
                        ]
                    }
					
				}
			}
		]
	}
}
           

2 .MysqlWriter

MysqlWriter 插件實作了寫入資料到 Mysql 主庫的目的表的功能。在底層實作上, MysqlWriter 通過 JDBC 連接配接遠端 Mysql 資料庫,并執行相應的 insert into … 或者 ( replace into …) 的 sql 語句将資料寫入 Mysql,内部會分批次送出入庫,需要資料庫本身采用 innodb 引擎。

參數說明

jdbcUrl

描述:目的資料庫的 JDBC 連接配接資訊。作業運作時,DataX 會在你提供的 jdbcUrl 後面追加如下屬性:yearIsDateType=false&zeroDateTimeBehavior=convertToNull&rewriteBatchedStatements=true

注意:1、在一個資料庫上隻能配置一個 jdbcUrl 值。這與 MysqlReader 支援多個備庫探測不同,因為此處不支援同一個資料庫存在多個主庫的情況(雙主導入資料情況)
      2、jdbcUrl按照Mysql官方規範,并可以填寫連接配接附加控制資訊,比如想指定連接配接編碼為 gbk ,則在 jdbcUrl 後面追加屬性 useUnicode=true&characterEncoding=gbk。具體請參看 Mysql官方文檔或者咨詢對應 DBA。
           

必選:是

預設值:無

username

描述:目的資料庫的使用者名

必選:是

預設值:無

password

描述:目的資料庫的密碼

必選:是

預設值:無

table

描述:目的表的表名稱。支援寫入一個或者多個表。當配置為多張表時,必須確定所有表結構保持一緻。

注意:table 和 jdbcUrl 必須包含在 connection 配置單元中
           

必選:是

預設值:無

column

描述:目的表需要寫入資料的字段,字段之間用英文逗号分隔。例如: “column”: [“id”,“name”,“age”]。如果要依次寫入全部列,使用表示, 例如: “column”: [""]。

column配置項必須指定,不能留白!

注意:1、我們強烈不推薦你這樣配置,因為當你目的表字段個數、類型等有改動時,你的任務可能運作不正确或者失敗
      2、 column 不能配置任何常量值
           

必選:是

預設值:否

session

描述: DataX在擷取Mysql連接配接時,執行session指定的SQL語句,修改目前connection session屬性

必須: 否

預設值: 空

preSql

描述:寫入資料到目的表前,會先執行這裡的标準語句。如果 Sql 中有你需要操作到的表名稱,請使用 @table 表示,這樣在實際執行 Sql 語句時,會對變量按照實際表名稱進行替換。比如你的任務是要寫入到目的端的100個同構分表(表名稱為:datax_00,datax01, … datax_98,datax_99),并且你希望導入資料前,先對表中資料進行删除操作,那麼你可以這樣配置:“preSql”:[“delete from 表名”],效果是:在執行到每個表寫入資料前,會先執行對應的 delete from 對應表名稱

必選:否

預設值:無

postSql

描述:寫入資料到目的表後,會執行這裡的标準語句。(原理同 preSql )

必選:否

預設值:無

writeMode

描述:控制寫入資料到目标表采用 insert into 或者 replace into 或者 ON DUPLICATE KEY UPDATE 語句

必選:是

所有選項:insert/replace/update

預設值:insert

batchSize

描述:一次性批量送出的記錄數大小,該值可以極大減少DataX與Mysql的網絡互動次數,并提升整體吞吐量。但是該值設定過大可能會造成DataX運作程序OOM情況。

必選:否

預設值:1024

參考:

https://github.com/alibaba/DataX/blob/master/mysqlreader/doc/mysqlreader.md

https://github.com/alibaba/DataX/blob/master/mysqlwriter/doc/mysqlwriter.md

繼續閱讀