数智融合计算服务 DATAARTSFABRIC-INSERT:注意事项
注意事项
- 只有拥有表INSERT权限的用户,才可以向表中插入数据。
- 如果使用RETURNING子句,用户必须要有该表的SELECT权限。
- 如果使用QUERY子句插入来自查询里的数据行,用户还需要拥有在查询里使用的表的SELECT权限。
- 如果使用OVERWRITE子句覆盖式插入数据,用户还需要拥有该表的SELECT和TRUNCATE权限。
- 当连接到TD兼容的数据库时,td_compatible_truncation参数设置为on时,将启用超长字符串自动截断功能,在后续的insert语句中(不包含外表的场景下),对目标表中char和varchar类型的列上插入超长字符串时,系统会自动按照目标表中相应列定义的最大长度对超长字符串进行截断。
如果向字符集为字节类型编码(SQL_ASCII,LATIN1等)的数据库中插入多字节字符数据(如汉字等),且字符数据跨越截断位置,这种情况下,按照字节长度自动截断,自动截断后会在尾部产生非预期结果。如果用户有对于截断结果正确性的要求,建议用户采用UTF8等能够按照字符截断的输入字符集作为数据库的编码集。

在处理ORC、PARQUET表数据时,建议使用INSERT OVERWRITE语法。例如:
- 当向非分区表中插入数据时,建议使用:INSERT OVERWRITE INTO tablename select_clause;
- 当向分区表中插入数据时,建议使用:INSERT OVERWRITE INTO tablename PARTITION FOR (partvalue [, partvalue]) select_clause;
因为当前针对ORC、PARQUET格式下,INSERT语法无法保证事务。如果使用INSERT语法,新数据会增量式写入表中,写入过程中可能会出现:
- 脏读,读到正在写入的数据。
- 如果写入过程发生异常,可能出现数据残留,无法保证一致性。