通过 INSERT 语句导入数据
本文介绍如何使用 INSERT 语句向 StarRocks 导入数据。
与 MySQL 等数据库系统类似,StarRocks 支持通过 INSERT 语句导入数据。您可以使用 INSERT INTO VALUES 语句直接向表中插入数据,您还可以通过 INSERT INTO SELECT 语句将其他 StarRocks 表中的数据导入到新的 StarRocks 表中,或者将其他数据源的数据通过外部表功能导入至 StarRocks 内部表中。自 v3.1 起,您可以使用 INSERT 语句和 FILES() 函数直接导入云存储或 HDFS 中的文件。
2.4 版本中,StarRocks 进一步支持通过 INSERT OVERWRITE 语句批量覆盖写入目标表。INSERT OVERWRITE 语句通过整合以下三部分操作来实现覆盖写入:
如果您希望在替换前验证数据,可以根据以上步骤自行实现覆盖写入数据。
注意事项
- 您只能在 MySQL 客户端通过
Ctrl
+C
按键强制取消同步 INSERT 导入任务。 - 您可以通过 SUBMIT TASK 创建异步 INSERT 导入任务。
- 当前版本中,StarRocks 在执行 INSERT 语句时,如果有数据不符合目标表格式(例如字符串超长等情况),INSERT 操作默认执行失败。您可以通过设置会话变量
enable_insert_strict
为false
以确保 INSERT 操作过滤不符合目标表格式的数据,并继续执行。 - 频繁使用 INSERT 语句导入小批量数据会产生过多的数据版本,从而影响查询性能,因此不建议您频繁使用 INSERT 语句导入数据或将其作为生产环境的日常例行导入作业。如果您的业务场景需要流式导入或者小批量多次导入数据,建议使用 Apache Kafka® 作为数据源并通过 Routine Load 方式进行导入作业。
- 执行 INSERT OVERWRITE 语句后,系统将为目标分区创建相应的临时分区,并将数据写入临时分区,最后使用临时分区原子替换目标分区来实现覆盖写入。其所有过程均在 Leader FE 节点执行。因此,如果 Leader FE 节点在覆盖写入过程中发生宕机,将会导致该次 INSERT OVERWRITE 导入失败,其过程中所创建的临时分区也会被删除。
准备工作
查看权限
导入操作需要目标表的 INSERT 权限。如果您的用户账号没有 INSERT 权限,请参考 GRANT 给用户赋权。