更快地比较来自 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-1
和 Bucket-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;
解释
- 将
Table-1
和Table-2
的数据与Table-3
和Table-4
的数据进行数据比较
- 所以我们从这组表中分配一个
category
给id
- 集合 A 中的所有 ID 将具有
category = 1
,集合 B 记录具有 category = 2
- 现在我们对类别值求和并按 id 分组。因此,当两个集合中都存在 id 时,它将具有值 3。仅存在于集合 A 中的 id 将具有值 1,这是缺少记录。
考虑下面的 2 个数据流
1. Front End Box ----> S3 Bucket-1
2. Front End Box ----> Kafka --> Storm ---> S3 Bucket-2
盒子中的日志正在传输到 S3 存储桶。要求是用流2替换流1。
现在需要在 Bucket-1
和 Bucket-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;
解释
- 将
Table-1
和Table-2
的数据与Table-3
和Table-4
的数据进行数据比较
- 所以我们从这组表中分配一个
category
给id - 集合 A 中的所有 ID 将具有
category = 1
,集合 B 记录具有category = 2
- 现在我们对类别值求和并按 id 分组。因此,当两个集合中都存在 id 时,它将具有值 3。仅存在于集合 A 中的 id 将具有值 1,这是缺少记录。