一、问题:
注:前面能正常写入,突然就报错,导入失败,报错:“too many filtered rows xxx, "ErrorURL":"
{"TxnId":769494,"Label":"datax_doris_writer_bf176078-15d7-414f-8923-b0eb5f6d5da1","TwoPhaseCommit":"false","Status":"Fail","Message":"[INTERNAL_ERROR]too many filtered rows","NumberTotalRows":325476,"NumberLoadedRows":325473,"NumberFilteredRows":3,"NumberUnselectedRows":0,"LoadBytes":94697450,"LoadTimeMs":1498,"BeginTxnTimeMs":0,"StreamLoadPutTimeMs":2,"ReadDataTimeMs":117,"WriteDataTimeMs":1495,"CommitAndPublishTimeMs":0,"ErrorURL":"http://IP:8040/api/_load_error_log?file=__shard_8/error_log_insert_stmt_ce466641e5bad2af-99171040d6f76fb8_ce466641e5bad2af_99171040d6f76fb8"}
http://IP:8040/api/_load_error_log?file=__shard_8/error_log_insert_stmt_ce466641e5bad2af-99171040d6f76fb8_ce466641e5bad2af_99171040d6f76fb8"
内容如下: Reason: actual column number in csv file is less than schema column number.actual number: 11, column separator: [ ], line delimiter: [ ], schema column number: 16; . src line [320746671400 6540dbac03e56b6315de10f8 279ca466-2047-42f5-9932-1730703644e4 10 沙河市中瑞玻璃制品有限公司玻璃深加工生产线扩建项... 2023-10-31 00:00:00 130582 10 1004 10 ]; Reason: actual column number in csv file is less than schema column number.actual number: 1, column separator: [ ], line delimiter: [ ], schema column number: 16; . src line [2023-10-31]; Reason: actual column number in csv file is less than schema column number.actual number: 6, column separator: [ ], line delimiter: [ ], schema column number: 16; . src line [ \N 0 1698749356710 2023-10-31 18:49:16 2023-11-13 11:05:48];
二、解决办法
Datax 代码库编译
从datax 代码库拉取代码,执行编译
git clone https://github.com/alibaba/DataX.git
cd datax
mvn package assembly:assembly -Dmaven.test.skip=true
注:MYSQL版本改成你使用的版本;
more pom.xml
编译完成后可以在 datax/target/Datax
下看到datax.tar.gz 包
my_import.json
{"job": {"content": [{"reader": {"name": "mysqlreader","parameter": {"column": ["id","order_code","line_code","remark","unit_no","unit_name","price"],"connection": [{"jdbcUrl": ["jdbc:mysql://localhost:3306/demo"],"table": ["employees_1"]}],"username": "root","password": "xxxxx","where": ""}},"writer": {"name": "doriswriter","parameter": {"loadUrl": ["127.0.0.1:8030"],"loadProps": {},"column": ["id","order_code","line_code","remark","unit_no","unit_name","price"],"username": "root","password": "xxxxxx","postSql": ["select count(1) from all_employees_info"],"preSql": [],"flushInterval":30000,"connection": [{"jdbcUrl": "jdbc:mysql://127.0.0.1:9030/demo","selectedDatabase": "demo","table": ["all_employees_info"]}],"loadProps": {"format": "json","strip_outer_array":"true","line_delimiter": "\\x02"}}}}],"setting": {"speed": {"channel": "1"}}}
}
备注:
"loadProps": {"format": "json","strip_outer_array":"true","line_delimiter": "\\x02" }
- 这里我们使用了 JSON 格式导入数据
line_delimiter
默认是换行符,可能会和数据中的值冲突,我们可以使用一些特殊字符或者不可见字符,避免导入错误- strip_outer_array :在一批导入数据中表示多行数据,Doris 在解析时会将数组展开,然后依次解析其中的每一个 Object 作为一行数据
- 更多 Stream load 参数请参照 [Stream load文档](Stream load - Apache Doris)
- 如果是 CSV 格式我们可以这样使用
"loadProps": {"format": "csv","column_separator": "\\x01","line_delimiter": "\\x02" }
CSV 格式要特别注意行列分隔符,避免和数据中的特殊字符冲突,这里建议使用隐藏字符,默认列分隔符是:\t,行分隔符:\n
4.执行datax任务,具体参考 datax官网,或者
DataX Doriswriter - Apache Doris