更快地比较来自 S3 存储桶的一天的数据

Comparing one day worth of data from S3 buckets faster

考虑下面的 2 个数据流

1. Front End Box ----> S3 Bucket-1

2. Front End Box ----> Kafka --> Storm ---> S3 Bucket-2

盒子中的日志正在传输到 S3 存储桶。要求是用流2替换流1。

现在需要在 Bucket-1Bucket-2 之间验证数据以保证可以使用流 2。

尝试了以下技术选项:

1. Python : boto3 Apis
2. Qubole

两者都适用于有限的数据集,qubole 比 python 脚本更具可扩展性。但仍然需要很长时间才能完成(从未完成,不得不在 运行 过夜后杀死)。我们在这里查看 5 亿个条目。

查询

SELECT
    count(*)
FROM
    TableA LEFT OUTER JOIN TableB
        ON TableA.id = TableB.id
WHERE
    TableB.id IS NULL
    AND TableA.id IS NOT NULL

问题

关于工具的任何建议,以及更快实现此目标的方法?

有什么方法可以避免加入吗?

终于可以避免加入了。以下解决方案工作正常

select sum_cat, count(*)
FROM
(
   select id, sum(category) as sum_cat 
   from 
   (
       select distinct id, 1 as category
       from Table-1

       UNION ALL 

       select distinct id, 1 as category
       from Table-2 

       UNION ALL 

       select distinct id, 2 as category
       from Table-3

       UNION ALL 

       select distinct id, 2 as category
       from Table-4

  )all_ids
   group by log_id
)a
 group by sum_cat;

解释

  1. Table-1Table-2的数据与Table-3Table-4
  2. 的数据进行数据比较
  3. 所以我们从这组表中分配一个category给id
  4. 集合 A 中的所有 ID 将具有 category = 1,集合 B 记录具有 category = 2
  5. 现在我们对类别值求和并按 id 分组。因此,当两个集合中都存在 id 时,它将具有值 3。仅存在于集合 A 中的 id 将具有值 1,这是缺少记录。