开发者社区> 深蓝居> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

在数据仓库建模时,应该使用哪种数据类型的度量值

简介:
+关注继续查看

在数据仓库建模中,很重要的模型就是星型模型,在星型模型中我们将表分为维度表和事实表,事实表中存放的可以进行计算(汇总,平均等)的列就是度量值。要进行计算的度量值,可以选择的数据类型也有好多种,那么我们应该选择哪一种呢?

首先定个大的方向,是整数还是小数?如果是整数,那么我们可以选择的数据类型就只有int和bigint了,16位或者8位的整数基本不用考虑,在数据仓库这种大数据量的环境下,很容易就overflow了。即使是int这种32位的整数,在数据量特别大的情况下,如果要做sum甚至是avg操作,很可能就会溢出,所以一般推荐使用bigint。

对于价格,金额这种类型的数据,一般会记录成小数,而且是两位小数,那么我们使用什么数据类型来进行存储呢?以SQL Server为例,我们可以选择的数据类型包括:

  • float
  • money
  • decimal/numeric

1.Float是一个非精确的数据类型,也就是说,存储的数据在读取出来时可能会有一定的误差。在财务这种一分钱都不能差的系统里面,是绝对不能采用的数据类型,在数据仓库中进行sum的话会使得sum的结果与实际结果不一致。但是Float并不是一无是处,笔者使用两千万行的数据对几种小数类型的数据进行性能测试,发现float在进行运算时具有一点优势,另外Float由于内部是采用科学计数法实现,所以可以存储非常非常大的数值。

print convert(money,'12345678901234567890');--Error
print convert(decimal,'12345678901234567890');--Error
print convert(float,'12345678901234567890');--Correct

2.Money是SQL Server特有的数据类型,在Oracle,MySQL中没有对应的类型。money的精度是可以到小数点后4位,所以对于我们平时记录两位小数的金额来说,是满足要求的。如果我们的度量值不是金额,而是其他含义的值,而且精度也不会超过4位小数(比如面积、长度、重量等),那么还是否可以使用money类型呢?如果只是进行sum、avg这样的运算,是完全可以使用money类型的。关于money和decimal的性能,有人专门做了个比较,我也使用两千万的数据进行了sum和avg的比较,发现money在计算上有一定的性能优势,但是这个优势也不是明显到速度能够提高好几倍的程度。老外做的比较的博客:http://sqlblog.com/blogs/aaron_bertrand/archive/2008/04/27/performance-storage-comparisons-money-vs-decimal.aspx

money类型在进行除法运算的时候,如果没有转换为decimal类型,那么就会造成精度丢失,因为money始终保留4位小数,所以最终结果可能会比decimal类型的有误差。所以最好不要把money类型的数据参与除法运算。

select sum(money1/money2) from testMoney;

如果一定要参与除法运算,那么我们可以将一个money类型和一个decimal类型进行除法运算,这样系统会自动转换成decimal类型,从而避免由于money只保留4位小数造成的精度丢失。

select sum(money1/decimal1) from testMoney;

3.Decimal类型和money类型一样都是精确数值类型,不同之处在于decimal类型可以指定占用的长度和小数后的精度。Decimal可以提供比Money更大的数据范围和更高的精度,当然也会占用更多的存储空间。

如果对于只保留2位小数的度量值,我们可以使用decimal(xx,2)来存储,前面的值根据数据量和数据值的大小来取,我一般写成decimal(18,2)。使用decimal类型进行除法运算时,不会出现money类型遇到的小数精度丢失的问题,即使我们只申明了decimal(xx,2),但是在进行除法运算的过程中,系统会保留很高的小数精度来进行计算。

Decimal的运算性能不如money,但是差距也不是那么的明显,在无法预期的对度量值的运算的情况下,使用decimal更保险。

总结:

如果是整数,就用bigint,避免数据量太大造成的int数据溢出。

如果是小数,而且不是那么关心精度,可以使用float,如果要计算的数值非法非常大就必须使用float,但是对于一分钱都不能差的情况下,就不要使用float类型。而应该使用money或者decimal。

如果不会有除法运算,而且数据的精度是在小数点后4位以内,那么使用money,其速度比decimal更快。

