2017-04-25 2 views
0

Considérons deux flux de données ci-dessousEn comparant une valeur de jour des données de seaux S3 plus rapide

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

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

Les journaux des boîtes sont transférées dans des seaux S3. L'exigence est de remplacer le flux 1 par le flux 2.

Maintenant, les données doivent être validées entre Bucket-1 et Bucket-2 pour garantir que le flux 2 peut être utilisé.

Les options suivantes technologiques ont été essayées:

1. Python : boto3 Apis 
2. Qubole 

deux travaillent sur un ensemble limité de données, qubole est plus évolutif que script python. Mais il faut encore beaucoup de temps pour le faire (jamais fini, a dû tuer après avoir couru pendant la nuit). Nous examinons un demi-milliard d'entrées ici.

Recherche

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

Question

Toute suggestion pour les outils, les moyens d'y parvenir plus rapidement?

Y a-t-il des moyens d'éviter la jointure?

+1

Où hébergez-vous votre «Front End Box»? Si vous êtes sur AWS, vous pouvez regarder AWS Lamda. –

+0

Oui c'est AWS. Jetez un coup d'œil à Lamda – Confused

+0

Vous pouvez essayer de consigner des éléments à l'aide d'AWS CloudWatch, puis exécuter votre validation dans AWS Lambda et créer des fichiers temporaires que vous pouvez déplacer vers S3 avec 'python'. –

Répondre

0

Enfin a été en mesure d'éviter la jointure. solution suivante fonctionne très bien

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; 

Explication

  1. La comparaison des données à faire avec les données de Table-1 et Table-2 avec celle Table-3 et Table-4
  2. Nous assignent un category à id à partir de cet ensemble de tables
  3. Tous les identifiants de l'ensemble A auront category = 1 et Les enregistrements de l'ensemble B ont category = 2
  4. Maintenant, nous additionnons les valeurs de catégorie et les ID de groupe. Donc, lorsque id est présent dans les deux ensembles, il aura la valeur 3. Les identifiants présents seulement dans l'ensemble A auront la valeur 1, qui sont des enregistrements manquants.