searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Doris文件入库操作stream load

2023-05-16 00:59:10
83
0

参考官方文档doris官方文档streamload

基本原理

下图展示了 Stream load 的主要流程,省略了一些导入细节。

                         ^      +
                         |      |
                         |      | 1A. User submit load to FE
                         |      |
                         |   +--v-----------+
                         |   | FE           |
5. Return result to user |   +--+-----------+
                         |      |
                         |      | 2. Redirect to BE
                         |      |
                         |   +--v-----------+
                         +---+Coordinator BE| 1B. User submit load to BE
                             +-+-----+----+-+
                               |     |    |
                         +-----+     |    +-----+
                         |           |          | 3. Distrbute data
                         |           |          |
                       +-v-+       +-v-+      +-v-+
                       |BE |       |BE |      |BE |
                       +---+       +---+      +---+
 

Stream load 中,Doris 会选定一个节点作为 Coordinator 节点。该节点负责接数据并分发数据到其他数据节点。

用户通过 HTTP 协议提交导入命令。如果提交到 FE,则 FE 会通过 HTTP redirect 指令将请求转发给某一个 BE。用户也可以直接提交导入命令给某一指定 BE。

导入的最终结果由 Coordinator BE 返回给用户。

 

具体操作命令:

curl --location-trusted -u $user:$passwd -H"columns:a=a,b=b,c=c" -H"column_separator:," -T $file_name http://$ip:$port/api/$DB/$Table/_stream_load
 
命令含义:
1、column_separator指文件分隔符
2、端口号
2.1 8030 指向 FE 的 HTTP 协议端口。这种方式,FE 会直接将请求做 307 转发到随机的一个 BE 节点。最终请求和数据直接和这个 BE 节点通讯。这种方式需要客户端和 BE 节点的网络能够正常通讯。
2.2 8040 指向 BE 的 HTTP 协议端口。则请求直接和 BE 节点交互
3、label
自定义设置 -H "Label:XXXX" (label不区分大小写),label: 一次导入的标签,相同标签的数据无法多次导入。用户可以通过指定Label的方式来避免一份数据重复导入的问题。
-H 如果没有指定,则系统会生成一个 UUID
4、streaming_load_max_mb
Stream load 的最大导入大小,默认为 10G ,如果用户的原始文件超过这个值,则需要调整 BE 的参数
5、merge_type
一共支持三种类型APPEND、DELETE、MERGE 其中,APPEND是默认值,表示这批数据全部需要追加到现有数据中,DELETE 表示删除与这批数据key相同的所有行,MERGE 语义 需要与delete 条件联合使用,表示满足delete 条件的数据按照DELETE 语义处理其余的按照APPEND 语义处理
-H "merge_type: [MERGE|APPEND|DELETE]" -H "delete: label_c3=1"。
默认是追加
6、测试target 与文件列数不一致
目标表只有3列,文件有n大于3列,需要加占位符,自定义写全文件里面的字段
例: 表中有3个列“c1, c2, c3", 源文件中前三列依次对应,但是有多余2列;那么需要指定-H "columns: c1, c2, c3, x1,x2";最后2列随意指定个名称占位即可
7、format
文件格式要求,可以是orc,可以是parquet,json
加一个参数 -H "format:orc|parquet|json",不加默认是csv
 
总结:
stream load适合文件比较小的,本地文件,broker load 适合源数据在Broker进程可访问的HDFS/对象存储上大批量数据的导入
0条评论
0 / 1000
jie洁杰
3文章数
0粉丝数
jie洁杰
3 文章 | 0 粉丝