跳到主要内容
版本: 最新版本-3.5

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 格式文件,该文件由四列组成:NODATEVERSIONPRICE,其中 DATE 列中的数据采用非标准格式,例如 202106.00。如果要在 StarRocks 中使用 DATE 作为分区列,则需要首先创建一个 StarRocks 表,例如,包含以下四列的表:NOVERSIONPRICEDATE。然后,您需要将 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 的值以增加最大文件大小。