StarRocks 数据导入指南:INSERT 语句详解

StarRocks 数据导入指南:INSERT 语句详解

starrocks StarRocks是一个开源的分布式数据分析引擎,用于处理大规模数据查询和分析。 - 功能:分布式数据分析;大规模数据查询;数据分析;数据仓库。 - 特点:高性能;可扩展;易于使用;支持多种数据源。 starrocks 项目地址: https://gitcode.com/gh_mirrors/st/starrocks

引言

在数据库管理系统中,数据导入是日常操作的重要组成部分。StarRocks 作为一款高性能的分析型数据库,提供了多种数据导入方式。本文将重点介绍如何使用 INSERT 语句向 StarRocks 导入数据,包括基础语法、高级用法以及注意事项。

一、INSERT 语句概述

INSERT 语句是 SQL 标准中的基础操作,StarRocks 对其进行了扩展和增强,支持多种导入场景:

  1. 直接插入值:通过 VALUES 子句直接插入数据
  2. 查询结果插入:通过 SELECT 子句将查询结果插入目标表
  3. 覆盖写入:通过 OVERWRITE 关键字实现数据覆盖
  4. 外部数据导入:结合 FILES() 函数直接导入云存储或 HDFS 文件

二、基础导入方式

2.1 INSERT INTO VALUES

适用于少量数据的快速插入,语法简单直观:

INSERT INTO table_name [WITH LABEL label_name] 
VALUES (value1, value2, ...), (value1, value2, ...), ...;

示例

INSERT INTO source_wiki_edit
WITH LABEL insert_load_wikipedia
VALUES
    ("2015-09-12 00:00:00","#en.wikipedia","AustinFF",0,0,0,0,0,21,5,0),
    ("2015-09-12 00:00:00","#ca.wikipedia","helloSR",0,1,0,1,0,3,23,0);

特点

  • 适合测试和小批量数据验证
  • 每条数据需要明确指定所有列值
  • 性能较低,不适合大规模数据导入

2.2 INSERT INTO SELECT

将查询结果导入目标表,支持复杂的数据转换:

INSERT INTO table_name [PARTITION(p1,p2,...)] [WITH LABEL label_name]
[ (column1, column2, ...) ]
SELECT ... FROM ...;

示例

-- 全表导入
INSERT INTO insert_wiki_edit
WITH LABEL insert_load_wikipedia_1
SELECT * FROM source_wiki_edit;

-- 指定分区导入
INSERT INTO insert_wiki_edit PARTITION(p06, p12)
WITH LABEL insert_load_wikipedia_2
SELECT * FROM source_wiki_edit;

-- 部分列导入
INSERT INTO insert_wiki_edit
WITH LABEL insert_load_wikipedia_3 
(event_time, channel)
SELECT event_time, channel FROM source_wiki_edit;

特点

  • 支持数据转换和过滤
  • 可以从多表关联查询结果导入
  • 支持指定目标列和分区

三、高级导入功能

3.1 覆盖写入 (INSERT OVERWRITE)

StarRocks 2.4 版本引入的覆盖写入功能,通过临时分区机制实现原子性覆盖:

INSERT OVERWRITE table_name [PARTITION(p1,p2,...)] [WITH LABEL label_name]
[ (column1, column2, ...) ]
VALUES/SELECT ...;

实现原理

  1. 为目标分区创建临时分区
  2. 将数据写入临时分区
  3. 使用临时分区原子替换目标分区

示例

-- 覆盖全表
INSERT OVERWRITE insert_wiki_edit
WITH LABEL insert_load_wikipedia_ow_1
SELECT * FROM source_wiki_edit;

-- 覆盖指定分区
INSERT OVERWRITE insert_wiki_edit PARTITION(p06, p12)
WITH LABEL insert_load_wikipedia_ow_2
SELECT * FROM source_wiki_edit;

3.2 Dynamic Overwrite (3.4+)

v3.4 引入的新特性,提供更灵活的覆盖行为:

-- 启用会话级Dynamic Overwrite
SET dynamic_overwrite = true;

-- 或使用Hint仅对当前语句生效
INSERT /*+set_var(dynamic_overwrite = true)*/ OVERWRITE table_name
SELECT ...;

特点

  • 未覆盖的分区数据会保留
  • 自动创建新分区
  • 更符合用户预期的覆盖行为

3.3 外部文件直接导入

v3.1 开始支持通过 FILES() 函数直接导入云存储或 HDFS 文件:

INSERT INTO table_name
SELECT * FROM FILES(
    "path" = "s3://bucket/path/file.parquet",
    "format" = "parquet",
    "aws.s3.access_key" = "your_key",
    "aws.s3.secret_key" = "your_secret",
    "aws.s3.region" = "region"
);

v3.4 增强

  • 支持严格模式和容错率设置
  • 支持不合格数据处理方式选择
INSERT INTO table_name
PROPERTIES(
    "strict_mode" = "true",
    "max_filter_ratio" = "0.1"
)
SELECT * FROM FILES(...);

四、生成列导入

生成列的值由表达式自动计算得出,导入时只需提供基础列:

CREATE TABLE table_with_gc (
    id INT,
    data_array ARRAY<INT>,
    data_json JSON,
    avg_array DOUBLE AS array_avg(data_array),
    get_string VARCHAR AS get_json_string(json_string(data_json), '$.a')
);

-- 只需插入基础列
INSERT INTO table_with_gc 
VALUES (1, [1,2], parse_json('{"a" : 1, "b" : 2}'));

五、最佳实践与注意事项

  1. 性能考虑

    • 避免频繁小批量INSERT操作
    • 大批量数据建议使用Stream Load或Routine Load
    • 合理设置分区和分桶策略
  2. 错误处理

    • 使用enable_insert_strict控制严格模式
    • 为重要作业指定Label以便追踪
    • 监控导入任务状态
  3. 资源管理

    • 大作业考虑使用SUBMIT TASK异步执行
    • 控制单次导入数据量
  4. 版本特性

    • 不同版本功能有差异,注意兼容性
    • 新版本提供更多优化选项

六、总结

StarRocks 的 INSERT 语句提供了灵活多样的数据导入方式,从简单的值插入到复杂的外部数据导入,满足不同场景需求。理解各种导入方式的特性和适用场景,可以帮助开发者构建更高效的数据管道。随着版本迭代,StarRocks 不断优化 INSERT 语句的功能和性能,建议用户关注版本更新,充分利用新特性提升数据导入效率。

starrocks StarRocks是一个开源的分布式数据分析引擎,用于处理大规模数据查询和分析。 - 功能:分布式数据分析;大规模数据查询;数据分析;数据仓库。 - 特点:高性能;可扩展;易于使用;支持多种数据源。 starrocks 项目地址: https://gitcode.com/gh_mirrors/st/starrocks

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶妃习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值