1

Hive を使用して保存され、S3 バケットが Organization_id によって分割されているイベントのテーブル A、B、C からのカウントの合計を示すレポートを生成する必要があります。

例: テーブル A – ジョン (および他の従業員) が仕事に行く毎日の記録があります テーブル B – ジョン (および他の従業員) が職場で発信または受信したすべての電話の記録があります テーブル C – 毎日の記録がありますジョン(および他の従業員)が職場で提出する経費

基本的に、先月の John (employee_id) の A、B、C のカウントの合計が必要です。3 つのテーブル A、B、または C のいずれかにレコードがある場合は、すべての日付に 1 つのレコードしかないはずです(1 つ以上のテーブルに日付のレコードがある場合は、カウントを合計します)。だから私の出力は次のとおりです。

Employee id
Employee Name 
Date
Count
123
John
02-Jan-2016
55
123
John
12-Jan-2016
88
123
John
19-Jan-2016
103

私が思いついたクエリは次のとおりです。

select  adcts.employee_name, adcts.employee_id,Total_count as event_count, adcts.event_date  
from   
       (select   coalesce(Evts.employee_id,imps.employee_id,AEvts.employee_id) as   employee_id  
        ,   coalesce(Evts.employee_name,imps.employee_name,AEvts.employee_name) as   employee_name  
        , coalesce(Evts.Event_count,0) + coalesce(Imps.Impression_count,0)   + coalesce (AEvts.Event_Count,0)as Total_Count  
        , coalesce (Evts.event_date,imps.impression_date, AEvts.event_date)   as event_date  
    from  
        (select employee_id, employee_name, count(*) as   Event_count,event_date  
         from mm_events  
         where organization_id = 100048  
         and event_date between '2016-02-01' and '2016-02-04'  
        group by employee_id, employee_name,event_date) Evts  
       full outer join  
        (select employee_id, employee_name, count(*) as Impression_count,   impression_date   
         from mm_impressions  
         where organization_id = 100048  
         and impression_date between '2016-02-01' and '2016-02-04'  
        group by employee_id, employee_name,impression_date) Imps  
        on Evts.employee_id = Imps.employee_id  
       full outer join  
        (select employee_id, employee_name, count(*) as   Event_count,event_date  
         from mm_attributed_events  
         where organization_id = 100048  
         and event_date between '2016-02-01' and '2016-02-04'  
         and event_type = 'click'  
        group by employee_id, employee_name,event_date) AEvts  
     on AEvts.employee_id=Evts.employee_id  
       ) adcts     
join  
        (select distinct c.employee_id from default.t1_meta_dmp c   
         where c.employee_dmp_enabled='inherits'  
         and c.agency_dmp_enabled = 'inherits'  
         and c.agency_status='true'  
         and c.employee_status='true'  
         and c.organization_id = 100048) cc  
on adcts.employee_id=cc.employee_id  
order by adcts.employee_id asc  

2 つの質問があります。

1. 適切なクエリがありますか? 2. 「完全外部結合」を使用しているため、同じ日付に対して複数のエントリが取得されます。誰かが結果を達成するためのより良い方法を提案できますか? 別のクエリかもしれません

4

1 に答える 1