导入概念
本主题介绍关于数据加载的常用概念和信息。
权限
您只能以具有 StarRocks 表的 INSERT 权限的用户身份将数据加载到 StarRocks 表中。如果您没有 INSERT 权限,请按照 GRANT 中提供的说明,将 INSERT 权限授予您用于连接到 StarRocks 集群的用户。语法是 GRANT INSERT ON TABLE <table_name> IN DATABASE <database_name> TO { ROLE <role_name> | USER <user_identity>}
。
标签
您可以通过运行加载作业将数据加载到 StarRocks 中。每个加载作业都有一个由用户指定或由 StarRocks 自动生成的唯一标签,用于标识该作业。每个标签只能用于一个加载作业。加载作业完成后,其标签不能用于任何其他加载作业。只有失败的加载作业的标签才能被重用。
原子性
StarRocks 提供的所有加载方法都保证原子性。原子性意味着加载作业中的合格数据必须全部成功加载,或者所有合格数据都不能成功加载。不会出现部分合格数据加载而其他数据未加载的情况。请注意,合格数据不包括由于数据类型转换错误等质量问题而被过滤掉的数据。
协议
StarRocks 支持两种可用于提交加载作业的通信协议:MySQL 和 HTTP。在 StarRocks 支持的所有加载方法中,只有 Stream Load 使用 HTTP,而所有其他方法都使用 MySQL。
数据类型
StarRocks 支持加载所有数据类型的数据。您只需要注意对一些特定数据类型加载的限制。有关更多信息,请参见 数据类型。
严格模式
严格模式是您可以为数据加载配置的可选属性。它会影响加载行为和最终加载的数据。有关详细信息,请参见 严格模式。
加载模式
StarRocks 支持两种加载模式:同步加载模式和异步加载模式。
如果您使用外部程序加载数据,您必须在决定选择的加载方法之前,选择最适合您业务需求的加载模式。
同步加载
在同步加载模式下,提交加载作业后,StarRocks 同步运行该作业以加载数据,并在作业完成后返回该作业的结果。您可以根据作业结果检查作业是否成功。
StarRocks 提供了两种支持同步加载的加载方法:Stream Load 和 INSERT。
同步加载的过程如下
-
创建加载作业。
-
查看 StarRocks 返回的作业结果。
-
根据作业结果检查作业是否成功。如果作业结果指示加载失败,您可以重试该作业。
异步加载
在异步加载模式下,提交加载作业后,StarRocks 会立即返回作业创建结果。
-
如果结果指示作业创建成功,StarRocks 将异步运行该作业。但是,这并不意味着数据已成功加载。您必须使用语句或命令来检查作业的状态。然后,您可以根据作业状态确定数据是否已成功加载。
-
如果结果指示作业创建失败,您可以根据失败信息确定是否需要重试该作业。
您可以为表设置不同的写入仲裁,即 StarRocks 确定加载任务成功之前需要返回加载成功的副本数量。您可以通过在 CREATE TABLE 时添加属性 write_quorum
来指定写入仲裁,或者使用 ALTER TABLE 将此属性添加到现有表。
StarRocks 提供了四种支持异步加载的加载方法:Broker Load、Pipe、Routine Load 和 Spark Load。
异步加载的过程如下
-
创建加载作业。
-
查看 StarRocks 返回的作业创建结果,并确定作业是否成功创建。
-
如果作业创建成功,请转到步骤 3。
-
如果作业创建失败,请返回步骤 1。
-
-
使用语句或命令检查作业的状态,直到作业状态显示为 FINISHED 或 CANCELLED。
Broker Load 或 Spark Load 的工作流程
Broker Load 或 Spark Load 作业的工作流程由五个阶段组成,如下图所示。
工作流程描述如下
-
PENDING
该作业正在队列中等待 FE 调度。
-
ETL
FE 预处理数据,包括清洗、分区、排序和聚合。
只有 Spark Load 作业具有 ETL 阶段。Broker Load 作业跳过此阶段。
-
LOADING
FE 清洗和转换数据,然后将数据发送到 BE 或 CN。加载所有数据后,数据将排队等待生效。此时,作业的状态仍然是 LOADING。
-
FINISHED
当加载完成并且所有涉及的数据生效时,作业的状态变为 FINISHED。此时,可以查询数据。 FINISHED 是最终作业状态。
-
CANCELLED
在作业的状态变为 FINISHED 之前,您可以随时取消该作业。此外,如果发生加载错误,StarRocks 可以自动取消该作业。作业取消后,作业的状态变为 CANCELLED,并且在取消之前所做的所有数据更新都将被还原。 CANCELLED 也是最终作业状态。
Pipe 的工作流程
Pipe 作业的工作流程描述如下
-
该作业从 MySQL 客户端提交给 FE。
-
FE 根据指定路径中存储的数据文件的数量或大小拆分数据文件,将作业分解为更小的顺序任务。任务创建后进入队列,等待调度。
-
FE 从队列中获取任务,并调用 INSERT INTO SELECT FROM FILES 语句来执行每个任务。
-
数据加载完成
-
如果在作业创建时为作业指定了
"AUTO_INGEST" = "FALSE"
,则作业将在加载指定路径中存储的所有数据文件的数据后完成。 -
如果在作业创建时为作业指定了
"AUTO_INGEST" = "TRUE"
,则 FE 将继续监视对数据文件的更改,并自动将数据文件中新的或更新的数据加载到目标 StarRocks 表中。
-
Routine Load 的工作流程
Routine Load 作业的工作流程描述如下
-
该作业从 MySQL 客户端提交给 FE。
-
FE 将作业拆分为多个任务。每个任务都设计为从多个分区加载数据。
-
FE 将任务分发到指定的 BE 或 CN。
-
BE 或 CN 执行任务,并在完成任务后向 FE 报告。
-
FE 生成后续任务,如果存在任何失败的任务,则重试失败的任务,或根据 BE 的报告暂停任务调度。