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