Stream Load
1. Stream Load 是否支持识别 CSV 格式文件的前几行中的列名,或在数据读取期间跳过前几行?
Stream Load 不支持识别 CSV 格式文件的前几行中的列名。Stream Load 将前几行视为与其他行一样的普通数据。
在 v2.5 及更早版本中,Stream Load 不支持在数据读取期间跳过 CSV 文件的前几行。如果要加载的 CSV 文件的前几行包含列名,请执行以下操作之一
- 修改您用于导出数据的工具的设置。然后,将数据重新导出为 CSV 文件,该文件的前几行不包含列名。
- 使用
sed -i '1d' filename
等命令删除 CSV 文件的前几行。 - 在 load 命令或语句中,使用
-H "where: <column_name> != '<column_name>'"
过滤掉 CSV 文件的前几行。<column_name>
是前几行中包含的任何列名。请注意,StarRocks 首先转换然后过滤源数据。因此,如果前几行中的列名无法转换为其匹配的目标数据类型,则会为其返回NULL
值。这意味着目标 StarRocks 表不能包含设置为NOT NULL
的列。 - 在 load 命令或语句中,添加
-H "max_filter_ratio:0.01"
以设置最大错误容忍度为 1% 或更低,但可以容忍一些错误行,从而允许 StarRocks 忽略前几行中的数据转换失败。在这种情况下,即使返回ErrorURL
以指示错误行,Stream Load 作业仍然可以成功。不要将max_filter_ratio
设置为较大的值。如果将max_filter_ratio
设置为较大的值,则可能会遗漏一些重要的数据质量问题。
从 v3.0 开始,Stream Load 支持 skip_header
参数,该参数指定是否跳过 CSV 文件的前几行。有关更多信息,请参见CSV 参数。
2. 要加载到分区列的数据不是标准的 DATE 或 INT 类型。例如,数据格式为 202106.00。如果我使用 Stream Load 加载它,如何转换数据?
StarRocks 支持在加载时转换数据。有关更多信息,请参见在加载时转换数据。
假设您要加载一个名为 TEST
的 CSV 格式文件,该文件由四列组成:NO
、DATE
、VERSION
和 PRICE
,其中 DATE
列中的数据采用非标准格式,例如 202106.00。如果要在 StarRocks 中使用 DATE
作为分区列,则需要首先创建一个 StarRocks 表,例如,包含以下四列的表:NO
、VERSION
、PRICE
和 DATE
。然后,您需要将 StarRocks 表的 DATE
列的数据类型指定为 DATE、DATETIME 或 INT。最后,在创建 Stream Load 作业时,您需要在 load 命令或语句中指定以下设置,以将数据从源 DATE
列的数据类型转换为目标列的数据类型
-H "columns: NO,DATE_1, VERSION, PRICE, DATE=LEFT(DATE_1,6)"
在前面的示例中,DATE_1
可以被认为是临时命名的列,映射到目标 DATE
列,加载到目标 DATE
列中的最终结果由 left()
函数计算。请注意,您必须首先列出源列的临时名称,然后使用函数转换数据。支持的函数是标量函数,包括非聚合函数和窗口函数。
3. 如果我的 Stream Load 作业报告“body exceed max size: 10737418240, limit: 10737418240”错误,我该怎么办?
源数据文件的大小超过 10 GB,这是 Stream Load 支持的最大文件大小。采取以下措施之一
- 使用
seq -w 0 n
将源数据文件拆分为较小的文件。 - 使用
curl -XPOST http://be_host:http_port/api/update_config?streaming_load_max_mb=<file_size>
调整 BE 配置项streaming_load_max_mb
的值以增加最大文件大小。