STREAM LOAD
Description
Stream Load 通过 HTTP 协议向 Doris 传输并导入数据。该方式主要用户本地数据的上传的导入。但其本质上是一种导入框架,其提供的 HTTP 接口,不仅能够支持本地数据的传输,也能够支持内存数据、管道数据等向 HTTP 端口传输数据。
- 公有云用户必须使用 Compute Node(BE)的 HTTP 协议端口,默认为 8040。
- 私有化部署用户可以使用 Leader Node(FE)的 HTTP 协议端口,默认为 8030。但须保证客户端所在机器网络能够联通 Compute Node 所在机器。
本文档主要通过 cURL 命令来介绍 Stream Load 的使用方式
curl -XPUT --location-trusted -u user:passwd \
[-H "header1: xxx" -H "header2: xxx" ...] \
-T data.txt \
http://host:port/api/{db}/{table}/_stream_load- HTTP 的请求方式为
PUT - 当前支持 HTTP chunked 与非 chunked 上传两种方式。对于非 chunked 方式,Header 中必须包含
Content-Length来标识上传内容的长度,以保证数据的完整性。 - Header 中建议包含
Expect Header: 100-continue,这样可以在某些出错场景下避免不必要的数据传输。 命令的目标
host:port有两种方式:- 指向 FE 的 HTTP 协议端口。这种方式,FE 会直接将请求做 307 转发到随机的一个 BE 节点。最终请求和数据直接和这个 BE 节点通讯。这种方式需要客户端和 BE 节点的网络能够正常通讯。
- 指向 BE 的 HTTP 协议端口。则请求直接和 BE 节点交互。
注:百度云 Doris 用户请直接连接 Compute Node 的 HTTP 协议端口即可。
- 在 URL 的
{db}和{table}两个 Path Parameter 中指定要导入的数据库和表。 导入任务的其他参数均在 Header 中指定:
label为导入任务指定一个 Label,用于唯一标示这个作业。如果不指定,则系统会自动生成一个 UUID 作为 Label。
-H "label: my_label1"column_separator用于指定导入文件中的列分隔符,默认为
\t。如果是不可见字符,则需要加\x作为前缀,使用十六进制来表示分隔符。如hive文件的分隔符\x01,需要指定为\x01。-H "column_separator: ,"columns用于指定文件列和表中列的映射关系,以及各种列转换等。关于这部分详细介绍,可以参阅 列的映射,转换与过滤 文档。
-H "columns: k1, k2, tmpk1, k3 = tmpk1 + 1"where根据条件对导入的数据进行过滤。关于这部分详细介绍,可以参阅 列的映射,转换与过滤 文档。
-H "where: k1 > 100"max_filter_ratio最大容忍可过滤(数据不规范等原因)的数据比例。默认零容忍。取值范围为 0 到 1。
-H "max_filter_ratio: 0.01"partitions指定需要导入的分区。
-H "partitions: p1, p2"timeout指定导入的超时时间。单位秒。默认是 600 秒。可设置范围为 1 秒 ~ 14400 秒。
-H "timeout: 120"strict_mode是否对数据进行严格限制。默认为 false。
-H "strict_mode: true"timezone指定本次导入所使用的时区。默认为东八区。该参数会影响所有导入涉及的和时区有关的函数结果。
-H "timezone: Asia/Shanghai"exec_mem_limit导入内存限制。默认为 2GB。单位为字节。
-H "exec_mem_limit: 4294967296"format指定导入数据格式。支持
csv和json两种格式。默认为csv。-H "format: json"jsonpaths当导入数据格式为 json 时,可以通过 jsonpaths 指定抽取 Json 数据中的字段。
-H "jsonpaths: [\"$.k2\", \"$.k1\"]"strip_outer_array当导入数据格式为 json 时,
strip_outer_array为true表示 Json 数据以数组的形式展现,数据中的每一个元素将被视为一行数据。默认值是 false。-H "strip_outer_array: true"json_root当导入数据格式为 json 时,可以通过
json_root指定 Json 数据的根节点。Doris 将通过json_root抽取根节点的元素进行解析。默认为空。-H "json_root: $.RECORDS"merge_type数据合并类型。默认为 APPEND,表示本次导入是普通的追加写操作。MERGE 和 DELETE 类型仅适用于 Unique Key 模型表。其中 MERGE 类型需要配合
delete参数使用,以标注 Delete Flag 列。而 DELETE 类型则表示本次导入的所有数据皆为删除数据。-H "merge_type: MERGE"delete: 仅在 MERGE 类型下有意义,用于指定 Delete Flag 列以及标示删除标记的条件。
-H "delete: col3 = 1"function_column.sequence_col仅针对 Unique Key 模型的表。用于指定导入数据中表示 Sequence Col 的列。主要用于导入时保证数据顺序。
-H "function_column.sequence_col: col3"fuzzy_parse当导入数据格式是 Json 数组形式,并且数组中每一行的字段顺序完全一致。可以开启此参数,以加速导入速度。通常需配合
strip_outer_array: true一起使用。详情可见 JSON格式数据导入说明。-H "fuzzy_parse: true"
Example
导入本地文件 testData,并指定超时时间
curl --location-trusted -u admin -H "label:label1" -H "timeout:100" -T testData http://host:port/api/example_db/my_table/_stream_load导入本地文件 testData,并按条件过滤数据
curl --location-trusted -u admin -H "label:label2" -H "where: k1=20180601" -T testData http://host:port/api/example_db/my_table/_stream_load导入本地文件 testData,并设置最大容许错误率
curl --location-trusted -u admin -H "label:label3" -H "max_filter_ratio:0.2" -T testData http://host:port/api/example_db/my_table/_stream_load导入本地文件 testData,并指定列映射关系
curl --location-trusted -u admin -H "label:label4" -H "max_filter_ratio:0.2" -H "columns: k2, k1, v1" -T testData http://host:port/api/example_db/my_table/_stream_load导入本地文件 testData,并指定分区,以及最大容许错误率
curl --location-trusted -u admin -H "label:label5" -H "max_filter_ratio:0.2" -H "partitions: p1, p2" -T testData http://host:port/api/example_db/my_table/_stream_load使用streaming方式导入
seq 1 10 | awk '{OFS="\t"}{print $1, $1 * 10}' | curl --location-trusted -u admin -T - http://host:port/api/example_db/my_table/_stream_load导入含有HLL列的表
curl --location-trusted -u admin -H "columns: k1, k2, v1=hll_hash(k1), v2=hll_empty()" -T testData http://host:port/api/example_db/my_table/_stream_load导入含有 BITMAP 列的表
curl --location-trusted -u admin -H "columns: k1, k2, v




