SHOW-LOAD
所有文档
menu
没有找到结果,请重新输入

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-REPOSITORIESSHOW-RESOURCES