如果无法预期会不会有除法运算,或者要求的小数位数精度很高,那么就得使用decimal,速度比money慢一些,但是基本上还在同一个数量级。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《SaaS模式云数据仓库MaxCompute安全最佳实践》电子版地址
2-SaaS模式云数据仓库MaxCompute安全最佳实践
5 0
阿里巴巴云数据仓库 MaxCompute 数据安全最佳实践
MaxCompute作为企业级SaaS模式云数据仓库,正在为客户业务及其数据提供持续的安全保护。 MaxCompute 近期对产品的安全能力进行了全面升级 ,结合数据生命周期,针对数据误用、数据滥用、数据泄露、数据丢失等典型数据风险场景,构建全生命周期的数据安全防护体系。
16963 0
Saas 模式云数据仓库 MaxCompute 产品 价值解读|学习笔记
快速学习 Saas 模式云数据仓库 MaxCompute 产品 价值解读
92 0
2021阿里巴巴大数据技术公开课第二季 — SaaS模式云数据仓库MaxCompute应用场景实践
MaxCompute 是面向分析的企业级 SaaS 模式云数据仓库,基于MaxCompute与推荐、搜索、机器学习等产品可构建智能推荐、用户增长等多种用户常用的解决方案。同时MaxCompute具备大规模数据科学分析、半结构化数据处理能力,也可提供基于Delta lake、Hudi格式的湖仓一体方案 。本季直播将对基于MaxCompute的经典解决方案和能力进行最佳实践介绍。
646 0
2020阿里巴巴大数据技术公开课第五季 — SaaS模式云数据仓库MaxCompute开发实战与常见问题
MaxCompute(原ODPS)作为SaaS模式云数据仓库,以Serverless架构提供快速、全托管的在线数据仓库服务,消除传统数据平台在资源扩展性和弹性方面的限制,最小化用户运维投入,使您经济并高效的分析处理海量数据。
815 0
SaaS模式云数据仓库 MaxCompute 问答整理之2020-07~08月
飞天大数据平台计算引擎MaxCompute成为全球首个TPCx-BB认证的公共云产品,是除Hive、Spark以外TPCx-BB第三个标准支持的大数据引擎。
2072 0
SaaS模式云数据仓库 MaxCompute 企业级安全能力升级—持续定义云原生,有效提升企业数据安全管理水平
日前,阿里云SaaS模式云数据仓库MaxCompute 全面升级企业级安全新能力,新发布功能包含实时审计日志、细粒度授权、数据脱敏、存储加密( BYOK)、持续备份恢复和跨地域的容灾备份。MaxCompute作为全托管大数据平台内建完善的安全管理能力,本次升级将对企业云上数据和业务形成更加全面和细粒度的保护,有效提升企业安全管理水平。
404 0
SaaS 模式云数据仓库 MaxCompute 数据安全最佳实践
MaxCompute作为企业级SaaS模式云数据仓库,正在为客户业务及其数据提供持续的安全保护。 MaxCompute 近期对产品的安全能力进行了全面升级,本文将针对数据误用、数据滥用、数据泄露、数据丢失等典型数据风险场景,结合数据生命周期,为您介绍基 于MaxCompute 和 DataWorks 原生集成安全能力的最佳实践。
656 0
飞天大数据产品价值解读— SaaS模式云数据仓库MaxCompute
企业在数字化转型过程中面临数据技术平台建设和运营的诸多挑战,随着现代化数据仓库向多功能、服务化方向发展演进,技术侧的变革为解决企业数据平台各项挑战带来新的可能。MaxCompute作为阿里云飞天大数据中的数据仓库产品,已经成为了阿里内部及众多的外部客户广泛使用且高度信赖的企业数据平台。本次直播将为您介绍SaaS模式云数据仓库MaxCompute核心能力及优势,并结合大数据分析平台经典使用场景,为您介绍MaxCompute 为企业带来的业务敏捷性、面向分析统一平台、显著降低TCO等关键业务价值。
1459 0
SaaS模式云数据仓库MaxCompute发布企业级新能力:兼顾成本与性能,持续保护云上数据及服务安全
2020年6月9日,阿里云MaxCompute全新发布企业级新能力,在成本、性能、安全方面,持续定义企业级SaaS模式云数据仓库,通过 “云数据仓库+” 的新模式,帮助企业实现数字经济新优势。
523 0
+关注
深蓝居
关注于区块链技术、跨链、密码学、通证经济、智能合约
文章
问答
文章排行榜
最热
最新
相关电子书
更多
ECS 计算与存储分离架构实践
立即下载
Android内存泄漏自动化链路分析组件--Probe
立即下载
代码大数据分析研究与实践
立即下载