Сравнение данных за один день из S3-контейнеров быстрее

Рассмотрим 2 потока данных ниже

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

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

Логи из ящиков передаются в ведра S3. Требование заменить поток 1 потоком 2.

Теперь данные должны быть проверены между Bucket-1 а также Bucket-2 чтобы гарантировать, что поток 2 может быть использован.

Были опробованы следующие технологические варианты:

1. Python : boto3 Apis
2. Qubole

Оба работают на ограниченном наборе данных, qubole более масштабируем, чем скрипт Python. Но все же это занимает очень много времени, чтобы сделать это (никогда не закончил, пришлось убить после запуска в течение ночи). Мы смотрим на полмиллиарда записей здесь.

запрос

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

Вопрос

Любое предложение для инструментов, способы достичь этого быстрее?

Есть ли способы избежать объединения?

1 ответ

Решение

Наконец-то удалось избежать объединения. Следующее решение работает отлично

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 идентифицировать из этого набора таблиц
  3. Все идентификаторы из набора А будут иметь category = 1 и установить B записи имеют category = 2
  4. Теперь мы суммируем значения категорий и группируем по идентификаторам. Поэтому, когда идентификатор присутствует в обоих наборах, он будет иметь значение 3. Идентификаторы, присутствующие только в наборе А, будут иметь значение 1, то есть отсутствующие записи.
Другие вопросы по тегам