如何在Apache Druid中将字符串类型Amount列保留两位小数?
Apache Druid中字符串类型Amount列的四舍五入处理(保留两位小数)
要处理字符串类型的Amount列,实现四舍五入并保留两位小数的需求,需要结合Druid的类型转换、数值计算和格式化函数完成,以下是具体方案:
查询阶段处理
直接在SQL查询中通过函数组合实现转换:
SELECT FORMAT_NUMBER(ROUND(TRY_CAST(Amount AS DOUBLE), 2), '0.00') AS formatted_amount FROM your_table_name
函数说明
TRY_CAST(Amount AS DOUBLE):将字符串类型的Amount转换为双精度数值,TRY_前缀确保转换失败时返回NULL而非直接抛出错误,提升查询稳定性。ROUND(..., 2):对转换后的数值执行四舍五入操作,保留两位小数。FORMAT_NUMBER(..., '0.00'):将四舍五入后的数值格式化为固定两位小数的字符串,确保像0.0、3.0这类数值会输出为0.00、3.00,完全匹配需求。
示例验证
- 输入
0.0→ 转换后0.0 → 四舍五入后0.0 → 格式化输出0.00 - 输入
3.0→ 转换后3.0 → 四舍五入后3.0 → 格式化输出3.00 - 输入
5.6666→ 转换后5.6666 → 四舍五入后5.67 → 格式化输出5.67
摄取阶段预处理
如果需要在数据摄取时就完成转换,可在Druid的摄取规范(ingestion spec)的transformSpec中配置转换逻辑:
"transformSpec": { "transforms": [ { "type": "expression", "name": "formatted_amount", "expression": "FORMAT_NUMBER(ROUND(TRY_CAST(Amount AS DOUBLE), 2), '0.00')" } ] }
这样摄取后的数据中会直接生成处理好的formatted_amount列,后续查询无需重复计算。
内容的提问来源于stack exchange,提问作者Surabhi Singh
相关产品推荐
相关产品推荐

