Kelompok persentil sarang oleh dua variabel

Saya memiliki tabel Hive tempat saya ingin mencari persentil ke-10, median, dan persentil ke-90 dari suatu nilai berdasarkan lokasi/hari kerja. Maket tabel ada di bawah. Bagaimana cara menulis kueri sehingga kolom tabel keluaran adalah lokasi, hari kerja, persentil ke-10, median, dan persentil ke-90 dari MyValue? (Asumsikan bahwa tabel sebenarnya memiliki banyak Lokasi berbeda dan beberapa entri per kombinasi lokasi/hari kerja)

Saya telah mencoba:

create table myschema.my_output_table as
select location, weekday,
percentile(MyValue,0.1) over location,weekday as Weekday10pctile
from myschema.my_input_table

Contoh data:

Location      Weekday       MyValue
Location_A    Monday        2.844958857
Location_A    Monday        1.22455235
Location_A    Monday        2.415189236
Location_A    Monday        2.162431558
Location_A    Tuesday       2.200264375
Location_A    Tuesday       1.218341845
Location_A    Tuesday       1.668882003
Location_A    Tuesday       0.077343061
Location_A    Wednesday     2.977162672
Location_A    Wednesday     2.059018125
Location_A    Wednesday     2.309147998
Location_A    Wednesday     1.241566476

person Ralph    schedule 24.08.2018    source sumber
comment
apa yang sudah kamu coba sejauh ini?   -  person hlagos    schedule 24.08.2018


Jawaban (1)


Gunakan fungsi percentile_approx karena nilai pada kolom adalah DOUBLE. Perhatikan bahwa nilai yang dikembalikan mungkin tidak berasal dari kumpulan data.

select location, weekday,
percentile(MyValue,0.1) over w as Weekday10pctile,
percentile(MyValue,0.9) over w as Weekday90pctile
from myschema.my_input_table
window w as (partition by location,weekday)

percentile_approx deskripsi dari dokumentasi

persentil_kira-kira(kolom GANDA, p[, B])

Mengembalikan perkiraan persentil ke-p dari kolom numerik (termasuk tipe floating point) dalam grup. Parameter B mengontrol akurasi perkiraan dengan mengorbankan memori. Nilai yang lebih tinggi menghasilkan perkiraan yang lebih baik, dan nilai defaultnya adalah 10.000. Jika jumlah nilai berbeda dalam kolom lebih kecil dari B, ini memberikan nilai persentil yang tepat.

person Vamsi Prabhala    schedule 24.08.2018