数仓字段规范
数据类型原则
MySQL 到数据仓库映射关系
MySQL 数据类型 | 数据仓库 数据类型 |
---|---|
INT | BIGINT |
BIGINT | BIGINT |
FLOAT | DECIMAL(27,6) |
DOUBLE | DECIMAL(27,6) |
DECIMAL | DECIMAL(27,6) |
VARCHAR | STRING |
TEXT | STRING |
DATE | STRING |
DATETIME | STRING |
TIMESTAMP | STRING |
Oracle 到数据仓库映射关系
Oracle 数据类型 | 数据仓库 数据类型 |
---|---|
NUMBER | DECIMAL(27,6) |
VARCHAR2 | STRING |
CLOB | STRING |
DATE | STRING |
TIMESTAMP | STRING |
数据仓库中NULL值的影响
在数据仓库中,NULL值(空值)可能会带来一系列影响,对数据质量和分析结果产生重要影响:
数据不完整: NULL值表示缺失的数据或未知的信息。当数据仓库中存在大量NULL值时,会导致数据不完整,从而影响分析和报告的准确性。
统计结果失真: 在进行聚合计算(如求和、平均值等)时,NULL值会被忽略,导致统计结果失真。缺失的数据将无法参与计算,可能会影响决策和分析结果。
关联操作错误: 在关联不同表时,如果存在NULL值,可能导致关联操作出错,产生错误的关联结果,从而影响数据的正确性。
条件判断困难: 在查询和条件判断时,处理NULL值需要特别小心。由于NULL与其他值的比较结果为NULL,可能会导致条件判断变得困难,需要使用IS NULL或IS NOT NULL来明确判断NULL值。
数据质量下降: NULL值可能会影响数据仓库的数据质量,降低数据的准确性和可信度,从而影响决策和业务分析。
索引性能下降: 在某些情况下,如果字段中包含大量的NULL值,可能会导致索引的选择性下降,甚至导致索引失效。索引失效会导致数据库无法充分利用索引提供的快速查询功能,而需要进行全表扫描,导致查询变慢。
存储空间利用: 列存储通常采用字典压缩和位图编码等技术来优化存储空间利用率。在列存储中,NULL值可能需要额外的存储空间来表示,因为NULL值不参与字典编码,而是需要额外的标志位来表示空值。这可能导致存储空间的浪费。
为了处理NULL值的影响,应采取以下措施:
- 在数据导入过程中,要对NULL值进行处理,可以使用合适的默认值代替NULL值,或者使用特殊值来标识缺失的信息。
- 在查询和分析过程中,要谨慎处理NULL值,确保使用合适的函数和条件判断来处理NULL值。
- 定期进行数据质量检查,发现并处理NULL值的问题,保障数据仓库中的数据质量。
通过以上措施,可以有效地处理数据仓库中NULL值的影响,确保数据质量和分析结果的准确性,下面是相关的装换例子。
数据类型 | NULL值转换默认值 |
---|---|
整数类型 (INT, BIGINT等) | 0 |
浮点数类型 (FLOAT, DOUBLE等) | 0.0 |
字符串类型 (VARCHAR, CHAR等) | '' 或 'N/A' 或 'UNKNOWN' |
日期和时间类型 (DATE, TIMESTAMP等) | '1970-01-01' 或 '1900-01-01 00:00:00' |
布尔类型 (BOOLEAN) | FALSE 或 TRUE |
金额类型 (DECIMAL) | 0.00 |
枚举类型 (ENUM) | 'UNKNOWN' |
ID类型 (如用户ID,产品ID等) | -1 或 'UNKNOWN' |
请注意,这些NULL值转换默认值是根据一般的数据仓库实践和常见的业务需求推荐的。实际情况中,根据不同的业务场景和数据语义,可能需要调整这些转换值。确保在处理NULL值时,根据具体情况选择合适的转换方式,以保证数据的准确性和一致性。
维度退化原则
冗余字段应该使用高频,至少在下游的3个或以上的数据流程中被频繁使用。
引入冗余字段*不应造成本身数据产生过多的延后,需要及时更新保持数据准确性。
冗余字段和已有字段的重复率不应过大,原则上不应超过60%。如果冗余率过高,可以考虑使用join操作或原表拓展。
引入冗余字段需要仔细考虑维度退化问题,避免维度属性数量过多,导致维度键过长影响查询性能。
冗余字段的引入应该结合具体的业务需求和数据仓库的性能优化考虑,确保数据冗余的合理性和有效性。