导入过程中实现数据转换
StarRocks 支持在导入数据的过程中实现数据转换。
目前支持的导入方式有 Stream Load、Broker Load 和 Routine Load。暂不支持 Spark Load 导入方式。
注意
导入操作需要目标表的 INSERT 权限。如果您的用户账号没有 INSERT 权限,请参考 GRANT 给用户赋权。
本文以 CSV 格式的数据文件为例介绍如何在导入过程中实现数据转换。具体支持哪些格式的数据文件的转换,跟您选择的导入方式有关。
说明
对于 CSV 格式的数据,StarRocks 支持设置长度最大不超过 50 个字节的 UTF-8 编码字符串作为列分隔符,包括常见的逗号 (,)、Tab 和 Pipe (|)。
应用场景
在向 StarRocks 表中导入数据时,有时候 StarRocks 表中的内容与源数据文件中的内容不完全一致。在以下几种情况下,您不需要进行任何外部的 ETL 工作,StarRocks 就可以帮助您在导入过程中完成数据的提取和转化:
-
跳过不需要导入的列。
一方面,该功能使您可以跳过不需要导入的列;另一方面,当 StarRocks 表与源数据文件的列顺序不一致时,您可以通过该功能建立两者之间的列映射关系。
-
过滤掉不需要导入的行。
在导入时,您可以通过指定过滤条件,跳过不需要导入的行,只导入必要的行。
-
生成衍生列。
衍生列是指对源数据文件中的列进行计算之后产生的新列。该功能使您可以将计算后产生的新列落入到 StarRocks 表中。
-
从文件路径中获取分区字段的内容。
支持 Apache Hive™ 分区路径命名方式,使 StarRocks 能够从文件路径中获取分区列的内容。
前提条件
Broker Load
Routine Load
如果使用 Routine Load 导入数据,必须确保您的 Apache Kafka® 集群已创建 Topic。本文假设您已部署两个 Topic,分别为 topic1
和 topic2
。
数据样例
-
在本地文件系统中创建数据文件。
a. 创建一个名为
file1.csv
的数据文件, 文件一共包含四列,分别代表用户 ID、用户性别、事件日期和事件类型,如下所示:354,female,2020-05-20,1
465,male,2020-05-21,2
576,female,2020-05-22,1
687,male,2020-05-23,2b. 创建一个
file2.csv
的数据文件,文件只包含一个时间戳格式的列,代表日期,如下所示:2020-05-20
2020-05-21
2020-05-22
2020-05-23 -
在
test_db
的数据库中创建 StarRocks 表。说明
自 2.5.7 版本起,StarRocks 支持在建表和新增分区时自动设置分桶数量 (BUCKETS),您无需手动设置分桶数量。更多信息,请参见 设置分桶数量。
a. 创建一张名为
table1
的表,包含user_id
、event_date
和event_type
三列,如下所示:CREATE TABLE table1
(
`user_id` BIGINT COMMENT "用户 ID",
`event_date` DATE COMMENT "事件日期",
`event_type` TINYINT COMMENT "事件类型"
)
DISTRIBUTED BY HASH(user_id);b. 创建一张名为
table2
的表,包含date
、year
、month
和day
四列,如下所示:CREATE TABLE table2
(
`date` DATE COMMENT "日期",
`year` INT COMMENT "年",
`month` TINYINT COMMENT "月",
`day` TINYINT COMMENT "日"
)
DISTRIBUTED BY HASH(date);