Unix 在Solaris中使用索引列(第一个字段)合并(加入)2个大型平面文件
我在Unix(Solaris)中有两个巨大的平面文件,每个文件大约有500-600GB。我需要使用第一列,也就是键索引列,将这两个文件合并成一个平面文件。我怎样才能以优化的方式完成它 基本上,它应该是两个平面文件之间的内部连接。尝试使用平面文件的原因是,我们有一个2个巨大的表,它被拆分为2个单独的表,并被提取为2个平面文件,我尝试在Unix级别而不是数据库级别连接它 我确实使用了以下命令:Unix 在Solaris中使用索引列(第一个字段)合并(加入)2个大型平面文件,unix,solaris,Unix,Solaris,我在Unix(Solaris)中有两个巨大的平面文件,每个文件大约有500-600GB。我需要使用第一列,也就是键索引列,将这两个文件合并成一个平面文件。我怎样才能以优化的方式完成它 基本上,它应该是两个平面文件之间的内部连接。尝试使用平面文件的原因是,我们有一个2个巨大的表,它被拆分为2个单独的表,并被提取为2个平面文件,我尝试在Unix级别而不是数据库级别连接它 我确实使用了以下命令: sort -n file1 > file_temp1; sort -n file2 > fil
sort -n file1 > file_temp1;
sort -n file2 > file_temp2;
join -j 1 -t';' file_temp1 file_temp2 > Final
它与sort配合使用,因为第一个字段是索引列。然而,当连接发生时,我在最终文件中几乎没有得到2%的数据。所以我只是想了解我在join命令中犯了什么错误?这两个文件都包含大约120万条记录,并且所有记录都在这两个文件之间匹配。我想进行一次性能检查,看看在unix上进行的连接是否比在数据库级别执行的连接更好。对不起,问题不完整!第一个字段是数字索引字段。我们是否有一个类似于“-n”的开关来指示联接的第一个字段是数字索引?您应该而不是
排序-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
优化方法?不要将平面文件用于TB级的数据。如果有那么多的数据,将数据加载到数据库中以将数据合并到单个排序的输出中会快得多。数据库设计用于处理如此多的数据。诸如
awk
或sort
之类的命令行工具实际上不是。OP仅说明第一列是索引,因此cat file1 file2>newfile
是一种合并它们的方法。对于其他要求,他应该编辑他的问题。对不起,是的,问题不完整,添加了更多信息。非常感谢您的帮助!什么样的加入?(左/右/满…)两个表中是否都有键?两个表中的所有键都是唯一的吗?这只是一个简单的内部联接,是的,所有键都存在于两个文件中,所有键都是唯一的。这两个文件都有大约120万条记录,记录数完全相同,所有的键都已排序。我刚刚试过。谢谢,是的,一个错误是因为join没有-n,所以不应该在排序时使用-n。我今天早上确实试过了。但实际上仍然没有得到100%的数据。当然,我这里有所有的钥匙,因为这两张桌子我已经加入了几天,100%匹配。所以我无法理解我到底遗漏了什么。很可能是两个文件之间的空白差异。甚至键中的前导零。是的,我一直在分析文件集,没有前导零或空格。但因为我觉得在这种情况下肯定会有一些问题。我接受你的回答。谢谢你的时间!!!