暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

STREAM-LOAD

原创 数据库新手-ray 2022-06-10
736

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 有两种方式:

    1. 指向 FE 的 HTTP 协议端口。这种方式,FE 会直接将请求做 307 转发到随机的一个 BE 节点。最终请求和数据直接和这个 BE 节点通讯。这种方式需要客户端和 BE 节点的网络能够正常通讯。
    2. 指向 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

  1. 导入本地文件 testData,并指定超时时间

    curl --location-trusted -u admin -H "label:label1" -H "timeout:100" -T testData http://host:port/api/example_db/my_table/_stream_load
  2. 导入本地文件 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
  3. 导入本地文件 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
  4. 导入本地文件 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
  5. 导入本地文件 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
  6. 使用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
  7. 导入含有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
  8. 导入含有 BITMAP 列的表

    curl --location-trusted -u admin -H "columns: k1, k2, v
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论