在使用分析型数据库时,稳定的数据导入是非常重要的生产要素。一般新用户经常在进行首次的数据导入时因为操作不当无法成功,或成功后无法稳定运行。这里我们来看一下建立一个生产化的数据导入任务的注意事项。
数据的准备方面
想要稳定的导入数据,首先要在数据的源头稳定的产出数据。一份对于分析型数据库来说稳定的数据至少要满足:
数据所在的项目名(对应源头为ODPS)/文件访问路径(对应源头为OSS,暂不支持)/服务器连接串(对应源头为RDS,暂不支持)和表名与LOADDATA命令的中的源头一致并保持稳定。
数据表的字段名,在源头上与在分析型数据库上的配置一致,源头表可以比分析型数据库有更多的字段,但是不能比分析型数据库表缺少字段。
源头表进行导入的分区的数据不能为空,进行导入的数据主键不能有NULL值,HASH分区键不能存在大量NULL值或同样的HASH分区键的数据条数过多,例如超过了每个分区的平均数据量的三倍。否则不仅会对查询性能造成影响,在极端情况下也会导致数据导入时间过长或者失败。
调用导入命令
在数据产出后,可以通过MySQL连接的方式或者HTTP Rest-API的方式调用数据导入命令,这时应该注意:
调用命令时,命令所引用的源头表/分区的数据已经完整的产出完毕,并且若源头是ODPS/OSS,应该不在有任何在源头的写入操作。所以通常需要一个良好的离线任务调度系统(例如阿里云DPC中的数据开发平台)来进行相关的任务运行和调度。
调用命令时,要确保命令所引用的源头表/分区已经对ALIYUN$garuda_build@aliyun.com授予足够的权限并未开启保护模式等阻止数据流出的安全策略。
调用命令时分析型数据库中该表没有正在运行的导入任务,否则会返回失败。
查询数据导入状态和解决导入中的问题
在生产系统中查询数据导入状态,通常更多的是通过HTTP API进行的查询的,这里如果有一个较好的离线任务调度系统,那么实现难度并不大。
在数据导入的过程中,经常会因为出现各种错误而导致导入中断,具体的错误处理可以见附录一:错误码中。