如何在Athena查询时将double类型列转换为Long整数显示?
当然可以在Athena查询里直接把这种以指数形式存储的double列转换为Long值!不用每次都在应用层用BigDecimal处理,下面给你几个靠谱的方法,适配你的场景:
方法1:直接用CAST函数转换
因为你的double值本质都是整数(比如5.5828993167E10就是整数55828993167),Athena的CAST函数可以直接把这类double转成对应的BIGINT(也就是Java里的Long类型)。
假设你的列名叫numeric_col,查询语句可以这么写:
SELECT CAST(numeric_col AS BIGINT) AS converted_long FROM your_table_name;
这个方法和你在Java里用new BigDecimal(doubleVal).longValueExact()的效果完全一致,只要你的double值是整数的精确表示,就不会有精度损失。
方法2:用TRY_CAST做安全转换
如果担心偶尔出现异常值(比如带小数的double),可以用TRY_CAST替代CAST——它在转换失败时会返回NULL,而不是直接抛出查询错误,让你的查询更健壮:
SELECT TRY_CAST(numeric_col AS BIGINT) AS converted_long FROM your_table_name;
方法3:ROUND+CAST处理精度偏差(可选)
极少数情况下,double可能因为存储精度问题出现微小的小数偏差(比如原本的整数被存成5.5828993167E10 + 1e-12),这时候可以先用ROUND函数把值修正为精确整数,再转换:
SELECT CAST(ROUND(numeric_col) AS BIGINT) AS converted_long FROM your_table_name;
这些方法都是基于Athena底层的Presto引擎支持的函数,完全能满足你“几乎所有查询场景都直接转换”的需求,不用修改数据库列类型也能搞定。
内容的提问来源于stack exchange,提问作者forum.test17
相关产品推荐
相关产品推荐

