这是 Hive 中的一张表 - 它包含有关我们正在购买的物品的信息。
CREATE EXTERNAL TABLE IF NOT EXISTS Table1
(
UID BIGINT,
ITEMS_PURCHASED ARRAY<STRUCT<PRODUCT_ID: BIGINT,TIMESTAMPS:STRING>>
)
这就是上表中的数据——
1015826235 [{"product_id":220003038067,"timestamps":"1340321132000"},{"product_id":300003861266,"timestamps":"1340271857000"},{"product_id":140002997245,"timestamps":"1339694926000"},{"product_id":200002448035,"timestamps":"1339172659000"},{"product_id":260003553381,"timestamps":"1339072514000"}]
这是 Hive 中的第二个表 - 它还包含有关我们正在购买的项目的信息。
CREATE EXTERNAL TABLE IF NOT EXISTS Table2
(
ITEM_ID BIGINT,
CREATED_TIME STRING,
BUYER_ID BIGINT
)
这是上面第二个表中的数据
220003038067 2012-06-21 1015826235
300003861266 2012-06-21 1015826235
140002997245 2012-06-14 1015826235
200002448035 2012-06-08 1015826235
260003553381 2012-06-07 1015826235
问题陈述 - 我们需要根据 UID( 和 BUYER_ID) 比较上述两个表。作为一个表(表 1)中的 UID 和第二个表(表 2)中的 BUYER_ID,它们都是相同的。所以我需要看看 UID 和 BUYER_ID 是否匹配,然后 Table1 表中的 ITEMS_PURCHASED 应该与 Table2 表中的 ITEM_ID 和 CREATED_TIME 相同,如果它们(意味着 ITEMS_PURCHASED 和 ITEM_ID,CREATED_TIME)不一样,那么我需要做点什么。我可以生成一些报告,说明多少百分比数据是准确的,多少是不准确的。
所以只是为了更清楚-
ITEMS_PURCHASED 是 Table1 表中的 Struct 数组,它包含两个东西 PRODUCT_ID 和 TIMESTAMPS。如果 UID 和 BUYER_ID 匹配,则 Table1 中的 PRODUCT_ID 应与 Table2 中的 ITEM_ID 匹配,Table1 中的 TIMESTAMPS 应与 Table2 中的 CREATED_TIME 匹配。
还有一件事,这些表中有数百万个数据。我已将其减少到只有一条记录以简化问题。
我想我需要为此写一些 MapReduce 工作。这是我第一次使用 Hive、Hadoop 和 Map Reduce。所以这就是我面临很多问题的原因。
我在想两个解决方案-
1) 通过比较用户 ID 和购买者 ID 来检查数百万条数据
2)或采样一些UID和buyer_id然后比较数据。
3)还有其他方法吗?
任何建议将不胜感激