云上AnalyticDB MySQL数据仓库相比传统的数仓的优势提供了非常丰富的数据更新操作。
1. 批量打包方式写入数据
1) INSERT INTO
用于向表中插入数据,遇到主键重复时会自动忽略当前写入数据,不做更新,作用等同于INSERT IGNORE INTO。
2) REPLACE INTO
用于实时覆盖写入数据。写入数据时,根据主键判断待写入的数据是否已经存在于表中,如果已经存在,则先删除该行数据,然后插入新的数据;如果不存在,则直接插入新数据。
为了提高性能,建议如下操作:
• 通过每条INSERT或者REPLACE语句写入的数据行数大于1000行,但写入的总数据量不宜太大,不超过16MB。
• 通过批量打包方式写入数据时,单个批次的写入延迟相对会高一些。
• 写入报错时,需要做重试确保数据被写入,重试导致的数据重复可以通过表的主键来消除。
2. 更新数据
AnalyticDB for MySQL提供多种数据更新方式,推荐策略为:
• 更新频率高、基于主键:REPLACE INTO会将整行进行替换。
• 更新频率低、基于主键:REPLACE INTO;UPDATE。
• 更新频率低、基于任意条件:UPDTAE。
3. 删除数据/分区/表
AnalyticDB for MySQL提供多种数据删除方式,推荐策略为:
• 数据删除频率低、基于主键为条件的删除,可通过DELETE FROM WHERE PK='xxx'删除数据。
• 数据删除频率低、基于任意条件的删除,可通过DELETE删除数据。
• 通过TRUNCATE TABLE db_name.table_name PARTITION partition_name删除指定二级分区。
• 通过TRUNCATE TABLE db_name.table_name删除指定表(包括所有二级分区)数据。
4. 批量导入数据
AnalyticDB for MySQL批量导入适用于大数据量导入的场景,导入过程中可以查询旧数据,导入操作完成后一键切换新数据。导入失败时,支持回滚新数据,不影响查询旧数据。
• 从大数据系统、大存储环境导入数据,采用INSERT OVERWRITE INTO SELECT方式处理,如从MaxCompute、OSS导入数据到AnalyticDB for MySQL。
• 批量导入单个表时,导入任务会在系统中串行执行;批量导入多个表时,导入任务会在系统中并行执行,默认并行执行2个任务。
5. 实时导入数据
AnalyticDB for MySQL实时导入适用于小数据量导入的场景。
• 从业务系统实时导入数据时,采用INSERT INTO SELECT FROM。
• 实时导入任务使用AnalyticDB for MySQL中的资源,如果查询数据期间需要导入数据,建议在QPS(Query Per Second,每秒查询率)较低时进行导入操作。