导入和查询数据
本文介绍如何在 StarRocks 中导入和查询数据。
导入数据
为适配不同的数据导入需求,StarRocks 系统提供了五种不同的导入方式,以支持不同的数据源或者导入方式。
Broker Load
Broker Load(参见 从 HDFS 导入和从云存储导入)是一种异步数据导入模式,通过 Broker 进程访问并读取外部数据源,然后采用 MySQL 协议向 StarRocks 创建导入作业。
Broker Load 模式适用于源数据在 Broker 进程可访问的存储系统(如 HDFS,S3)中的情景,可以支撑数据量达数百 GB 的导入作业。该导入方式支持的数据源有 Apache Hive™ 等。
Spark Load
Spark Load 是一种异步数据导入模式,通过外部的 Apache Spark™ 资源实现对导入数据的预处理,提高 StarRocks 大数据量的导入性能并且节省 StarRocks 集群的计算资源。
Spark Load 模式适用于初次向 StarRocks 迁移大数据量(TB 级别)的场景。该导入方式支持的数据源应位于 Apache Spark™ 可访问的存储系统(如 HDFS)中。
通过 Spark Load 可以基于 Apache Hive™ 表实现 全局字典 的数据结构,对输入数据进行类型转换,保存原始值到编码值的映射,例如将字符串类型映射成整型。
Stream Load
Stream Load 是一种同步数据导入模式。用户通过 HTTP 协议发送请求将本地文件或数据流导入到 StarRocks 中,并等待系统返回导入的结果状态,从而判断导入是否成功。
Stream Load 模式适用于导入本地文件,或通过程序导入数据流中的数据。该导入方式支持的数据源有 Apache Flink®、CSV 文件等。
Routine Load
Routine Load(例行导入)提供从指定数据源进行自动数据导入的功能。您可以通过 MySQL 协议提交例行导入作业,生成一个常驻线程,不间断地从数据源(如 Apache Kafka®)中读取数据并导入到 StarRocks 中。
Insert Into
Insert Into 导入模式是一种同步数据导入模式,类似 MySQL 中的 Insert 语句,StarRocks 支持通过 INSERT INTO tbl SELECT ...;
的方式从 StarRocks 的表中读取数据并导入到另一张表。您也可以通过 INSERT INTO tbl VALUES(...);
插入单条数据。该导入方式支持的数据源有 DataX/DTS、Kettle/Informatic、以及 StarRocks 本身。
具体导入方式详情请参考 数据导入。
通过 Stream Load 导入数据
以下示例以 Stream Load 导入方式为例,将文件中的数据导入到 建表 章节中创建的 detailDemo
表中。
在本地创建数据文件 detailDemo_data,以逗号作为数据之间的分隔符,插入两条数据。具体内容如下:
2022-03-13,1,1212,1231231231,123412341234,123452342342343324,hello,welcome,starrocks,2022-03-15 12:21:32,123.04,21.12345,123456.123456,true
2022-03-14,2,1212,1231231231,123412341234,123452342342343324,hello,welcome,starrocks,2022-03-15 12:21:32,123.04,21.12345,123456.123456,false
接着,以 "streamDemo" 为 Label,通过 curl 命令封装 HTTP 请求,将本地文件 detailDemo_data 导入 detailDemo
表。
curl --location-trusted -u <username>:<password> -T detailDemo_data -H "label: streamDemo" \
-H "column_separator:," \
http://127.0.0.1:8030/api/example_db/detailDemo/_stream_load
注意
- 如果账号没有设置密码,这里只需要传入
<username>:
。- HTTP 地址中 IP 为 FE 节点 IP,端口为 fe.conf 中配置的
http port
。
查询
StarRocks 兼容 MySQL 协议,其查询语句基本符合 SQL-92 标准。
简单查询
通过 MySQL 客户端登录 StarRocks,查询表中全部数据。
use example_db;
select * from detailDemo;