从本地文件系统导入数据
StarRocks 提供了两种从本地文件系统导入数据的方法:
- 使用 Stream Load 的同步导入
- 使用 Broker Load 的异步导入
每种选项都有其自身的优势:
- Stream Load 支持 CSV 和 JSON 文件格式。如果您想从少量文件中导入数据,并且每个文件的大小不超过 10 GB,建议使用此方法。
- Broker Load 支持 Parquet、ORC、CSV 和 JSON 文件格式(从 v3.2.3 开始支持 JSON 文件格式)。如果您想从大量文件中导入数据,并且每个文件的大小超过 10 GB,或者文件存储在网络附加存储(NAS)设备中,建议使用此方法。从 v2.5 开始支持使用 Broker Load 从本地文件系统导入数据。
对于 CSV 数据,请注意以下几点:
- 您可以使用 UTF-8 字符串作为文本分隔符,例如逗号(,)、制表符或管道符(|),其长度不超过 50 字节。
- 空值用
\N表示。例如,一个数据文件由三列组成,其中一条记录在第一列和第三列有数据,但第二列没有数据。在这种情况下,您需要在第二列使用\N表示空值。这意味着记录必须编写为a,\N,b而不是a,,b。a,,b表示记录的第二列包含一个空字符串。
Stream Load 和 Broker Load 都支持在数据导入时进行数据转换,并支持在数据导入时通过 UPSERT 和 DELETE 操作进行数据更改。有关更多信息,请参见 在导入时转换数据 和 通过导入更改数据。
开始之前
检查权限
导入操作需要目标表的 INSERT 权限。如果您的用户账号没有 INSERT 权限,请参考 GRANT 给用户赋权,语法为 GRANT INSERT ON TABLE <table_name> IN DATABASE <database_name> TO { ROLE <role_name> | USER <user_identity>}。
检查网络配置
确保您要导入数据的机器可以通过 http_port(默认:8030)和 be_http_port(默认:8040)访问 StarRocks 集群的 FE 和 BE 节点。
通过 Stream Load 从本地文件系统导入
Stream Load 是一种基于 HTTP PUT 的同步导入方法。在您提交导入作业后,StarRocks 会同步运行该作业,并在作业完成后返回结果。您可以根据作业结果判断作业是否成功。
注意
当您使用 Stream Load 将数据导入 StarRocks 表后,该表上创建的物化视图的数据也会被更新。
工作原理
您可以根据 HTTP 在客户端上向 FE 提交导入请求,然后 FE 使用 HTTP 重定向将导入请求转发到特定的 BE 或 CN。您也可以直接在客户端上向您选择的 BE 或 CN 提交导入请求。
如果您将导入请求提交给 FE,FE 会使用轮询机制决定哪个 BE 或 CN 将作为协调者接收和处理导入请求。轮询机制有助于实现 StarRocks 集群内的负载均衡。因此,我们建议您将导入请求发送给 FE。
接收导入请求的 BE 或 CN 作为协调者 BE 或 CN,基于使用的 schema 将数据拆分为多个部分,并将每个部分的数据分配给其他参与的 BE 或 CN。导入完成后,协调者 BE 或 CN 将导入作业的结果返回给您的客户端。请注意,如果您在导入过程中停止协调者 BE 或 CN,导入作业将失败。
下图显示了 Stream Load 作业的工作流程。
