我需要查询table1查找所有订单并创建日期(键是订单号和日期))。
在表2中(关键是订单号和日期)检查订单是否存在日期。
为此,我正在扫描表1,并检查每个记录是否存在于表2中。更好的方法是执行此操作
答案 0 :(得分:0)
在这两种表的密钥相同的情况下,有一个表存储表1和表2中的数据是有意义的。这样,您可以对数据进行单次扫描,如果两个标准都存在数据,请立即知道。
更重要的是,如果您想在MapReduce中使用此数据,您只需扫描该单个表。如果您只想获取相关行,则可以在“扫描”上定义过滤器。例如,在表2中根本不填充行的情况下,您只需使用ColumnPrefixFilter
但是,如果您确实需要将这些数据分别保存在2个表中,则可以预先拆分两个表的相同区域边界的表 - 这在您执行目标查询时会很有帮助 - 当表2中存在行时,加载表1中的所有行。本质上,这将是一个映射端连接。您可以在MapReduce作业中定义多个输入,并且由于区域边界相同,因此拆分将使每个映射器具有来自两个表的相应行。您可能需要为此实现自己的MultipleInput格式(最近在0.96中引入的MultiTableInputFormat类似乎没有执行该地图侧连接)