上云无忧 > 文档中心 > 百度数据仓库 Palo 严格模式下的数据导入
百度数据仓库 Palo Doris版
百度数据仓库 Palo 严格模式下的数据导入

文档简介:
严格模式(strict_mode)为导入操作中的一个参数配置。该参数会影响某些数值的导入行为和最终导入的数据。 本文档主要说明如何设置严格模式,以及严格模式产生的影响。
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

严格模式(strict_mode)为导入操作中的一个参数配置。该参数会影响某些数值的导入行为和最终导入的数据。

本文档主要说明如何设置严格模式,以及严格模式产生的影响。

如何设置

严格模式默认情况下都为 False,即关闭状态。

不同的导入方式设置严格模式的方式不尽相同。

  1. BROKER LOAD

    LOAD LABEL example_db.label1 ( DATA INFILE("bos://my_bucket/input/file.txt")
  2.  INTO TABLE `my_table` COLUMNS TERMINATED BY "," ) WITH BROKER bos ( "bos_endpoint" = "http:
  3. //bj.bcebos.com", "bos_accesskey" = "xxxxxxxxxxxxxxxxxxxxxxxxxx", "bos_secret_accesskey"="
  4. yyyyyyyyyyyyyyyyyyyyyyyyyy" ) PROPERTIES ( "strict_mode" = "true" )
  5. STREAM LOAD

    curl --location-trusted -u user:passwd \ -H "strict_mode: true" \ -T 1.txt \ http://host:port/api
  6. /example_db/my_table/_stream_load
  7. ROUTINE LOAD

    CREATE ROUTINE LOAD example_db.test_job ON my_table
    PROPERTIES ( "strict_mode" = "true" ) FROM KAFKA ( "kafka_broker_list" = "broker1:9092,broker2:9092,broker3:9092", 
  8. "kafka_topic" = "my_topic" );
  9. INSERT

    通过会话变量设置:

    SET enable_insert_strict = true; INSERT INTO my_table ...;

严格模式的作用

严格模式的意思是,对于导入过程中的列类型转换进行严格过滤。

严格过滤的策略如下:

对于列类型转换来说,如果开启严格模式,则错误的数据将被过滤。这里的错误数据是指:原始数据并不为 null,而在进行列类型转换后结果为 null 的这一类数据。

这里说指的 列类型转换,并不包括用函数计算得出的 null 值。

对于导入的某列类型包含范围限制的,如果原始数据能正常通过类型转换,但无法通过范围限制的,严格模式对其也不产生影响。例如:如果类型是 decimal(1,0), 原始数据为 10,则属于可以通过类型转换但不在列声明的范围内。这种数据 strict 对其不产生影响。

  1. 以列类型为 TinyInt 来举例:

    原始数据类型 原始数据举例 转换为 TinyInt 后的值 严格模式 结果
    空值 \N NULL 开启或关闭 NULL
    非空值 "abc" or 2000 NULL 开启 非法值(被过滤)
    非空值 "abc" NULL 关闭 NULL
    非空值 1 1 开启或关闭 正确导入

    说明:

    1. 表中的列允许导入空值
    2. abc 及 2000 在转换为 TinyInt 后,会因类型或精度问题变为 NULL。在严格模式开启的情况下,这类数据将会被过滤。而如果是关闭状态,则会导入 null。
  2. 以列类型为 Decimal(1,0) 举例

    原始数据类型 原始数据举例 转换为 Decimal 后的值 严格模式 结果
    空值 \N null 开启或关闭 NULL
    非空值 aaa NULL 开启 非法值(被过滤)
    非空值 aaa NULL 关闭 NULL
    非空值 1 or 10 1 or 10 开启或关闭 正确导入

    说明:

    1. 表中的列允许导入空值
    2. abc 在转换为 Decimal 后,会因类型问题变为 NULL。在严格模式开启的情况下,这类数据将会被过滤。而如果是关闭状态,则会导入 null。
    3. 10 虽然是一个超过范围的值,但是因为其类型符合 decimal 的要求,所以严格模式对其不产生影响。10 最后会在其他导入处理流程中被过滤。但不会被严格模式过滤。

相似文档
  • PALO 中存储的数据都是以追加(Append)的方式进入系统,这意味着所有已写入的数据是不可变更的。 所以 PALO 采用标记的方式来实现数据更新的目的。即在一批更新数据中,将之前的数据标记为删除,并写入新的数据。
  • PALO 中的数据删除有以下几种方式: TRUNCATE,该命令用于直接清空表或分区,但不会删除对应的元数据。操作代价较低,再有清空数据需求时,建议使用。 DROP,删除表或分区,会同时删除数据和元数据。
  • 标记删除功能是对 DELETE 语句删除功能的一种补充。使用 DELETE 语句对数据删除,无法支持高频操作场景。 另外,类似于CDC(Change Data Capture)场景中,INSERT 和 DELETE 一般是穿插出现的。 标记删除功能就是为了支持以上两种场景而做的功能。
  • UNIQUE KEY 模型下,PALO 会根据主键自动的进行数据的更新。但是当同一批次导入数据中出现相同主键的行时,PALO 无法判断其先后顺序,则可能出现更新行为不一致的问题。 而在某些数据同步场景下,需要保证数据能够按顺序更新,而 Sequence Column 功能就是为了解决这一问题。
  • 某些情况下,用户希望将 PALO 中的数据导出到其他系统做进一步分析。 PALO 目前支持通过以下方式将数据导出: Export: EXPORT 命令主要用于将全表(或指定分区)的内容导出到远端存储,比如 BOS 上。 该方式目前仅支持指定表或分区进行全量的导出。不支持对导出结果进行映射、过滤或转换操作。导出格式为 CSV。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部