大数据分析——Apache Doris(十九)

287 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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最终决定导入是否成功。

图片.png

前置操作
  • 启动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: yearmonthdayhourn 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 类型