2017-04-25 7 views
0

2つのデータを考慮し、ボックスからログがS3バケットに転送されているS3バケットからのデータの一日の価値を比較する高速

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

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

下方に流れます。フロー1をフロー2に置き換える必要があります。

フロー2を使用できることを保証するために、データはBucket-1Bucket-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

「フロントエンドボックス」はどこにホストしていますか?あなたがAWSにいるなら、AWS Lamdaを調べることができます。 –

+0

はい、AWSです。 Lamdaをご覧ください – Confused

+0

AWS CloudWatchを使用してログを記録し、AWS Lambdaで検証を実行し、一時ファイルを作成して、 'python'でS3に移動することができます。 –

答えて

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-3のそれとTable-1Table-2からのデータで行われる比較と
  2. Table-4だから我々はIDにcategoryを割り当てる正常に動作しますこれらのテーブルのセットから
  3. セットAのすべてのidsはcategory = 1となります。集合Bレコードはcategory = 2
  4. となりました。ここでは、カテゴリ値とグループIDを合計しています。したがって、idが両方のセットに存在する場合、値は3になります。セットAにのみ存在するIDは値1を持ち、レコードがありません。
関連する問題