Impala / Hive Συμπλήρωση τιμές που λείπουν Παρόμοια με LOCF (τελευταία παρατήρηση μεταφέρει)

ψήφοι
0

Έχω δεδομένων χρονοσειρών σε Impala ότι σε αυτή τη μορφή.

Ένα αρχείο να δημιουργείται όταν και μόνο όταν υπάρχει μια αλλαγή, ενημερώνεται αξία αντιπροσωπεύει τα νέα δεδομένα.

---------------------------------------
| Product | Year | Week | UpdatedValue |
---------------------------------------
|A        | 2017 | 1    | 5            |
|A        | 2017 | 5    | 10           |
|A        | 2017 | 20   | 80           |
|B        | 2017 | 8    | 90           |
|...      | ...  | ...  | ...          |
---------------------------------------

Υποθέτοντας ότι το παράθυρο του χρόνου μας είναι το 2017 έτος από μια εβδομάδα σε εβδομάδα 52. Τα παραπάνω στοιχεία λέει ότι η αξία έχεις αλλάξει για το προϊόν Α κατά την πρώτη εβδομάδα να είναι 5, 5'th εβδομάδα να είναι 10 και 20η εβδομάδα να είναι 80. Θέλω να συμπληρώσετε τις απαιτούμενες τιμή, χρησιμοποιώντας την τελευταία μεταφορά παρατήρηση μπροστά τη λογική, και αν τα δεδομένα δεν ξεκινά από την πρώτη εβδομάδα, στη συνέχεια, να συμπληρώσετε τις κορυφαίες τιμές που λείπουν με την επόμενη εμφάνιση.

Αυτό πρέπει να είναι το ιδανικό προϊόν.

---------------------------------------
| Product | Year | Week | UpdatedValue |
---------------------------------------
|A        | 2017 | 1    | 5            |
|A        | 2017 | .    | 5            |
|A        | 2017 | 4    | 5            |
|A        | 2017 | 5    | 10           |
|A        | 2017 | 6    | 10           |
|A        | 2017 | .    | 10           |
|A        | 2017 | 20   | 80           |
|A        | 2017 | .    | 80           |
|A        | 2017 | 52   | 80           |
|B        | 2017 | 1    | 90           |
|B        | 2017 | .    | 90           |
|B        | 2017 | 8    | 90           |
|B        | 2017 | .    | 90           |
|B        | 2017 | 52   | 90           |
|...      | ...  | ...  | ...          |
---------------------------------------

Είναι μια εφικτή λύση Hive / Impala εκεί μπορείτε ορισμένων χρησιμοποιούν προηγμένες τους λειτουργίες analytics εάν αυτό είναι πιο εύκολο; Ωστόσο, αν μια γενική λύση SQL είναι διαθέσιμες, ότι θα είναι μεγάλη.

Δημοσιεύθηκε 27/11/2018 στις 17:33
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
1

Βήμα 1: Δημιουργήστε έναν πίνακα με τους αριθμούς.

create table if not exists tblNumbers
location 'hdfs_location' as 
select 1 as num
union all 
select 2 as num
....

Βήμα 2: Σταυρός ενταχθούν τα μοναδικά προϊόντα, χρόνο με αριθμούς και άφησε ενταχθούν στο αρχικό πίνακα για να δημιουργήσει λείπουν γραμμές για ένα προϊόν. Στη συνέχεια, χρησιμοποιήστε ένα τρέχον λογική ποσό για να δημιουργήσει ομάδες για την ομάδα διαδοχικές σειρές που λείπουν αξία, μετά από την οποία μπορείτε να χρησιμοποιήσετε το maxγια να δημιουργήσει τις τιμές για τα εξαφανισμένα σειρές από την τελευταία βρέθηκε αξίας.

select product,year,week,max(val) over(partition by product,year,grp) as new_val
from (select py.product,py.year,n.week,t.val
      ,sum(case when t.val is not null then 1 else 0 end) 
       over(partition by py.product,py.year order by n.week) as grp
      from tblNumbers n
      cross join (select distinct product,year from tbl) py
      left join tbl t on n.week = t.week and py.product = t.product and py.year = t.year
     ) t
Απαντήθηκε 27/11/2018 στις 17:43
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more