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