导入数据最佳实践 本章节主要介绍导入数据的最佳实践。 从OBS并行导入数据 • 将导入数据拆分为多个文件 导入大数据量的数据时通常需要较长的时间及耗费较多的计算资源。 从OBS上导入数据时,如下方法可以提升导入性能:将数据文件存储到OBS前,尽可能均匀地将文件切分成多个,文件的数量以DN的整数倍更适合。 • 在导入前后验证数据文件 从OBS导入数据时,首先将您的文件上传到OBS存储桶中,我们建议您列出存储桶的内容,然后验证该存储桶是否包含所有正确的文件并且仅包含这些文件。 在完成导入操作后,请使用SELECT查询语句以验证所需文件是否已导入。 • OBS导入导出数据时,不支持中文路径。 使用GDS导入数据 • 数据倾斜会造成查询表性能下降。对于记录数超过千万条的表,建议在执行全量数据导入前,先导入部分数据,以进行数据倾斜检查和调整分布列,避免导入大量数据后发现数据倾斜,调整成本高。 • 为了优化导入速度,建议拆分文件,使用多GDS进行并行导入。另外,单个导入任务可以拆分成多个导入任务并发执行导入,多个导入任务使用同一GDS时可以使用t参数打开GDS多线程并发执行导入。GDS建议挂载在不同物理盘以及不同网卡上,避免物理IO以及网络可能出现的瓶颈。 • 在GDS IO与网卡未达到物理瓶颈前,可以考虑在数据仓库开启SMP进行加速。SMP开启之后会对对应的GDS产生成倍的压力。需要特别说明的是:SMP自适应衡量的标准是数据仓库的CPU压力,而不是GDS所承受的压力。 • GDS与数据仓库通信要求物理网络畅通,并且尽量使用万兆网。千兆网无法承载高速的数据传输压力,极易出现断连。即使用千兆网时数据仓库无法提供通信保障。满足万兆网的同时,数据磁盘组I/O性能大于GDS单核处理能力上限(约400MB/s)时,方可寻求单文件导入速率最大化。 • 并发导入场景,与单表导入相似,至少应保证I/O性能大于网络最大速率。 • GDS跟DN的数据比例建议在1:3至1:6之间。 • 为了优化列存分区表的批量插入效率,在批量插入过程中会对数据进行缓存后再批量写盘。通过GUC参数“partitionmembatch”和“partitionmaxcachesize”,可以设置缓存个数以及缓存区大小。这两个参数的值越小,列存分区表的批量插入越慢。当然,越大的缓存个数和缓存分区,会带来越多的内存消耗。