SHOW-LOAD

          PALO

          SHOW-LOAD

          SHOW LOAD

          Description

          该语句用于展示导入任务的执行情况。

          SHOW LOAD
          [FROM db_name]
          [
              WHERE 
              [LABEL [ = "your_label" | LIKE "label_matcher"]]
              [STATE = ["PENDING"|"LOADING"|"FINISHED"|"CANCELLED"|]]
          ]
          [ORDER BY ...]
          [LIMIT limit][OFFSET offset];
          • db_name

            查看指定数据库下的导入作业。如不指定,使用当前默认数据库。

          • LABEL

            Label 可以通过等值进行精确匹配,也可以通过 Like 进行模糊匹配。

          • STATE

            查看指定状态的导入任务。

            1. PENDING:导入已提交,但未开始执行。
            2. LOADING:导入正在进行。
            3. FINISHED:导入结束并且导入成功。
            4. CANCELLED:导入失败。
          • ORDER BY ... LIMIT [OFFSET]

            可以指定对结果的任意列进行排序。

            ORDER BY createtime DESC LIMIT 10,20

          SHOW LOAD 命令的返回结果如下:

          mysql> show load order by createtime desc limit 1\G
          *************************** 1. row ***************************
                   JobId: 76391
                   Label: label1
                   State: FINISHED
                Progress: ETL:N/A; LOAD:100%
                    Type: BROKER
                 EtlInfo: unselected.rows=4; dpp.abnorm.ALL=15; dpp.norm.ALL=28133376
                TaskInfo: cluster:N/A; timeout(s):10800; max_filter_ratio:5.0E-5
                ErrorMsg: N/A
              CreateTime: 2019-07-27 11:46:42
            EtlStartTime: 2019-07-27 11:46:44
           EtlFinishTime: 2019-07-27 11:46:44
           LoadStartTime: 2019-07-27 11:46:44
          LoadFinishTime: 2019-07-27 11:50:16
                     URL: http://192.168.1.1:8040/api/_load_error_log?file=__shard_4/error_log_insert_stmt_4bb00753932c491a-a6da6e2725415317_4bb00753932c491a_a6da6e2725415317
              JobDetails: {"Unfinished backends":{"9c3441027ff948a0-8287923329a2b6a7":[10002]},"ScannedRows":2390016,"TaskNumber":1,"All backends":{"9c3441027ff948a0-8287923329a2b6a7":[10002]},"FileNumber":1,"FileSize":1073741824}

          下面主要介绍了查看导入命令返回结果集中参数意义:

          • JobId

            导入任务的唯一ID,每个导入任务的 JobId 都不同,由系统自动生成。与 Label 不同的是,JobId永远不会相同,而 Label 则可以在导入任务失败后被复用。

          • Label

            导入任务的标识。

          • State

            导入任务当前所处的阶段。在 Broker load 导入过程中主要会出现 PENDING 和 LOADING 这两个导入中的状态。如果 Broker load 处于 PENDING 状态,则说明当前导入任务正在等待被执行;LOADING 状态则表示正在执行中。

            导入任务的最终阶段有两个:CANCELLED 和 FINISHED,当 Load job 处于这两个阶段时,导入完成。其中 CANCELLED 为导入失败,FINISHED 为导入成功。

          • Progress

            导入任务的进度描述。分为两种进度:ETL 和 LOAD,对应了导入流程的两个阶段 ETL 和 LOADING。目前 Broker load 由于只有 LOADING 阶段,所以 ETL 则会永远显示为 N/A

            LOAD 的进度范围为:0~100%。

            LOAD 进度 = 当前完成导入的表个数 / 本次导入任务设计的总表个数 * 100%

            如果所有导入表均完成导入,此时 LOAD 的进度为 99% 导入进入到最后生效阶段,整个导入完成后,LOAD 的进度才会改为 100%。

            导入进度并不是线性的。所以如果一段时间内进度没有变化,并不代表导入没有在执行。

          • Type

            导入任务的类型。Broker load 的 type 取值只有 BROKER。

          • EtlInfo

            主要显示了导入的数据量指标 unselected.rows , dpp.norm.ALLdpp.abnorm.ALL。用户可以根据第一个数值判断 where 条件过滤了多少行,后两个指标验证当前导入任务的错误率是否超过 max_filter_ratio

            三个指标之和就是原始数据量的总行数。

          • TaskInfo

            主要显示了当前导入任务参数,也就是创建 Broker load 导入任务时用户指定的导入任务参数,包括:clustertimeoutmax_filter_ratio

          • ErrorMsg

            在导入任务状态为CANCELLED,会显示失败的原因,显示分两部分:type 和 msg,如果导入任务成功则显示 N/A

            type的取值意义:

            USER_CANCEL: 用户取消的任务
            ETL_RUN_FAIL:在ETL阶段失败的导入任务
            ETL_QUALITY_UNSATISFIED:数据质量不合格,也就是错误数据率超过了 max_filter_ratio
            LOAD_RUN_FAIL:在LOADING阶段失败的导入任务
            TIMEOUT:导入任务没在超时时间内完成
            UNKNOWN:未知的导入错误
          • CreateTime/EtlStartTime/EtlFinishTime/LoadStartTime/LoadFinishTime

            这几个值分别代表导入创建的时间,ETL阶段开始的时间,ETL阶段完成的时间,Loading阶段开始的时间和整个导入任务完成的时间。

            Broker load 导入由于没有 ETL 阶段,所以其 EtlStartTime, EtlFinishTime, LoadStartTime 被设置为同一个值。

            导入任务长时间停留在 CreateTime,而 LoadStartTime 为 N/A 则说明目前导入任务堆积严重。用户可减少导入提交的频率。

            LoadFinishTime - CreateTime = 整个导入任务所消耗时间
            LoadFinishTime - LoadStartTime = 整个 Broker load 导入任务执行时间 = 整个导入任务所消耗时间 - 导入任务等待的时间
          • URL

            导入任务的错误数据样例,访问 URL 地址既可获取本次导入的错误数据样例。当本次导入不存在错误数据时,URL 字段则为 N/A。

          • JobDetails

            显示一些作业的详细运行状态。包括导入文件的个数、总大小(字节)、子任务个数、已处理的原始行数,运行子任务的 BE 节点 Id,未完成的 BE 节点 Id。

            {"Unfinished backends":{"9c3441027ff948a0-8287923329a2b6a7":[10002]},"ScannedRows":2390016,"TaskNumber":1,"All backends":{"9c3441027ff948a0-8287923329a2b6a7":[10002]},"FileNumber":1,"FileSize":1073741824}

            其中已处理的原始行数,每 5 秒更新一次。该行数仅用于展示当前的进度,不代表最终实际的处理行数。实际处理行数以 EtlInfo 中显示的为准。

          Example

          1. 展示默认 db 的所有导入任务

            SHOW LOAD;
          2. 展示指定 db 的导入任务,label 中包含字符串 "2014_01_02"。

            SHOW LOAD FROM example_db WHERE LABEL LIKE "2020_01_02" LIMIT 10;
          3. 展示指定 db 的导入任务,指定 label 为 "load_example_db_20140102" 并按 LoadStartTime 降序排序。

            SHOW LOAD FROM example_db WHERE LABEL = "load_example_db_20200102" 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. 展示指定 db 的导入任务 并按 LoadStartTime 降序排序,并从偏移量5开始显示10条查询结果

            SHOW LOAD FROM example_db ORDER BY LoadStartTime DESC limit 5,10;
            SHOW LOAD FROM example_db ORDER BY LoadStartTime DESC limit 10 offset 5;

          Keywords

          SHOW, LOAD

          最佳实践

          1. 和 LOAD 命令配合使用

            建议用户通过 SHOW LOAD 命令以轮询方式查看提交的导入任务的状态。比如对于一个指定 Label 的导入任务,以10秒或更久的间隔来轮询查看导入的状态,并根据状态进行下一步操作。

            比如等待上一批提交的导入任务完成后,再进行下一批次的提交,或者对失败的任务进行重试。

          2. 查询相同 Label 的多个导入任务。

            如果一个 Label 对应的导入任务失败,则用户可以继续使用该 Label 重新提交任务。这种情况下,查询该 Label 会返回多个导入作业(包括新提交的和之前失败的)。此时若想查询最新的提交,则可以使用以下命令:

            SHOW LOAD WHERE LABEl="my_label" ORDER BY createtime DESC LIMIT 1;
          3. 查看数据质量问题

            如果导入任务失败且错误信息为 ETL_QUALITY_UNSATISFIED,则说明存在导入质量问题。其实在 URL 字段会给出一个连接。可以通过以下命令查看该链接中给出的错误数据信息:

            SHOW LOAD WARNINGS ON "your_url";

            以下列举一些常见的数据质量问题:

            • no partition for this tuple

              该行数据在表中没有对应的分区。需检查数据是否落在表的分区范围内。

            • null is not allowed for bitmap column

              不允许想 bitmap 类型字段导入 null 值。

            • the length of input is too long than schema

              字符串的长度超过了列定义的长度。需考虑增加 VARCHAR 列的定义最大长度。

            • decimal value is not valid for definition

              Decimal 类型精度不匹配。

            • Content of HLL type column is invalid

              HLL 列对应的数值类型不对。需检查是否使用了 hll_hash 函数对数据进行了转换。

            • null value for not null column

              尝试将 null 值导入不允许为 null 的列。

            • Parse json data for JsonDoc failed

              解析 Json 数据失败。

            • JSON Root not found

              给定的 json_root 未匹配。

            • JSON data is array-object, strip_outer_array must be TRUE.

              strip_outer_array 为 false,但是 Json 数据是一个数组。

            • JSON data is not an array-object, strip_outer_array must be FALSE

              strip_outer_array 为 true,但是 Json 数据不是一个数组。

            • Json value is null, but the column xx is not nullable

              导入 Json 数据时,尝试将 null 导入到不能为 null 的字段。

            • The column xx is not nullable, but it's not found in jsondata.

              导入 Json 数据时,没有匹配到字段,且列不能为 null。

            • All fields is null, this is a invalid row.

              导入 Json 数据时,一行中的所有字段名都无法匹配到数据。

            • Empty json line

              空的 Json 数据。

            • data is not encoded by UTF-8

              源数据不是 UTF-8 编码的。

            • actual column number is less than schema column number.

              源数据中的列数比表中的列数少。

            • actual column number is more than schema column number.

              源数据中的列数比表中的列数多。

            • column xx value is incorrect while strict mode is true

              严格模式 下,源数据被类型转换成了 null。

            • column xx value is null while columns is not nullable

              尝试将 null 值导入不允许为 null 的列。

          4. 查看作业执行进度

            因为返回结果中 Progress 字段显示的进度不是线性的。因此通过这个字段查询进度有时不太方便。此时我们还可以通过 JobDetails 字段中的 ScannedRows 来观察作业是否在运行。

            正常情况下,运行中的作业,ScannedRows 会大约每 5 秒更新一次,表示已经读取的数据行数。但有时可能因为数据质量问题,所有的数据行都被过滤了,导致 ScannedRows 一直不增长,或者为 0。此时还可以查看 All backendsUnfinished backends 两个字段。前者表示这个参与这个导入任务的所有 BE 节点,后者表示尚未完成的 BE 节点。

          5. 关于 TaskNumber

            JobDetails 中的 TaskNumber 字段不表示导入作业的并发度。这个仅表示 LOAD 语句中 DATA INFILE 子句的个数。

          上一篇
          SHOW-REPOSITORIES
          下一篇
          SHOW-RESOURCES