我在Unix(Solaris)中有两个巨大的平面文件,每个文件大约有500-600 GB。我需要使用第一列连接并将2个文件合并到一个平面文件中,该列将是一个关键索引列。我怎么能以优化的方式做到这一点?
基本上它应该是2个平面文件之间的内部联接。尝试使用平面文件的原因是,我们有一个2个巨大的表被分成2个单独的表,并且被提取到2个平面文件中,我试图在Unix级别而不是在数据库级别加入它。
我确实使用了以下命令:
sort -n file1 > file_temp1;
sort -n file2 > file_temp2;
join -j 1 -t';' file_temp1 file_temp2 > Final
排序正常,因为第一个字段是索引列。但是当连接发生时,我在Final文件中几乎没有2%的数据。所以只是想了解我在join命令中做了什么错误?这两个文件都包含大约.2百万条记录,并且所有记录在2个文件之间匹配。如果在unix上进行的连接比在数据库级别执行的连接更好,我想要进行性能检查。抱歉,问题不完整!第一个字段是数字索引字段。我们有类似“-n”开关的东西来指示第一个字段是数字索引的连接吗?
答案 0 :(得分:0)
您应不 sort -n
,因为加入时没有相应的-n
标记。只需保留所有前导/尾随空格:
#!/bin/sh
sort -t';' -k 1 file1 > file1.srt
sort -t';' -k 1 file2 > file2.srt
join -t';' -1 1 -2 1 file1.srt file2.srt > both
#cat both