事实表:
Id Year Month countryId Sales
1 1999 1 1 3000
2 1999 2 1 2300
3 2000 3 2 3999
4 2000 4 3 2939
维度表:
Id country province
1 US LA
2 US CA
3 US GA
4 EN LN
我像这样使用 Guava 表:
Table<Integer, String, Object> table = Tables.newCustomTable(
Maps.<Integer, Map<String, Object>> newLinkedHashMap(),
new Supplier<Map<String, Object>>() {
public Map<String, Object> get() {
return Maps.newLinkedHashMap();
}
});
table.put(1, "Year", 1999);
table.put(1, "Month", 1);
table.put(1, "countyId", 1);
table.put(1, "Sales", 3000);
// ...... etc
table1.put(1, "county", "US");
table1.put(1, "provice", 1999);
// ......
我想实现一个 LEFT JOIN
,例如:
1 1999 1 1 3000 US LA
2 1999 2 1 2300 US LA
3 2000 3 2 3999 US CA
4 2000 4 3 2939 EN LN
我该怎么办?
最佳答案
Guava 的 Table
不应该像任何 SQL 的表一样使用,因为它是一个集合。 SQL 的表被设计为可索引、可排序、可过滤等。Guava 的 Table
只有其中的一小部分,而且只是间接的,关节不是它们的一部分(除非你玩转换)。
你需要做的是拥有你的两个表并循环遍历 table
的元素并在 table1
中找到相应的映射。
在你的情况下,我相信你最好用 List
代替 table
和 Guava Table
代替 table1
。循环遍历列表并在获取元素时创建最终对象。
关于java - 如何使用 Guava 连接两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14729906/