问题描述:
sqoop导入历史数据至hive,落地部分日期数据较mysql数据少几条。
mysql -> sqoop -> hdfs -> ods
问题分析
写了jar 逐天比对mysql对应日期和hive对应日期数据量,count(1) 不同的日期保存下来。
然后拉对应日期的mysql 和 hive数据查出缺少的数据。
我是用navicat 和dbeaver分别将缺少数据日期的mysql数据和hive数据保存成CSV格式。
import pandas as pd
hive_path = r'C:\Users\Administrator\Desktop\hive.csv'
mysql_path = r'C:\Users\Administrator\Desktop\mysql.csv'
hivedata = pd.read_csv(hive_path, index_col=False)
mysqldata = pd.read_csv(mysql_path, index_col=False)
print(hivedata.shape[0])
print(mysqldata.shape[0])
# hive字段一般为小写 主键改成与Mysql相同
hivedata = hivedata.rename(columns={'zd1': 'ZD1'})
res = pd.merge(mysqldata, hivedata, how='left', on=['ZD1'])
# 合并后res.字段.isnull 字段一般选择后面的 可以筛选出两个dataframe 差异数据
print(res[res.dt.isnull()])
然后发现差异数据的日期格式为 20210811000000格式
往回排查导sqoop脚本发现 sql 查询条件 日期条件 date> ‘xxx’ and date <‘xxx’
漏写了=
解决方案
修改sqoop脚本,将缺少日期数据补齐。