CREATE ROUTINE LOAD
功能
Routine Load 支持持续消费 Apache Kafka® 的消息并导入至 StarRocks 中。Routine Load 支持 Kafka 中消息的格式为 CSV、JSON、Avro (自 v3.0.1),并且访问 Kafka 时,支持多种安全协议,包括 plaintext
、ssl
、sasl_plaintext
和 sasl_ssl
。
本文介绍 CREATE ROUTINE LOAD 的语法、参数说明和示例。
说明
- Routine Load 的应用场景、基本原理和基本操作,请参见 使用 Routine Load 导入数据。
- Routine Load 操作需要目标表的 INSERT 权限。如果您的用户账号没有 INSERT 权限,请参考 GRANT 给用户赋权。
语法
CREATE ROUTINE LOAD <database_name>.<job_name> ON <table_name>
[load_properties]
[job_properties]
FROM data_source
[data_source_properties]
参数说明
database_name
、job_name
、table_name
database_name
选填,目标数据库的名称。
job_name
必填,导入作业的名称。一张表可能有多个导入作业,建议您利用具有辨识度的信息(例如 Kafka Topic 名称、创建导入作业的大致时间等)来设置具有意义的导入作业名称,用于区分多个导入作业。同一数据库内,导入作业的名称必须唯一。
table_name
必填,目标表的名称。
load_properties
选填。源数据的属性。语法:
[COLUMNS TERMINATED BY '<column_separator>'],
[ROWS TERMINATED BY '<row_separator>'],
[COLUMNS (<column1_name>[,<column2_name>,<column_assignment>,... ])],
[WHERE <expr>],
[PARTITION (<partition1_name>[,<partition2_name>,...])]
[TEMPORARY PARTITION (<temporary_partition1_name>[,<temporary_partition2_name>,...])]
如果导入 CSV 格式的数据,则可以指定列分隔符,默认为\t
,即 Tab。例如可以输入 COLUMNS TERMINATED BY ","
。指定列分隔符为逗号(,)。
说明
- 必须确保这里指定的列分隔符与源数据中的列分隔符一致。
- StarRocks 支持设置长度最大不超过 50 个字节的 UTF-8 编码字符串作为列分隔符,包括常见的逗号 (,)、Tab 和 Pipe (|)。
- 空值 (null) 用
\N
表示。比如,源数据一共有三列,其中某行数据的第一列、第三列数据分别为a
和b
,第二列没有数据,则第二列需要用\N
来表示空值,写作a,\N,b
,而不是a,,b
。a,,b
表示第二列是一个空字符串。
ROWS TERMINATED BY
用于指定源数据中的行分隔符。如果不指定该参数,则默认为 \n
。
COLUMNS
源数据和目标表之间的列映射和转换关系。详细说明,请参见列映射和转换关系。
column_name
:映射列,源数据中这类列的值可以直接落入目标表的列中,不需要进行计算。column_assignment
:衍生列,格式为column_name = expr
,源数据中这类列的值需要基于表达式expr
进行计算后,才能落入目标表的列中。 建议将衍生列排在映射列之后,因为 StarRocks 先解析映射列,再解析衍生列。
说明
以下情况不需要设置
COLUMNS
参数:
- 待导入 CSV 数据中的列与目标表中列的数量和顺序一致。
- 待导入 JSON 数据中的 Key 名与目标表中的列名一致。
WHERE
设置过滤条件,只有满足过滤条件的数据才会导入到 StarRocks 中。例如只希望导入 col1
大于 100
并且 col2
等于 1000
的数据行,则可以输入 WHERE col1 > 100 and col2 = 1000
。
说明
过滤条件中指定的列可以是源数据中本来就存在的列,也可以是基于源数据的列生成的衍生列。
PARTITION
将数据导入至目标表的指定分区中。如果不指定分区,则会将数据自动导入至其对应的分区中。 示例:
PARTITION(p1, p2, p3)