hive和datax數據採集數量對不上

26 篇文章 0 订阅
19 篇文章 0 订阅

hive和datax數據採集數量對不上

對數據的時候發現有些對不上,在hive中 staff_id = 'DF67B3FC-02DD-4142-807A-DF4A75A4A22E’的數據只有1033

在这里插入图片描述
而在mysql中發現staff_id = 'DF67B3FC-02DD-4142-807A-DF4A75A4A22E’的數據有4783條記錄(昨天的記錄是4781)
在这里插入图片描述
這個數據即使是由於離線採集也不會相差這麼大,肯定是哪裡出現了問題

原因:
在datax中修改cn_attendance_day_print的job文件,只要 staff_id = 'DF67B3FC-02DD-4142-807A-DF4A75A4A22E’的記錄
發現採集過來的確實是4781條數據
在这里插入图片描述
那麼datax到hdfs的鏈路是正確的
所以需要去查看一下剛剛採集過來的數據,由於之前的記錄都刪除了,所以懶得再去復現了,說一下最終的處理結果
後面發現原因是由於大小寫的原因,hive是區分數據大小寫的,但是在mysql中這邊設置了全局大小寫不區分
解決方案
在datax中將string類型的數據全部轉為大寫或者小寫

示例如下:

{
	"job": {
		"content": [{
			"transformer": [{
				"parameter": {
					"code": "for(int i=0;i<record.getColumnNumber();i++){if(record.getColumn(i).getByteSize()!=0){Column column = record.getColumn(i); def str = column.asString(); def newStr=null; newStr=str.replaceAll(\"[\\r\\n]\",\"\"); record.setColumn(i, new StringColumn(newStr)); };};return record;",
					"extraPackage": []
				},
				"name": "dx_groovy"
			}],
			"writer": {
				"parameter": {
					"writeMode": "append",
					"fieldDelimiter": "\u0001",
					"column": [{
						"type": "string",
						"name": "id"
					}, {
						"type": "string",
						"name": "username"
					}, {
						"type": "string",
						"name": "user_id"
					}, {
						"type": "string",
						"name": "superior_id"
					}, {
						"type": "string",
						"name": "finger_print_number"
					}],
					"path": "${targetdir}",
					"fileType": "text",
					"defaultFS": "hdfs://mycluster:8020",
					"compress": "gzip",
					"fileName": "cn_staff"
				},
				"name": "hdfswriter"
			},
			"reader": {
				"parameter": {
					"username": "dw_readonly",
					"column": ["id", "username", "user_id", "superior_id", "finger_print_number"],
					"connection": [{
						"table": ["cn_staff"],
						"jdbcUrl": ["jdbc:mysql://*******"]
					}],
					"password": "******",
					"splitPk": ""
				},
				"name": "mysqlreader"
			}
		}],
		"setting": {
			"speed": {
				"channel": 3
			},
			"errorLimit": {
				"record": 0,
				"percentage": 0.02
			}
		}
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当使用DataX将数据从Hive导出到MySQL时,可能会出现数据丢失的情况。出现数据丢失的原因可能有以下几种: 1. 数据源问题:首先,需要检查Hive中的数据是否完整,是否包含了所有需要导出的数据。可以通过查询Hive表来确认数据的完整性。 2. 数据过滤问题:在DataX的配置中,可能会对数据进行了过滤操作,例如使用了查询条件、选择了特定列等。如果过滤条件设置不正确,可能会导致一部分数据被漏掉。 3. 数据类型不匹配:Hive和MySQL有着不同的数据类型,在数据导出过程中,可能会发生类型转换导致数据丢失的问题。在配置DataX时,需要确保Hive和MySQL的数据类型匹配,以避免数据丢失。 4. 数据写入问题:在将数据从Hive导入到MySQL的过程中,可能会发生写入错误或网络中断等问题,导致数据丢失。在这种情况下,需要检查DataX的日志或MySQL的错误日志,以确定是否有异常情况发生。 为了解决数据丢失的问题,可以采取以下措施: 1. 检查数据源和目标数据库的数据完整性,确保数据源的数据没有问题。 2. 检查DataX的配置文件,确认过滤条件和数据类型匹配条件是否正确设置。 3. 对于数据较大的导出任务,可以考虑分批导出,以降低出现问题的风险。 4. 在导出过程中,定期备份数据,并且在数据导出完成后进行数据校验,确保目标数据库中的数据和源数据一致。 总之,数据丢失问题可能是由于数据源、配置、数据类型或写入问题引起的。通过对数据源和配置进行仔细检查,以及采取一些预防措施,可以减少数据丢失的可能性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_37759590

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值