持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情
Broker Load
Broker load是一个导入的异步方式,不同的数据源需要部署不同的 broker 进程。可以通过 show broker 命令查看已经部署的 broker。
适用场景
-
源数据在Broker可以访问的存储系统中,如HDFS
-
数据量在几十到几百GB级别
基本原理
用户在递交导入任务后,FE(Doris系统的元数据和调度节点)会生成相应的PLAN(导入执行计划,BE会导入计划将输入导入Doris中)并根据BE(Doris系统的计算和存储节点)的个数和文件的大小,将PLAN分给多个BE执行,每个BE导入一部分数据。BE在执行过程中会从Broker拉取数据,在对数据转换之后导入系统,所有BE均完成导入,由FE最终决定导入是否成功。
前置操作
-
启动zookeeper集群(三台节点都启动):zkServer.sh start
-
启动hdfs集群:start-dfs.sh
语法
| load_label | 当前导入批次的标签,在一个 database 内唯一。 | |||
|---|---|---|---|---|
| 语法: | ||||
| [database_name.]your_label | ||||
| data_desc | 用于描述一批导入数据。 | |||
| 语法: | ||||
DATA INFILE**(**"file_path1" [, file_path2 , ...])[ NEGATIVE ]INTO TABLE table_name[ PARTITION ( p1 , p2 )]****[ COLUMNS TERMINATED BY "column_separator" ]****[( column_list )]****[ SET ( k1 = func ( k2 ))] | ||||
| file_path : 文件路径,可以指定到一个文件,也可以用 * 通配符指定某个目录下的所有文件。通配符必须匹配到文件,而不能是目录。 | ||||
| PARTITION : 如果指定此参数,则只会导入指定的分区,导入分区以外的数据会被过滤掉。如果不指定,默认导入table的所有分区。 | ||||
| NEGATIVE : 如果指定此参数,则相当于导入一批“负”数据。用于抵消之前导入的同一批数据。该参数仅适用于存在 value 列,并且 value 列的聚合类型仅为 SUM 的情况。 | ||||
| column_separator: 用于指定导入文件中的列分隔符。默认为 \t如果是不可见字符,则需要加\x作为前缀,使用十六进制来表示分隔符。如hive文件的分隔符\x01,指定为"\x01" | ||||
| column_list: 用于指定导入文件中的列和 table 中的列的对应关系。当需要跳过导入文件中的某一列时,将该列指定为 table 中不存在的列名即可。语法:(col_name1, col_name2, ...) | ||||
| SET : 如果指定此参数,可以将源文件某一列按照函数进行转化,然后将转化后的结果导入到table中。 目前支持的函数有:l strftime(fmt, column) 日期转换函数n fmt: 日期格式,形如%Y%m%d%H%M%S (年月日时分秒)n column: column_list中的列,即输入文件中的列。存储内容应为数字型的时间戳。n 如果没有column_list,则按照palo表的列顺序默认输入文件的列。l time_format(output_fmt, input_fmt, column) 日期格式转化n output_fmt: 转化后的日期格式,形如%Y%m%d%H%M%S (年月日时分秒)n input_fmt: 转化前column列的日期格式,形如%Y%m%d%H%M%S (年月日时分秒)n column: column_list中的列,即输入文件中的列。存储内容应为input_fmt格式的日期字符串。n 如果没有column_list,则按照palo表的列顺序默认输入文件的列。l alignment_timestamp(precision, column) 将时间戳对齐到指定精度n precision: year | month | day | hourn column: column_list中的列,即输入文件中的列。存储内容应为数字型的时间戳。n 如果没有column_list,则按照palo表的列顺序默认输入文件的列。n 注意:对齐精度为year、month的时候,只支持20050101~20191231范围内的时间戳。l default_value(value) 设置某一列导入的默认值l 不指定则使用建表时列的默认值n md5sum(column1, column2, ...) 将指定的导入列的值求md5sum,返回32位16进制字符串n replace_value(old_value[, new_value]) 将导入文件中指定的old_value替换为new_valuen new_value如不指定则使用建表时列的默认值n hll_hash(column) 用于将表或数据里面的某一列转化成HLL列的数据结构n now() 设置某一列导入的数据为导入执行的时间点。该列必须为 DATE/DATETIME 类型 |