Wpis z mikrobloga

@inny_89: co do scd to co masz dokładnie na myśli? Bo aż musiałem sprawdzić, człowiek pisze w sparku i nie wie co robi ( ͡° ͜ʖ ͡°)
Generalnie to kod powinien być reużywalny i dane wyjściowe powinny móc być odtworzone za pomocą transformerów i danych wejściowych. Spark pozwala nadpisywać dynamicznie popartycjonowane dane, tj. nie musisz całego zbioru za każdym razem przeliczać, jeśli masz dane, które np. musisz
  • Odpowiedz
via Android
  • 0
@Ark00 ekstra! Dziękuję!

Właśnie załóżmy, że mam dane ułożone w przedziałach czasowych z wyszczególnionym rokiem oraz klientem. Unikalnych lat jak i klientów nie jest dużo: 7 lat dla 7 różnych klientów.
Mam właśnie problem, że chciałbym napisać dane tylko dla wybranego klienta i dla wybranego roku.
Mógłbym więc wykorzystać mechanizm, o którym wspomniałeś: "Spark pozwala nadpisywać dynamicznie popartycjonowane dane".
Mógłbyś mnie trochę bardziej naprowadzić na temat? Np do konkretnej strony w dokumentacji?
  • Odpowiedz
@inny_89: Z doświadczenia to całe zasilanie powinno się odbywać w dwóch krokach Source - Extract, Extract - Stage. Oczywiście mówię o hurtowni zasilanej raz na dobę nocną porą.

1. Source - Extract - truncate docelowych tabel i zasilenie ze źródła. Tak jest najszybciej. Nawet jak masz tabele do 100 mln rekordów. Z produkcji zasilamy dane tak szybko jak to jest możliwe.

2. Extract - Stage - zasilenie przyrostowe. I tu już
  • Odpowiedz
@inny_89: https://stackoverflow.com/questions/38487667/overwrite-specific-partitions-in-spark-dataframe-write-method

Ustawia się to jedną linijką w configu:

spark.conf.set("spark.sql.sources.partitionOverwriteMode","dynamic")
Wybacz też wysoki poziom abstrakcji przy opisywaniu założeń. :)


@inny_89: spoko, generalnie nie zajmuję się hurtowniami jako takimi i nie mam generalnie zbyt dużej wiedzy o pracy z nimi, za to coś tam technicznego ze sparka mogę pomóc ( ͡° ͜ʖ ͡°)
  • Odpowiedz