# LOAD ## description Palo 目前支持以下4种导入方式: 1. Hadoop Load:基于 MR 进行 ETL 的导入。 2. Broker Load:使用 broker 进行进行数据导入。 3. Mini Load:通过 http 协议上传文件进行批量数据导入。 4. Stream Load:通过 http 协议进行流式数据导入。 本帮助主要描述第一种导入方式,即 Hadoop Load 相关帮助信息。其余导入方式可以使用以下命令查看帮助: !!!该导入方式可能在后续某个版本即不再支持,建议使用其他导入方式进行数据导入。!!! 1. help broker load; 2. help mini load; 3. help stream load; Hadoop Load 仅适用于百度内部环境。公有云、私有云以及开源环境无法使用这种导入方式。 该导入方式必须设置用于 ETL 的 Hadoop 计算队列,设置方式可以通过 help set property 命令查看帮助。 Stream load 暂时只支持百度内部用户使用。开源社区和公有云用户将在后续版本更新中支持。 语法: LOAD LABEL load_label ( data_desc1[, data_desc2, ...] ) [opt_properties]; 1. load_label 当前导入批次的标签。在一个 database 内唯一。 语法: [database_name.]your_label 2. 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中。 目前支持的函数有: strftime(fmt, column) 日期转换函数 fmt: 日期格式,形如%Y%m%d%H%M%S (年月日时分秒) column: column_list中的列,即输入文件中的列。存储内容应为数字型的时间戳。 如果没有column_list,则按照palo表的列顺序默认输入文件的列。 time_format(output_fmt, input_fmt, column) 日期格式转化 output_fmt: 转化后的日期格式,形如%Y%m%d%H%M%S (年月日时分秒) input_fmt: 转化前column列的日期格式,形如%Y%m%d%H%M%S (年月日时分秒) column: column_list中的列,即输入文件中的列。存储内容应为input_fmt格式的日期字符串。 如果没有column_list,则按照palo表的列顺序默认输入文件的列。 alignment_timestamp(precision, column) 将时间戳对齐到指定精度 precision: year|month|day|hour column: column_list中的列,即输入文件中的列。存储内容应为数字型的时间戳。 如果没有column_list,则按照palo表的列顺序默认输入文件的列。 注意:对齐精度为year、month的时候,只支持20050101~20191231范围内的时间戳。 default_value(value) 设置某一列导入的默认值 不指定则使用建表时列的默认值 md5sum(column1, column2, ...) 将指定的导入列的值求md5sum,返回32位16进制字符串 replace_value(old_value[, new_value]) 将导入文件中指定的old_value替换为new_value new_value如不指定则使用建表时列的默认值 hll_hash(column) 用于将表或数据里面的某一列转化成HLL列的数据结构 3. opt_properties 用于指定一些特殊参数。 语法: [PROPERTIES ("key"="value", ...)] 可以指定如下参数: cluster: 导入所使用的 Hadoop 计算队列。 timeout: 指定导入操作的超时时间。默认超时为3天。单位秒。 max_filter_ratio:最大容忍可过滤(数据不规范等原因)的数据比例。默认零容忍。 load_delete_flag:指定该导入是否通过导入key列的方式删除数据,仅适用于UNIQUE KEY, 导入时可不指定value列。默认为false。 5. 导入数据格式样例 整型类(TINYINT/SMALLINT/INT/BIGINT/LARGEINT):1, 1000, 1234 浮点类(FLOAT/DOUBLE/DECIMAL):1.1, 0.23, .356 日期类(DATE/DATETIME):2017-10-03, 2017-06-13 12:34:03。 (注:如果是其他日期格式,可以在导入命令中,使用 strftime 或者 time_format 函数进行转换) 字符串类(CHAR/VARCHAR):"I am a student", "a" NULL值:\N ## example 1. 导入一批数据,指定超时时间和过滤比例。指定导入队列为 my_cluster。 LOAD LABEL example_db.label1 ( DATA INFILE("hdfs://hdfs_host:hdfs_port/user/palo/data/input/file") INTO TABLE `my_table` ) PROPERTIES ( "cluster" = "my_cluster", "timeout" = "3600", "max_filter_ratio" = "0.1" ); 其中 hdfs_host 为 namenode 的 host,hdfs_port 为 fs.defaultFS 端口(默认9000) 2. 导入一批数据,包含多个文件。导入不同的 table,指定分隔符,指定列对应关系 LOAD LABEL example_db.label2 ( DATA INFILE("hdfs://hdfs_host:hdfs_port/user/palo/data/input/file1") INTO TABLE `my_table_1` COLUMNS TERMINATED BY "," (k1, k3, k2, v1, v2), DATA INFILE("hdfs://hdfs_host:hdfs_port/user/palo/data/input/file2") INTO TABLE `my_table_2` COLUMNS TERMINATED BY "\t" (k1, k2, k3, v2, v1) ); 3. 导入一批数据,指定hive的默认分隔符\x01,并使用通配符*指定目录下的所有文件 LOAD LABEL example_db.label3 ( DATA INFILE("hdfs://hdfs_host:hdfs_port/user/palo/data/input/*") NEGATIVE INTO TABLE `my_table` COLUMNS TERMINATED BY "\\x01" ); 4. 导入一批“负”数据 LOAD LABEL example_db.label4 ( DATA INFILE("hdfs://hdfs_host:hdfs_port/user/palo/data/input/old_file) NEGATIVE INTO TABLE `my_table` COLUMNS TERMINATED BY "\t" ); 5. 导入一批数据,指定分区 LOAD LABEL example_db.label5 ( DATA INFILE("hdfs://hdfs_host:hdfs_port/user/palo/data/input/file") INTO TABLE `my_table` PARTITION (p1, p2) COLUMNS TERMINATED BY "," (k1, k3, k2, v1, v2) ); 6. 导入一批数据,指定分区, 并对导入文件的列做一些转化,如下: 表结构为: k1 datetime k2 date k3 bigint k4 varchar(20) k5 varchar(64) k6 int 假设数据文件只有一行数据,5列,逗号分隔: 1537002087,2018-08-09 11:12:13,1537002087,-,1 数据文件中各列,对应导入语句中指定的各列: tmp_k1, tmp_k2, tmp_k3, k6, v1 转换如下: 1) k1:将 tmp_k1 时间戳列转化为 datetime 类型的数据 2) k2:将 tmp_k2 datetime 类型的数据转化为 date 的数据 3) k3:将 tmp_k3 时间戳列转化为天级别时间戳 4) k4:指定导入默认值为1 5) k5:将 tmp_k1、tmp_k2、tmp_k3 列计算 md5 值 6) k6:将导入文件中的 - 值替换为 10 LOAD LABEL example_db.label6 ( DATA INFILE("hdfs://hdfs_host:hdfs_port/user/palo/data/input/file") INTO TABLE `my_table` PARTITION (p1, p2) COLUMNS TERMINATED BY "," (tmp_k1, tmp_k2, tmp_k3, k6, v1) SET ( k1 = strftime("%Y-%m-%d %H:%M:%S", tmp_k1), k2 = time_format("%Y-%m-%d %H:%M:%S", "%Y-%m-%d", tmp_k2), k3 = alignment_timestamp("day", tmp_k3), k4 = default_value("1"), k5 = md5sum(tmp_k1, tmp_k2, tmp_k3), k6 = replace_value("-", "10") ) ); 7. 导入数据到含有HLL列的表,可以是表中的列或者数据里面的列 LOAD LABEL example_db.label7 ( DATA INFILE("hdfs://hdfs_host:hdfs_port/user/palo/data/input/file") INTO TABLE `my_table` PARTITION (p1, p2) COLUMNS TERMINATED BY "," SET ( v1 = hll_hash(k1), v2 = hll_hash(k2) ) ); LOAD LABEL example_db.label8 ( DATA INFILE("hdfs://hdfs_host:hdfs_port/user/palo/data/input/file") INTO TABLE `my_table` PARTITION (p1, p2) COLUMNS TERMINATED BY "," (k1, k2, tmp_k3, tmp_k4, v1, v2) SET ( v1 = hll_hash(tmp_k3), v2 = hll_hash(tmp_k4) ) ) WITH BROKER hdfs ("username"="hdfs_user", "password"="hdfs_password"); ## keyword LOAD # CANCEL LOAD ## description 该语句用于撤销指定 load label 的批次的导入作业。 这是一个异步操作,任务提交成功则返回。执行后可使用 SHOW LOAD 命令查看进度。 语法: CANCEL LOAD [FROM db_name] WHERE LABEL = "load_label"; ## example 1. 撤销数据库 example_db 上, label 为 example_db_test_load_label 的导入作业 CANCEL LOAD FROM example_db WHERE LABEL = "example_db_test_load_label"; ## keyword CANCEL,LOAD # DELETE ## description 该语句用于按条件删除指定 table(base index) partition 中的数据。 该操作会同时删除和此 base index 相关的 rollup index 的数据。 语法: DELETE FROM table_name PARTITION partition_name WHERE column_name1 op value[ AND column_name2 op value ...]; 说明: 1) op 的可选类型包括:=, >, <, >=, <=, != 2) 只能指定 key 列上的条件。 3) 条件之间只能是“与”的关系。 若希望达成“或”的关系,需要将条件分写在两个 DELETE语句中。 4) 如果为单分区表,partition_name 同 table_name。 注意: 该语句可能会降低执行后一段时间内的查询效率。 影响程度取决于语句中指定的删除条件的数量。 指定的条件越多,影响越大。 ## example 1. 删除 my_table partition p1 中 k1 列值为 3 的数据行 DELETE FROM my_table PARTITION p1 WHERE k1 = 3; 2. 删除 my_table partition p1 中 k1 列值大于等于 3 且 k2 列值为 "abc" 的数据行 DELETE FROM my_table PARTITION p1 WHERE k1 >= 3 AND k2 = "abc"; ## keyword DELETE # CANCEL DELETE ## description 该语句用于撤销一个 DELETE 操作。(仅管理员使用!)(待实现) ## example ## keyword CANCEL,DELETE # MINI LOAD ## description MINI LOAD 是 Palo 新提供的一种导入方式,这种导入方式可以使用户不依赖 Hadoop,从而完成导入方式。 此种导入方式提交任务并不是通过 MySQL 客户端,而是通过 http 协议来完成的。用户通过 http 协议将导入描述, 数据一同发送给 Palo,Palo 在接收任务成功后,会立即返回给用户成功信息,但是此时,数据并未真正导入。 用户需要通过 'SHOW LOAD' 命令来查看具体的导入结果。 语法: 导入: curl --location-trusted -u user:passwd -T data.file http://host:port/api/{db}/{table}/_load?label=xxx 查看导入状态 curl -u user:passwd http://host:port/api/{db}/_load_info?label=xxx HTTP协议相关说明 权限认证 当前 Palo 使用 http 的 Basic 方式权限认证。所以在导入的时候需要指定用户名密码 这种方式是明文传递密码的,暂不支持加密传输。 Expect Palo需要发送过来的 http 请求带有 'Expect' 头部信息,内容为 '100-continue'。 为什么呢?因为我们需要将请求进行 redirect,那么必须在传输数据内容之前, 这样可以避免造成数据的多次传输,从而提高效率。 Content-Length Palo 需要在发送请求时带有 'Content-Length' 这个头部信息。如果发送的内容比 'Content-Length' 要少,那么 Palo 认为传输出现问题,则提交此次任务失败。 NOTE: 如果,发送的数据比 'Content-Length' 要多,那么 Palo 只读取 'Content-Length' 长度的内容,并进行导入 参数说明: user: 用户如果是在default_cluster中的,user即为user_name。否则为user_name@cluster_name。 label: 用于指定这一批次导入的 label,用于后期进行作业状态查询等。 这个参数是必须传入的。 columns: 用于描述导入文件中对应的列名字。 如果不传入,那么认为文件中的列顺序与建表的顺序一致, 指定的方式为逗号分隔,例如:columns=k1,k2,k3,k4 column_separator: 用于指定列与列之间的分隔符,默认的为'\t' NOTE: 需要进行url编码,譬如 需要指定'\t'为分隔符,那么应该传入'column_separator=%09' 需要指定'\x01'为分隔符,那么应该传入'column_separator=%01' 需要指定','为分隔符,那么应该传入'column_separator=%2c' max_filter_ratio: 用于指定允许过滤不规范数据的最大比例,默认是0,不允许过滤 自定义指定应该如下:'max_filter_ratio=0.2',含义是允许20%的错误率 timeout: 指定 load 作业的超时时间,单位是秒。当load执行时间超过该阈值时,会自动取消。默认超时时间是 86400 秒。 建议指定 timeout 时间小于 86400 秒。 hll: 用于指定数据里面和表里面的HLL列的对应关系,表中的列和数据里面指定的列 (如果不指定columns,则数据列面的列也可以是表里面的其它非HLL列)通过","分割 指定多个hll列使用“:”分割,例如: 'hll1,cuid:hll2,device' NOTE: 1. 此种导入方式当前是在一台机器上完成导入工作,因而不宜进行数据量较大的导入工作。 建议导入数据量不要超过 1 GB 2. 当前无法使用 `curl -T "{file1, file2}"` 这样的方式提交多个文件,因为curl是将其拆成多个 请求发送的,多个请求不能共用一个label号,所以无法使用 3. 支持类似 streaming 的方式使用 curl 来向 palo 中导入数据,但是,只有等这个 streaming 结束后 palo 才会发生真实的导入行为,这中方式数据量也不能过大。 4. 当使用 curl 命令行导入时,需要在 & 前加入 \ 转义,否则参数信息会丢失。 ## example 1. 将本地文件'testData'中的数据导入到数据库'testDb'中'testTbl'的表(用户是defalut_cluster中的) curl --location-trusted -u root -T testData http://host:port/api/testDb/testTbl/_load?label=123 2. 将本地文件'testData'中的数据导入到数据库'testDb'中'testTbl'的表(用户是test_cluster中的)。超时时间是 3600 秒 curl --location-trusted -u root@test_cluster:root -T testData http://fe.host:port/api/testDb/testTbl/_load?label=123&timeout=3600 3. 将本地文件'testData'中的数据导入到数据库'testDb'中'testTbl'的表, 允许20%的错误率(用户是defalut_cluster中的) curl --location-trusted -u root -T testData http://host:port/api/testDb/testTbl/_load?label=123\&max_filter_ratio=0.2 4. 将本地文件'testData'中的数据导入到数据库'testDb'中'testTbl'的表, 允许20%的错误率,并且指定文件的列名(用户是defalut_cluster中的) curl --location-trusted -u root -T testData http://host:port/api/testDb/testTbl/_load?label=123\&max_filter_ratio=0.2\&columns=k1,k2,k3 5. 使用streaming方式导入(用户是defalut_cluster中的) seq 1 10 | awk '{OFS="\t"}{print $1, $1 * 10}' | curl --location-trusted -u root -T - http://host:port/api/testDb/testTbl/_load?label=123 6. 导入含有HLL列的表,可以是表中的列或者数据中的列用于生成HLL列(用户是defalut_cluster中的 curl --location-trusted -u root -T testData http://host:port/api/testDb/testTbl/_load?label=123\&max_filter_ratio=0.2\&hll=hll_column1,k1:hll_column2,k2 curl --location-trusted -u root -T testData http://host:port/api/testDb/testTbl/_load?label=123\&max_filter_ratio=0.2 \&hll=hll_column1,tmp_k4:hll_column2,tmp_k5\&columns=k1,k2,k3,tmp_k4,tmp_k5 7. 查看提交后的导入情况 curl -u root http://host:port/api/testDb/_load_info?label=123 ## keyword MINI, LOAD # MULTI LOAD ## description Syntax: curl --location-trusted -u user:passwd -XPOST http://host:port/api/{db}/_multi_start?label=xxx curl --location-trusted -u user:passwd -T data.file http://host:port/api/{db}/{table1}/_load?label=xxx\&sub_label=yyy curl --location-trusted -u user:passwd -T data.file http://host:port/api/{db}/{table2}/_load?label=xxx\&sub_label=zzz curl --location-trusted -u user:passwd -XPOST http://host:port/api/{db}/_multi_commit?label=xxx curl --location-trusted -u user:passwd -XPOST http://host:port/api/{db}/_multi_desc?label=xxx 'MULTI LOAD'在'MINI LOAD'的基础上,可以支持用户同时向多个表进行导入,具体的命令如上面所示 '/api/{db}/_multi_start' 开始一个多表导入任务 '/api/{db}/{table}/_load' 向一个导入任务添加一个要导入的表,与'MINI LOAD'的主要区别是,需要传入'sub_label'参数 '/api/{db}/_multi_commit' 提交整个多表导入任务,后台开始进行处理 '/api/{db}/_multi_abort' 放弃一个多表导入任务 '/api/{db}/_multi_desc' 可以展示某个多表导入任务已经提交的作业数 HTTP协议相关说明 权限认证 当前Palo使用http的Basic方式权限认证。所以在导入的时候需要指定用户名密码 这种方式是明文传递密码的,鉴于我们当前都是内网环境。。。 Expect Palo需要发送过来的http请求,需要有'Expect'头部信息,内容为'100-continue' 为什么呢?因为我们需要将请求进行redirect,那么必须在传输数据内容之前, 这样可以避免造成数据的多次传输,从而提高效率。 Content-Length Palo需要在发送请求是带有'Content-Length'这个头部信息。如果发送的内容比 'Content-Length'要少,那么Palo认为传输出现问题,则提交此次任务失败。 NOTE: 如果,发送的数据比'Content-Length'要多,那么Palo只读取'Content-Length' 长度的内容,并进行导入 参数说明: user: 用户如果是在default_cluster中的,user即为user_name。否则为user_name@cluster_name。 label: 用于指定这一批次导入的label号,用于后期进行作业状态查询等。 这个参数是必须传入的。 sub_label: 用于指定一个多表导入任务内部的子版本号。对于多表导入的load, 这个参数是必须传入的。 columns: 用于描述导入文件中对应的列名字。 如果不传入,那么认为文件中的列顺序与建表的顺序一致, 指定的方式为逗号分隔,例如:columns=k1,k2,k3,k4 column_separator: 用于指定列与列之间的分隔符,默认的为'\t' NOTE: 需要进行url编码,譬如需要指定'\t'为分隔符, 那么应该传入'column_separator=%09' max_filter_ratio: 用于指定允许过滤不规范数据的最大比例,默认是0,不允许过滤 自定义指定应该如下:'max_filter_ratio=0.2',含义是允许20%的错误率 在'_multi_start'时传入有效果 NOTE: 1. 此种导入方式当前是在一台机器上完成导入工作,因而不宜进行数据量较大的导入工作。 建议导入数据量不要超过1GB 2. 当前无法使用`curl -T "{file1, file2}"`这样的方式提交多个文件,因为curl是将其拆成多个 请求发送的,多个请求不能共用一个label号,所以无法使用 3. 支持类似streaming的方式使用curl来向palo中导入数据,但是,只有等这个streaming结束后palo 才会发生真实的导入行为,这中方式数据量也不能过大。 ## example 1. 将本地文件'testData1'中的数据导入到数据库'testDb'中'testTbl1'的表,并且 把'testData2'的数据导入到'testDb'中的表'testTbl2'(用户是defalut_cluster中的) curl --location-trusted -u root -XPOST http://host:port/api/testDb/_multi_start?label=123 curl --location-trusted -u root -T testData1 http://host:port/api/testDb/testTbl1/_load?label=123\&sub_label=1 curl --location-trusted -u root -T testData2 http://host:port/api/testDb/testTbl2/_load?label=123\&sub_label=2 curl --location-trusted -u root -XPOST http://host:port/api/testDb/_multi_commit?label=123 2. 多表导入中途放弃(用户是defalut_cluster中的) curl --location-trusted -u root -XPOST http://host:port/api/testDb/_multi_start?label=123 curl --location-trusted -u root -T testData1 http://host:port/api/testDb/testTbl1/_load?label=123\&sub_label=1 curl --location-trusted -u root -XPOST http://host:port/api/testDb/_multi_abort?label=123 3. 多表导入查看已经提交多少内容(用户是defalut_cluster中的) curl --location-trusted -u root -XPOST http://host:port/api/testDb/_multi_start?label=123 curl --location-trusted -u root -T testData1 http://host:port/api/testDb/testTbl1/_load?label=123\&sub_label=1 curl --location-trusted -u root -XPOST http://host:port/api/testDb/_multi_desc?label=123 ## keyword MULTI, MINI, LOAD # EXPORT ## description 该语句用于将指定表的数据导出到指定位置。 该功能通过 broker 进程实现。对于不同的目的存储系统,需要部署不同的 broker。可以通过 SHOW BROKER 查看已部署的 broker。 这是一个异步操作,任务提交成功则返回。执行后可使用 SHOW EXPORT 命令查看进度。 语法: EXPORT TABLE table_name [PARTITION (p1[,p2])] TO export_path [opt_properties] broker; 1. table_name 当前要导出的表的表名,目前支持engine为olap和mysql的表的导出。 2. partition 可以只导出指定表的某些指定分区 3. export_path 导出的路径,需为目录。目前不能导出到本地,需要导出到broker。 4. opt_properties 用于指定一些特殊参数。 语法: [PROPERTIES ("key"="value", ...)] 可以指定如下参数: column_separator:指定导出的列分隔符,默认为\t。 line_delimiter:指定导出的行分隔符,默认为\n。 5. broker 用于指定导出使用的broker 语法: WITH BROKER broker_name ("key"="value"[,...]) 这里需要指定具体的broker name, 以及所需的broker属性 对于不同存储系统对应的 broker,这里需要输入的参数不同。具体参数可以参阅:`help broker load` 中 broker 所需属性。 ## example 1. 将testTbl表中的所有数据导出到hdfs上 EXPORT TABLE testTbl TO "hdfs://hdfs_host:port/a/b/c" WITH BROKER "broker_name" ("username"="xxx", "password"="yyy"); 2. 将testTbl表中的分区p1,p2导出到hdfs上 EXPORT TABLE testTbl PARTITION (p1,p2) TO "hdfs://hdfs_host:port/a/b/c" WITH BROKER "broker_name" ("username"="xxx", "password"="yyy"); 3. 将testTbl表中的所有数据导出到hdfs上,以","作为列分隔符 EXPORT TABLE testTbl TO "hdfs://hdfs_host:port/a/b/c" PROPERTIES ("column_separator"=",") WITH BROKER "broker_name" ("username"="xxx", "password"="yyy"); ## keyword EXPORT # SHOW DATABASES ## description 该语句用于展示当前可见的 db 语法: SHOW DATABASES; ## keyword SHOW,DATABASES # SHOW TABLES ## description 该语句用于展示当前 db 下所有的 table 语法: SHOW TABLES; ## keyword SHOW,TABLES # SHOW LOAD ## description 该语句用于展示指定的导入任务的执行情况 语法: SHOW LOAD [FROM db_name] [ WHERE [LABEL [ = "your_label" | LIKE "label_matcher"]] [STATE = ["PENDING"|"ETL"|"LOADING"|"FINISHED"|"CANCELLED"|]] ] [ORDER BY ...] [LIMIT limit]; 说明: 1) 如果不指定 db_name,使用当前默认db 2) 如果使用 LABEL LIKE,则会匹配导入任务的 label 包含 label_matcher 的导入任务 3) 如果使用 LABEL = ,则精确匹配指定的 label 4) 如果指定了 STATE,则匹配 LOAD 状态 5) 可以使用 ORDER BY 对任意列组合进行排序 6) 如果指定了 LIMIT,则显示 limit 条匹配记录。否则全部显示 7) 如果是使用 broker/mini load,则 URL 列中的连接可以使用以下命令查看: SHOW LOAD WARNINGS ON 'url' ## example 1. 展示默认 db 的所有导入任务 SHOW LOAD; 2. 展示指定 db 的导入任务,label 中包含字符串 "2014_01_02",展示最老的10个 SHOW LOAD FROM example_db WHERE LABEL LIKE "2014_01_02" LIMIT 10; 3. 展示指定 db 的导入任务,指定 label 为 "load_example_db_20140102" 并按 LoadStartTime 降序排序 SHOW LOAD FROM example_db WHERE LABEL = "load_example_db_20140102" ORDER BY LoadStartTime DESC; 4. 展示指定 db 的导入任务,指定 label 为 "load_example_db_20140102" ,state 为 "loading", 并按 LoadStartTime 降序排序 SHOW LOAD FROM example_db WHERE LABEL = "load_example_db_20140102" AND STATE = "loading" ORDER BY LoadStartTime DESC; 5. 小批量导入是查看导入状态的命令 curl --location-trusted -u {user}:{passwd} http://{hostname}:{port}/api/{database}/_load_info?label={labelname} ## keyword SHOW,LOAD # SHOW EXPORT ## description 该语句用于展示指定的导出任务的执行情况 语法: SHOW EXPORT [FROM db_name] [ WHERE [EXPORT_JOB_ID = your_job_id] [STATE = ["PENDING"|"EXPORTING"|"FINISHED"|"CANCELLED"]] ] [ORDER BY ...] [LIMIT limit]; 说明: 1) 如果不指定 db_name,使用当前默认db 2) 如果指定了 STATE,则匹配 EXPORT 状态 3) 可以使用 ORDER BY 对任意列组合进行排序 4) 如果指定了 LIMIT,则显示 limit 条匹配记录。否则全部显示 ## example 1. 展示默认 db 的所有导出任务 SHOW EXPORT; 2. 展示指定 db 的导出任务,按 StartTime 降序排序 SHOW EXPORT FROM example_db ORDER BY StartTime DESC; 3. 展示指定 db 的导出任务,state 为 "exporting", 并按 StartTime 降序排序 SHOW EXPORT FROM example_db WHERE STATE = "exporting" ORDER BY StartTime DESC; 4. 展示指定db,指定job_id的导出任务 SHOW EXPORT FROM example_db WHERE EXPORT_JOB_ID = job_id; ## keyword SHOW,EXPORT # SHOW DELETE ## description 该语句用于展示已执行成功的历史 delete 任务 语法: SHOW DELETE [FROM db_name] ## example 1. 展示数据库 database 的所有历史 delete 任务 SHOW DELETE FROM database; ## keyword SHOW,DELETE # SHOW ALTER ## description 该语句用于展示当前正在进行的各类修改任务的执行情况 语法: SHOW ALTER [CLUSTER | TABLE [COLUMN | ROLLUP] [FROM db_name]]; 说明: TABLE COLUMN:展示修改列的 ALTER 任务 TABLE ROLLUP:展示创建或删除 ROLLUP index 的任务 如果不指定 db_name,使用当前默认 db CLUSTER: 展示集群操作相关任务情况(仅管理员使用!待实现...) ## example 1. 展示默认 db 的所有修改列的任务执行情况 SHOW ALTER TABLE COLUMN; 2. 展示指定 db 的创建或删除 ROLLUP index 的任务执行情况 SHOW ALTER TABLE ROLLUP FROM example_db; 3. 展示集群操作相关任务(仅管理员使用!待实现...) SHOW ALTER CLUSTER; ## keyword SHOW,ALTER # SHOW DATA ## description 该语句用于展示数据量 语法: SHOW DATA [FROM db_name[.table_name]]; 说明: 如果不指定 FROM 子句,使用展示当前 db 下细分到各个 table 的数据量 如果指定 FROM 子句,则展示 table 下细分到各个 index 的数据量 ## example 1. 展示默认 db 的各个 table 的数据量及汇总数据量 SHOW DATA; 2. 展示指定 db 的下指定表的细分数据量 SHOW DATA FROM example_db.table_name; ## keyword SHOW,DATA # SHOW PARTITIONS ## description 该语句用于展示分区信息 语法: SHOW PARTITIONS FROM [db_name.]table_name [PARTITION partition_name]; ## example 1. 展示指定 db 的下指定表的分区信息 SHOW PARTITIONS FROM example_db.table_name; 1. 展示指定 db 的下指定表的指定分区的信息 SHOW PARTITIONS FROM example_db.table_name PARTITION p1; ## keyword SHOW,PARTITION # SHOW TABLET ## description 该语句用于显示 tablet 相关的信息(仅管理员使用) 语法: SHOW TABLET [FROM [db_name.]table_name | tablet_id] ## example 1. 显示指定 db 的下指定表所有 tablet 信息 SHOW TABLET FROM example_db.table_name; 2. 显示指定 tablet id 为 10000 的 tablet 的父层级 id 信息 SHOW TABLET 10000; ## keyword SHOW,TABLET # SHOW PROPERTY ## description 该语句用于查看用户的属性 语法: SHOW PROPERTY [FOR user] [LIKE key] ## example 1. 查看 jack 用户的属性 SHOW PROPERTY FOR 'jack' 2. 查看 jack 用户导入cluster相关属性 SHOW PROPERTY FOR 'jack' LIKE '%load_cluster%' ## keyword SHOW, PROPERTY # SHOW BACKUP ## description 该语句用于查看 BACKUP 任务 语法: SHOW BACKUP [FROM db_name] 说明: 1. Palo 中仅保存最近一次 BACKUP 任务。 2. 各列含义如下: JobId: 唯一作业id SnapshotName: 备份的名称 DbName: 所属数据库 State: 当前阶段 PENDING: 提交作业后的初始状态 SNAPSHOTING: 执行快照中 UPLOAD_SNAPSHOT:快照完成,准备上传 UPLOADING: 快照上传中 SAVE_META: 将作业元信息保存为本地文件 UPLOAD_INFO: 上传作业元信息 FINISHED: 作业成功 CANCELLED: 作业失败 BackupObjs: 备份的表和分区 CreateTime: 任务提交时间 SnapshotFinishedTime: 快照完成时间 UploadFinishedTime: 快照上传完成时间 FinishedTime: 作业结束时间 UnfinishedTasks: 在 SNAPSHOTING 和 UPLOADING 阶段会显示还未完成的子任务id Status: 如果作业失败,显示失败信息 Timeout: 作业超时时间,单位秒 ## example 1. 查看 example_db 下最后一次 BACKUP 任务。 SHOW BACKUP FROM example_db; ## keyword SHOW, BACKUP # SHOW RESTORE ## description 该语句用于查看 RESTORE 任务 语法: SHOW RESTORE [FROM db_name] 说明: 1. Palo 中仅保存最近一次 RESTORE 任务。 2. 各列含义如下: JobId: 唯一作业id Label: 要恢复的备份的名称 Timestamp: 要恢复的备份的时间版本 DbName: 所属数据库 State: 当前阶段 PENDING: 提交作业后的初始状态 SNAPSHOTING: 执行快照中 DOWNLOAD: 快照完成,准备下载仓库中的快照 DOWNLOADING: 快照下载中 COMMIT: 快照下载完成,准备生效 COMMITING: 生效中 FINISHED: 作业成功 CANCELLED: 作业失败 AllowLoad: 恢复时是否允许导入(当前不支持) ReplicationNum: 指定恢复的副本数 RestoreJobs: 要恢复的表和分区 CreateTime: 任务提交时间 MetaPreparedTime: 元数据准备完成时间 SnapshotFinishedTime: 快照完成时间 DownloadFinishedTime: 快照下载完成时间 FinishedTime: 作业结束时间 UnfinishedTasks: 在 SNAPSHOTING、DOWNLOADING 和 COMMITING 阶段会显示还未完成的子任务id Status: 如果作业失败,显示失败信息 Timeout: 作业超时时间,单位秒 ## example 1. 查看 example_db 下最近一次 RESTORE 任务。 SHOW RESTORE FROM example_db; ## keyword SHOW, RESTORE # SHOW REPOSITORIES ## description 该语句用于查看当前已创建的仓库。 语法: SHOW REPOSITORIES; 说明: 1. 各列含义如下: RepoId: 唯一的仓库ID RepoName: 仓库名称 CreateTime: 第一次创建该仓库的时间 IsReadOnly: 是否为只读仓库 Location: 仓库中用于备份数据的根目录 Broker: 依赖的 Broker ErrMsg: Palo 会定期检查仓库的连通性,如果出现问题,这里会显示错误信息 ## example 1. 查看已创建的仓库: SHOW REPOSITORIES; ## keyword SHOW, REPOSITORY, REPOSITORIES # SHOW SNAPSHOT ## description 该语句用于查看仓库中已存在的备份。 语法: SHOW SNAPSHOT ON `repo_name` [WHERE SNAPSHOT = "snapshot" [AND TIMESTAMP = "backup_timestamp"]]; 说明: 1. 各列含义如下: Snapshot: 备份的名称 Timestamp: 对应备份的时间版本 Status: 如果备份正常,则显示 OK,否则显示错误信息 2. 如果指定了 TIMESTAMP,则会额外显示如下信息: Database: 备份数据原属的数据库名称 Details: 以 Json 的形式,展示整个备份的数据目录及文件结构 ## example 1. 查看仓库 example_repo 中已有的备份: SHOW SNAPSHOT ON example_repo; 2. 仅查看仓库 example_repo 中名称为 backup1 的备份: SHOW SNAPSHOT ON example_repo WHERE SNAPSHOT = "backup1"; 2. 查看仓库 example_repo 中名称为 backup1 的备份,时间版本为 "2018-05-05-15-34-26" 的详细信息: SHOW SNAPSHOT ON example_repo WHERE SNAPSHOT = "backup1" AND TIMESTAMP = "2018-05-05-15-34-26"; ## keyword SHOW, SNAPSHOT # RESTORE TABLET ## description 该功能用于恢复trash目录中被误删的tablet数据。 说明:这个功能暂时只在be服务中提供一个http接口。如果要使用, 需要向要进行数据恢复的那台be机器的http端口发送restore tablet api请求。api格式如下: METHOD: POST URI: http://be_host:be_http_port/api/restore_tablet?tablet_id=xxx&schema_hash=xxx ## example curl -X POST "http://hostname:8088/api/restore_tablet?tablet_id=123456&schema_hash=1111111"