【经验总结】Join关联结果不正确问题

本文作者分享了在进行数据挖掘过程中遇到的Join关联结果不正确的经验总结,探讨了可能的原因,包括数据库操作错误、负载均衡配置不当等因素,并提出了相应的解决策略,旨在帮助读者避免类似问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Join关联结果不正确问题

By Katana

 

    Join命令是一个非常高效的命令,大家都用的非常多,但是有时候join的结果会有些问题,很多同事问过Join命令为什么有时候不能正确关联出数据,经过研究发现如下:

    大家都知道join之前是需要sort的,先看一个join实例:

    文件1:1.txt

        1.txt

        1002547 14

        1002549 15

        10025492 15

        10025472 14

    Sort之后的结果:

        sort 1.txt 

        1002547 14

        10025472 14

        1002549 15

        10025492 15

    文件2:2.txt

        1002547 14

        10025471 01

        10025476 01

        10025473 01

        1002549 135

        10025498 135

        10025492 115

    Sort之后的结果:

        sort 2.txt 

        10025471 01

        1002547 14

        10025473 01

        10025476 01

        1002549 135

        10025492 115

        10025498 135

    Join结果:

 

        1002549 15 135

        10025492 15 115

    而实际上应该join出3个:

        1002547

        1002549

        10025492

 

    大家如果对自己的结果一一去做仔细核查的话,其实会发现join少了不少数据。

    很多人也因为join经常莫名其妙的问题而放弃使用join改用其他更费事的办法。

 

    至于为什么sort会把10025471放到1002547前面?这完全是因为字符集的原因,因为不同的字符集有不同的字符大小排序和比较方式(同一个字符集字符比较方式也有多种):

        env|grep LANG

        LANG=zh_CN

    如果在执行前把字符集设置为C

        export LANG=C(如无效则需要设置更高的字符环境变量export LC_ALL=C)

        sort 1.txt 

        1002547 14

        10025472 14

        1002549 15

        10025492 15

        sort 2.txt

        1002547 14

        10025471 01

        10025473 01

        10025476 01

        1002549 135

        10025492 115

        10025498 135

    join出来的结果:

        1002547 14 14

        1002549 15 135

        10025492 15 115

 

 

    Sort是按照当前字符集顺序来排序,而join则需要按照标准顺序排序来连接。

 

    所以大家以后join来处理文件的时候,一定要指定字符集再使用sort

        export LANG=C

 

本文原创自无线技术运营空间: http://wireless.qzone.qq.com 及 http://blog.youkuaiyun.com/wireless_tech (专注无线技术运营——无线技术(操作系统/数据库/WEB前端/负载均衡/系统容灾/系统安全/短信接入/WAP接入/3G等)、无线业务运营、无线开放平台、统计分析(用户行为分析/数据挖掘)、CP合作,联系我们:1780551083@qq.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值