spark-sql 丢失数据
1.通过spark执行hive sql 的时候,发现 hive 四条数据,spark 执行结果只有两条数据
目标对应的两条数据丢失
select date, user_id, pay from dim.isr_pay_failed where user_id = '*******'
hive-sql 结果:
| date | user_id | pay |
| 20250425| d34342343* | 7 |
| 20250425| d34342344* | 7 |
| 202504525| d34342345* | 7 |
| 202504524| d34342346* | 7 |
spark-sql 结果
| 202504525| d34342345* | 7 |
| 202504524| d34342346* | 7 |
原因
表结构很总 user_id 为 CHAR 类型:
CHAR 类型数据在spark 和 hive 中存在如下差异:
Hive 类型 Spark SQL 类型 关键差异与注意事项
CHAR 不足补空格。建议通过 TRIM() 或改用 VARCHAR 避免填充问题。
TIMESTAMP TimestampType 时区敏感:Hive 默认使用服务器时区,Spark 需通过 spark.sql.session.timeZone
统一配置。
解决方式
select date, user_id, pay from dim.isr_pay_failed where triim(user_id) = '*******';
问题解决