腾讯云数据仓库 TCHouse-D 导入的严格模式

严格模式(strict_mode)为导入操作中的一个参数配置。该参数会影响某些数值的导入行为和最终导入的数据。
这篇档主要说明如何设置严格模式,以及严格模式产生的影响。

相关产品
腾讯云数据仓库 TCHouse-D 产品页,含版本规格、价格与购买入口。

一、如何设置

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

1. BROKER LOAD

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

2. STREAM LOAD

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

3. ROUTINE LOAD

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

4. INSERT
通过 会话变量 设置:用户可以通过 enable_insert_strict 这个 Session 参数控制严格模式的开启。

注意:说明:

注意:1.2 及后续内核版本中,enable_insert_strict 参数默认为 true。1.1 及早期内核版本中,enable_insert_strict 参数默认为 false。

SET enable_insert_strict = true;INSERT INTO my_table …;

二、严格模式的作用

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

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

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

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

以列类型为 TinyInt 来举例:

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

以列类型为 Decimal(1,0) 举例:

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