sayıları sayımları için A, B ve C tabloları olan bir rapor oluşturmam gerekir. Hive ve benim S3 kova kullanarak saklanan eg için Organization_idBirden çok tablodan Kayıt Sayısı Toplamını bulmak için kovan sorgularımı nasıl en iyi duruma getirebilirim
tarafından bölümlenmiş edilmiştir: Tablo A - John (ve diğer çalışanlar) Tablo B işe gider her gün için bir kayıt Has - her çağrı için bir rekor Has John (ve diğer çalışanlar) işyerinde iş yapar veya alır Tablo C - John'un (ve diğer çalışanların) işyerinde gönderdiği her masraf için bir kayıt vardır
Temel olarak, son bir ay içinde John (employee_id) için A, B ve C sayımlarının toplamını istiyorum. A, B veya C tablolarından birinde bir kayıt varsa her tarih için sadece bir kayıt olmalıdır (ve tablolardan birinde veya daha fazlasında bir tarih için bir kayıt varsa sayıları toplayın). Yani benim Çıktı: Ben ile geldi
Employee id
Employee Name
Date
Count
123
John
02-Jan-2016
55
123
John
12-Jan-2016
88
123
John
19-Jan-2016
103
sorgusu:
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
ben 2 soru var:
1. Ben doğru sorgu var? 2. “Tam dış birleştirme” kullanıyorum çünkü aynı tarih için birden fazla girdi alıyorum. Birisi sonuca ulaşmak için daha iyi bir yol önerebilir mi? Farklı sorgu belki