0

考虑以下 2 个数据流

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

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

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

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

尝试了以下技术选项:

1. Python : boto3 Apis
2. Qubole

两者都在有限的数据集上工作,qubole 比 python 脚本更具可扩展性。但是仍然需要很长时间才能完成(从未完成,必须在一夜之间运行后杀死)。我们正在这里查看 50 亿个条目。

询问

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

问题

对工具有什么建议,如何更快地实现这一目标?

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

4

1 回答 1

0

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

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-1数据与来自和Table-2的数据进行Table-3比较Table-4
  2. category所以我们从这组表中分配一个到 id
  3. 集合 A 中的所有 id 将具有category = 1并且集合 B 记录具有category = 2
  4. 现在我们对类别值求和并按 id 分组。因此,当两个集合中都存在 id 时,它将具有值 3。仅存在于集合 A 中的 id 将具有值 1,即缺失记录。
于 2017-05-02T17:55:56.747 回答