StarRocks严格模式(Strict Mode)详解:数据加载质量控制机制

StarRocks严格模式(Strict Mode)详解:数据加载质量控制机制

starrocks StarRocks是一个开源的分布式数据分析引擎,用于处理大规模数据查询和分析。 - 功能:分布式数据分析;大规模数据查询;数据分析;数据仓库。 - 特点:高性能;可扩展;易于使用;支持多种数据源。 starrocks 项目地址: https://gitcode.com/gh_mirrors/st/starrocks

什么是严格模式

在StarRocks的数据加载过程中,严格模式(Strict Mode)是一个重要的质量控制机制。它决定了系统如何处理源数据与目标表数据类型不匹配的情况,以及如何处理不符合要求的数据行。

严格模式的工作原理

当源数据列的数据类型与目标表列的数据类型不完全匹配时,StarRocks会尝试进行数据类型转换。在这个过程中可能会遇到各种问题,例如:

  1. 数据类型不匹配(如将字符串"abc"转换为整数)
  2. 数值超出范围(如将大整数2000转换为TINYINT类型)
  3. 格式不合法(如日期格式错误)

这些转换失败的列值被称为"不合格列值",包含不合格列值的行被称为"不合格行"。严格模式就是用来控制系统是否过滤这些不合格行的开关。

严格模式的行为差异

严格模式禁用时(false)

  • 系统会将不合格列值转换为NULL值
  • 包含NULL值的不合格行会与合格行一起被加载
  • 如果目标列不允许NULL值,则会报错

严格模式启用时(true)

  • 系统会过滤掉不合格行,只加载合格行
  • 会返回关于不合格行的详细信息
  • 过滤的不合格行数量受max_filter_ratio参数控制

实际应用示例

假设我们要将包含以下值的CSV文件列加载到TINYINT类型(范围-128到127)的目标列中:

| 源数据值 | 转换结果 | 严格模式禁用(false) | 严格模式启用(true) | |---------|---------|-------------------|-------------------| | \N | NULL | 加载为NULL | 加载为NULL | | abc | NULL | 加载为NULL | 被过滤掉 | | 2000 | NULL | 加载为NULL | 被过滤掉 | | 1 | 1 | 加载为1 | 加载为1 |

如何设置严格模式

StarRocks提供了多种方式来配置严格模式:

1. 通过参数设置

  • strict_mode参数:默认为false,true表示启用严格模式
  • enable_insert_strict会话变量:默认为true,true表示启用严格模式

2. 不同加载方式的设置方法

Stream Load
curl --location-trusted -u username:password \
    -H "strict_mode: true" \
    -T data.csv -XPUT \
    http://fe_host:fe_http_port/api/db_name/table_name/_stream_load
Broker Load
LOAD LABEL db_name.label_name
(
    DATA INFILE ("hdfs_path")
    INTO TABLE table_name
)
WITH BROKER
(
    "username" = "hdfs_user",
    "password" = "hdfs_pwd"
)
PROPERTIES
(
    "strict_mode" = "true"
)
Routine Load
CREATE ROUTINE LOAD db_name.job_name ON table_name
PROPERTIES
(
    "strict_mode" = "true"
) 
FROM KAFKA
(
    "kafka_broker_list" ="broker1:port,broker2:port",
    "kafka_topic" = "topic_name"
)
Spark Load
LOAD LABEL db_name.label_name
(
    DATA INFILE ("hdfs_path")
    INTO TABLE table_name
)
WITH RESOURCE resource_name
(
    "spark.executor.memory" = "3g",
    "broker.username" = "hdfs_user",
    "broker.password" = "hdfs_pwd"
)
PROPERTIES
(
    "strict_mode" = "true"   
)
INSERT语句
INSERT INTO db_name.table_name
PROPERTIES(
    "strict_mode" = "true"
)
SELECT * FROM source_table

最佳实践建议

  1. 数据质量要求高:建议启用严格模式,确保只有符合要求的数据被加载
  2. 数据探索阶段:可以暂时禁用严格模式,先加载数据再清洗
  3. 结合max_filter_ratio使用:控制允许过滤的最大不合格行比例
  4. 注意版本差异:不同版本中严格模式的默认值可能不同

注意事项

  1. 从3.4.0版本开始,INSERT语句的严格模式默认值为true
  2. 在3.4.0之前版本中,当enable_insert_strict设置为true时,遇到不合格行会导致整个INSERT作业失败
  3. 无论严格模式如何设置,如果目标列不允许NULL值而源数据包含NULL,都会导致错误

通过合理使用严格模式,可以有效控制StarRocks数据加载过程中的数据质量,确保数据的准确性和一致性。

starrocks StarRocks是一个开源的分布式数据分析引擎,用于处理大规模数据查询和分析。 - 功能:分布式数据分析;大规模数据查询;数据分析;数据仓库。 - 特点:高性能;可扩展;易于使用;支持多种数据源。 starrocks 项目地址: https://gitcode.com/gh_mirrors/st/starrocks

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奚子萍Marcia

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值