加载指定 having lines separator 时max_data_processor 不起作用
问题现象
当使用文本加载方式时,行分隔符默认为
'\n'
。如果某列数据可能包含了行分隔符,
则需要在
SQL
中输入
'having lines separator'
子句,同时需要输入
'enclosed by'
指定字
段包围符。加载
sql
如下:
load data infile 'sftp://gbase:gbase@192.168.105.100//home/gbase/test.txt' into t
able test data_format 3 having lines separator fields terminated by '|' enclose
d by '"';
当 在
load sql
中 指 定
max_data_processors
,或者在数据库中修改参数
gcluster_loader_max_data_processors
加 载 时 , 通 过 查 看 系 统 表
information_schema.load_satus
发现只有一个
node
节点参与数据分发处理,指定的
参数不起作用,加载性能较慢。
原因分析
GBase 8a MPP Cluster FAQ FAQ
文档版本(2021-04-02) 南大通用数据技术股份有限公司
92
这个现象在当前产品中是正常的约束,因为列数据中不包含有行分隔符时,可以将
数据文件按照行进行分块切分,发送给多个
node
去进行数据处理分发。
而列数据中包含有行分隔符时,无法直接将数据文件按照行分隔符分块切分,需要
考虑每个行分隔符前后的包围符是否成对匹配,这个过程是无法并行操作的。
解决方法
建议从数据来源上杜绝这种列数据中包含有行分隔符的情况,比如可以自行指定多
字节行分隔符。