{"id":87609,"date":"2020-07-09T01:42:11","date_gmt":"2020-07-08T23:42:11","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/kogda-u-vas-sberovskie-masshtaby-ispolzovanie-ab-initio-pri-rabote-s-hive-i-greenplum"},"modified":"2020-07-09T01:42:11","modified_gmt":"2020-07-08T23:42:11","slug":"kogda-u-vas-sberovskie-masshtaby-ispolzovanie-ab-initio-pri-rabote-s-hive-i-greenplum","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/kogda-u-vas-sberovskie-masshtaby-ispolzovanie-ab-initio-pri-rabote-s-hive-i-greenplum","title":{"rendered":"Kiedy masz skal\u0119 podobn\u0105 do Sberbanku. U\u017cycie Ab Initio z Hive i GreenPlum","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Kilka czasu temu pojawi\u0142 si\u0119 przed nami problem wyboru narz\u0119dzia ETL do pracy z Big Data. Wcze\u015bniej u\u017cywane rozwi\u0105zanie Informatica BDM nie spe\u0142nia\u0142o naszych oczekiwa\u0144 ze wzgl\u0119du na ograniczon\u0105 funkcjonalno\u015b\u0107. Jego wykorzystanie ogranicza\u0142o si\u0119 do frameworka do uruchamiania polece\u0144 spark-submit. Na rynku nie by\u0142o zbyt wielu odpowiednik\u00f3w, kt\u00f3re mog\u0142yby pracowa\u0107 z tak du\u017c\u0105 ilo\u015bci\u0105 danych, z jak\u0105 mamy do czynienia na co dzie\u0144. Ostatecznie wybrali\u015bmy Ab Initio. Podczas pilota\u017cowych prezentacji produkt pokaza\u0142 bardzo wysok\u0105 szybko\u015b\u0107 przetwarzania danych. Informacji o Ab Initio w j\u0119zyku rosyjskim jest prawie brak, dlatego zdecydowali\u015bmy si\u0119 podzieli\u0107 naszym do\u015bwiadczeniem na Habrze.<\/p>\n<p>Ab Initio oferuje wiele klasycznych i nietypowych transformacji, kt\u00f3rych kod mo\u017ce by\u0107 rozszerzany za pomoc\u0105 w\u0142asnego j\u0119zyka PDL. Dla ma\u0142ych firm to pot\u0119\u017cne narz\u0119dzie mo\u017ce by\u0107 prawdopodobnie zbyt rozbudowane, a wi\u0119kszo\u015b\u0107 jego mo\u017cliwo\u015bci mo\u017ce okaza\u0107 si\u0119 kosztowna i niewykorzystana. Ale je\u015bli twoje potrzeby zbli\u017caj\u0105 si\u0119 do tych Sberbanku, Ab Initio mo\u017ce by\u0107 interesuj\u0105cym rozwi\u0105zaniem. <\/p>\n<p>Pomaga biznesowi globalnie gromadzi\u0107 wiedz\u0119 i rozwija\u0107 ekosystem, a programi\u015bcie - rozwija\u0107 swoje umiej\u0119tno\u015bci w ETL oraz poszerza\u0107 wiedz\u0119 w shell, oferuj\u0105c mo\u017cliwo\u015b\u0107 nauki j\u0119zyka PDL, wizualizuj\u0105c procesy \u0142adowania, u\u0142atwiaj\u0105c rozw\u00f3j dzi\u0119ki bogactwu komponent\u00f3w funkcjonalnych.<\/p>\n<p>W tym po\u015bcie opowiem o mo\u017cliwo\u015bciach Ab Initio oraz przedstawi\u0119 por\u00f3wnawcze charakterystyki jego pracy z Hive i GreenPlum.<\/p>\n<ul>\n<li>Opis frameworka MDW oraz prace nad jego dostosowaniem do GreenPlum<\/li>\n<li>Por\u00f3wnawcze charakterystyki wydajno\u015bci Ab Initio w pracy z Hive i GreenPlum<\/li>\n<li>Praca Ab Initio z GreenPlum w trybie Near Real Time<\/li>\n<\/ul>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nFunkcjonalno\u015b\u0107 tego produktu jest bardzo szeroka i wymaga sporo czasu na jego opanowanie. Jednak przy odpowiednich umiej\u0119tno\u015bciach pracy i w\u0142a\u015bciwych ustawieniach wydajno\u015bci wyniki przetwarzania danych s\u0105 imponuj\u0105ce. U\u017cycie Ab Initio mo\u017ce dostarczy\u0107 programi\u015bcie ciekawego do\u015bwiadczenia. To nowe spojrzenie na rozw\u00f3j ETL, hybryda mi\u0119dzy wizualnym \u015brodowiskiem a tworzeniem \u0142adowa\u0144 w j\u0119zyku przypominaj\u0105cym skrypt.<\/p>\n<p>Biznes rozwija swoje ekosystemy, a to narz\u0119dzie wydaje si\u0119 by\u0107 bardziej przydatne ni\u017c kiedykolwiek. Dzi\u0119ki Ab Initio mo\u017cna gromadzi\u0107 wiedz\u0119 o bie\u017c\u0105cym biznesie i wykorzystywa\u0107 j\u0105 do rozwijania istniej\u0105cych oraz otwierania nowych przedsi\u0119wzi\u0119\u0107. Alternatywami dla Ab Initio s\u0105 wizualne \u015brodowiska programistyczne, takie jak Informatica BDM oraz niewizualne \u015brodowiska, takie jak Apache Spark.<\/p>\n<h3>Opis Ab Initio<\/h3>\n<p>\nAb Initio, podobnie jak inne narz\u0119dzia ETL, jest zbiorem produkt\u00f3w.<\/p>\n<p><img decoding=\"async\" alt=\"Kiedy masz skal\u0119 podobn\u0105 do Sberbanku. U\u017cycie Ab Initio z Hive i GreenPlum\" src=\"\/wp-content\/uploads\/2020\/07\/c467fe1e8455805075856967b577f8b7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAb Initio GDE (Graphical Development Environment) to \u015brodowisko dla programisty, w kt\u00f3rym ustawia on transformacje danych i \u0142\u0105czy je w strumieniach danych w postaci strza\u0142ek. Taki zestaw transformacji nazywany jest grafem:<\/p>\n<p><img decoding=\"async\" alt=\"Kiedy masz skal\u0119 podobn\u0105 do Sberbanku. U\u017cycie Ab Initio z Hive i GreenPlum\" src=\"\/wp-content\/uploads\/2020\/07\/7b0c19a82ae8b461a9bd85117555e106.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWej\u015bciowe i wyj\u015bciowe po\u0142\u0105czenia komponent\u00f3w funkcjonalnych to porty i zawieraj\u0105 pola, kt\u00f3re s\u0105 obliczane wewn\u0105trz transformacji. Kilka graf\u00f3w, po\u0142\u0105czonych strumieniami w postaci strza\u0142ek w kolejno\u015bci ich wykonywania, nazywa si\u0119 planem.<\/p>\n<p>Dost\u0119pnych jest kilka st\u00f3w komponent\u00f3w funkcjonalnych, co stanowi znaczn\u0105 liczb\u0119. Wiele z nich jest w\u0105sko wyspecjalizowanych. Mo\u017cliwo\u015bci klasycznych transformacji w Ab Initio s\u0105 szersze ni\u017c w innych narz\u0119dziach ETL. Na przyk\u0142ad Join ma kilka wyj\u015b\u0107. Opr\u00f3cz wyniku po\u0142\u0105czenia zestaw\u00f3w danych mo\u017cna uzyska\u0107 na wyj\u015bciu rekordy zestaw\u00f3w danych wej\u015bciowych, dla kt\u00f3rych nie uda\u0142o si\u0119 po\u0142\u0105czy\u0107. Mo\u017cna r\u00f3wnie\u017c uzyska\u0107 rejects, errors i log pracy transformacji, kt\u00f3ry mo\u017ce by\u0107 odczytany jako plik tekstowy i przetwarzany przez inne transformacje:<\/p>\n<p><img decoding=\"async\" alt=\"Kiedy masz skal\u0119 podobn\u0105 do Sberbanku. U\u017cycie Ab Initio z Hive i GreenPlum\" src=\"\/wp-content\/uploads\/2020\/07\/c7d70879daad364a3d4aa41a0a1b738d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLub, na przyk\u0142ad, mo\u017cna zmaterializowa\u0107 odbiornik danych w postaci tabeli i w tym samym grafie odczyta\u0107 z niego dane.<\/p>\n<p>Istniej\u0105 oryginalne transformacje. Na przyk\u0142ad, transformacja Scan ma funkcjonalno\u015b\u0107 podobn\u0105 do funkcji analitycznych. Istniej\u0105 transformacje z m\u00f3wi\u0105cymi nazwami: Create Data, Read Excel, Normalize, Sort within Groups, Run Program, Run SQL, Join with DB i inne. Grafy mog\u0105 korzysta\u0107 z parametr\u00f3w czasu wykonania, w tym mo\u017cliwe jest przekazywanie parametr\u00f3w z systemu operacyjnego lub do systemu operacyjnego. Pliki z gotowym zestawem przekazywanych do grafu parametr\u00f3w nazywane s\u0105 parameter sets (psets).<\/p>\n<p>Jak przysta\u0142o, Ab Initio GDE ma swoje repozytorium, nazywane EME (Enterprise Meta Environment). Programi\u015bci maj\u0105 mo\u017cliwo\u015b\u0107 pracy z lokalnymi wersjami kodu i dokonania check in swoich opracowa\u0144 w centralnym repozytorium.<\/p>\n<p>W trakcie lub po wykonaniu grafu istnieje mo\u017cliwo\u015b\u0107 klikni\u0119cia w dowolne po\u0142\u0105czenie transformacji strumienia i przejrzenia danych, kt\u00f3re przesz\u0142y mi\u0119dzy tymi transformacjami:<\/p>\n<p><img decoding=\"async\" alt=\"Kiedy masz skal\u0119 podobn\u0105 do Sberbanku. U\u017cycie Ab Initio z Hive i GreenPlum\" src=\"\/wp-content\/uploads\/2020\/07\/a674507b2cd25b980cb862bda2e10cbe.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMo\u017cna r\u00f3wnie\u017c klikn\u0105\u0107 w dowolny strumie\u0144 i zobaczy\u0107 szczeg\u00f3\u0142y \u015bledzenia - ile r\u00f3wnoleg\u0142ych transformacji by\u0142o realizowanych, ile wierszy i bajt\u00f3w za\u0142adowano w kt\u00f3rej z r\u00f3wnoleg\u0142ych operacji:<\/p>\n<p><img decoding=\"async\" alt=\"Kiedy masz skal\u0119 podobn\u0105 do Sberbanku. U\u017cycie Ab Initio z Hive i GreenPlum\" src=\"\/wp-content\/uploads\/2020\/07\/6188d17bebe756ee59e6956f9a40ec43.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIstnieje mo\u017cliwo\u015b\u0107 podzielenia wykonania grafu na fazy i oznaczenia, kt\u00f3re transformacje powinny by\u0107 wykonywane w pierwszej kolejno\u015bci (w zerowej fazie), nast\u0119pne w pierwszej fazie, nast\u0119pne w drugiej fazie itd.<\/p>\n<p>Ka\u017cda transformacja ma mo\u017cliwo\u015b\u0107 wyboru tzw. uk\u0142adu (gdzie b\u0119dzie wykonywana): bez r\u00f3wnoleg\u0142o\u015bci lub w r\u00f3wnoleg\u0142ych strumieniach, kt\u00f3rej liczb\u0119 mo\u017cna okre\u015bli\u0107. Ponadto pliki tymczasowe, kt\u00f3re Ab Initio tworzy podczas pracy transformacji, mo\u017cna umieszcza\u0107 zar\u00f3wno w systemie plik\u00f3w <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/pl\/server\/dts-los-angeles\/\"   title=\"serwera\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"3635\">serwera<\/a>, jak i w HDFS.<\/p>\n<p>W ka\u017cdej transformacji na bazie szablonu domy\u015blnego mo\u017cna stworzy\u0107 w\u0142asny skrypt w j\u0119zyku PDL, kt\u00f3ry przypomina nieco shell. <\/p>\n<p>Dzi\u0119ki j\u0119zykowi PDL mo\u017cna rozszerza\u0107 funkcjonalno\u015b\u0107 transformacji i, w szczeg\u00f3lno\u015bci, dynamicznie (w czasie wykonania) generowa\u0107 dowolne fragmenty kodu w zale\u017cno\u015bci od parametr\u00f3w wykonania.<\/p>\n<p>W Ab Initio dobrze rozwini\u0119ta jest integracja z systemem operacyjnym przez shell. W Sberbanku u\u017cywa si\u0119 konkretnego linux ksh. Mo\u017cna wymienia\u0107 si\u0119 ze shell zmiennymi i u\u017cywa\u0107 ich jako parametr\u00f3w graf\u00f3w. Mo\u017cna z shell wywo\u0142ywa\u0107 wykonanie graf\u00f3w Ab Initio i zarz\u0105dza\u0107 Ab Initio.<\/p>\n<p>Opr\u00f3cz Ab Initio GDE dostarczanych jest wiele innych produkt\u00f3w. Jest w\u0142asny system Co&gt;Operation, kt\u00f3ry aspiruje do nazwy systemu operacyjnego. Istnieje Control&gt;Center, w kt\u00f3rym mo\u017cna ustawia\u0107 harmonogramy i monitorowa\u0107 strumienie za\u0142adunku. S\u0105 r\u00f3wnie\u017c produkty do realizacji rozwoju na bardziej prymitywnym poziomie, ni\u017c pozwala na to Ab Initio GDE.<\/p>\n<h3>Opis frameworka MDW oraz prace nad jego dostosowaniem do GreenPlum<\/h3>\n<p>\nWraz ze swoimi produktami dostawca dostarcza tak\u017ce produkt MDW (Metadata Driven Warehouse), kt\u00f3ry stanowi konfigurator graf\u00f3w, przeznaczony do wspomagania w typowych zadaniach zwi\u0105zanych z zape\u0142nianiem hurtowni danych lub vault\u00f3w danych.<\/p>\n<p>Zawiera on parsery metadanych dostosowane do projektu oraz gotowe generatory kodu 'z pude\u0142ka'.<\/p>\n<p><img decoding=\"async\" alt=\"Kiedy masz skal\u0119 podobn\u0105 do Sberbanku. U\u017cycie Ab Initio z Hive i GreenPlum\" src=\"\/wp-content\/uploads\/2020\/07\/0842ecb9550f369875103ccb23cdf121.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nMDW otrzymuje model danych, plik konfiguracyjny do ustawienia po\u0142\u0105czenia z baz\u0105 danych (Oracle, Teradata lub Hive) oraz inne ustawienia. Cz\u0119\u015b\u0107 specyficzna dla projektu, na przyk\u0142ad, wdra\u017ca model w bazie danych. Standardowa cz\u0119\u015b\u0107 produktu generuje grafy oraz pliki konfiguracyjne do nich podczas \u0142adowania danych do tabel modelu. Przy tym tworzone s\u0105 grafy (i psety) dla kilku tryb\u00f3w inicjalizacyjnych i inkrementalnych aktualizacji jednostek.<\/p>\n<p>W przypadku Hive i RDBMS generowane s\u0105 r\u00f3\u017cne grafy dla inicjalizacji i inkrementalnej aktualizacji danych.<\/p>\n<p>W przypadku Hive otrzymane dane delta s\u0105 \u0142\u0105czone za pomoc\u0105 Ab Initio Join z danymi, kt\u00f3re znajdowa\u0142y si\u0119 w tabeli przed aktualizacj\u0105. \u0141adowarki danych w MDW (zar\u00f3wno w Hive, jak i RDBMS) nie tylko wstawiaj\u0105 nowe dane z delty, ale tak\u017ce zamykaj\u0105 okresy wa\u017cno\u015bci danych, dla kt\u00f3rych delta zosta\u0142a przes\u0142ana. Ponadto, nale\u017cy ponownie zapisa\u0107 niezmienion\u0105 cz\u0119\u015b\u0107 danych. Tak trzeba robi\u0107, poniewa\u017c w Hive nie ma operacji delete ani update.<\/p>\n<p><img decoding=\"async\" alt=\"Kiedy masz skal\u0119 podobn\u0105 do Sberbanku. U\u017cycie Ab Initio z Hive i GreenPlum\" src=\"\/wp-content\/uploads\/2020\/07\/36b6dd7c4d45727ad7d7aa1183fdd5fd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nW przypadku RDBMS grafy dla inkrementalnej aktualizacji danych wygl\u0105daj\u0105 bardziej optymalnie, poniewa\u017c RDBMS maj\u0105 rzeczywiste mo\u017cliwo\u015bci aktualizacji.<\/p>\n<p><img decoding=\"async\" alt=\"Kiedy masz skal\u0119 podobn\u0105 do Sberbanku. U\u017cycie Ab Initio z Hive i GreenPlum\" src=\"\/wp-content\/uploads\/2020\/07\/b62ac222bed575a60b632b13e012f603.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOtrzymana delta jest \u0142adowana do tymczasowej tabeli w bazie danych. Nast\u0119pnie delta jest \u0142\u0105czona z danymi, kt\u00f3re by\u0142y w tabeli przed aktualizacj\u0105. Dzieje si\u0119 to za pomoc\u0105 SQL przy u\u017cyciu wygenerowanego zapytania SQL. Nast\u0119pnie, za pomoc\u0105 polece\u0144 SQL delete+insert do docelowej tabeli, nast\u0119puje wstawienie nowych danych z delty i zamkni\u0119cie okres\u00f3w wa\u017cno\u015bci danych, dla kt\u00f3rych delta zosta\u0142a przes\u0142ana. <br \/>\nNie ma potrzeby ponownego zapisywania niezmienionych danych.<\/p>\n<p>W ten spos\u00f3b doszli\u015bmy do wniosku, \u017ce w przypadku Hive MDW musi zdecydowa\u0107 si\u0119 na ponowne zapisanie ca\u0142ej tabeli, poniewa\u017c Hive nie ma funkcji aktualizacji. I nic lepszego ni\u017c pe\u0142ne przepisanie danych podczas aktualizacji nie zosta\u0142o wymy\u015blone. W przypadku RDBMS, przeciwnie, tw\u00f3rcy produktu uznali za stosowne zleci\u0107 \u0142\u0105czenie i aktualizacj\u0119 tabel wykorzystaniu SQL.<\/p>\n<p>Dla projektu w Sberbanku stworzyli\u015bmy now\u0105 wielokrotnego u\u017cytku implementacj\u0119 \u0142adowarki bazy danych dla GreenPlum. Zosta\u0142o to zrealizowane na podstawie wersji, kt\u00f3r\u0105 MDW generuje dla Teradata. To w\u0142a\u015bnie Teradata, a nie Oracle, okaza\u0142a si\u0119 lepsza i najbli\u017csza, poniewa\u017c r\u00f3wnie\u017c jest systemem MPP. Sposoby pracy oraz sk\u0142adnia Teradata i GreenPlum okaza\u0142y si\u0119 bliskie.<\/p>\n<p>Przyk\u0142ady krytycznych r\u00f3\u017cnic dla MDW mi\u0119dzy r\u00f3\u017cnymi RDBMS s\u0105 nast\u0119puj\u0105ce. W GreenPlum, w przeciwie\u0144stwie do Teradata, podczas tworzenia tabel nale\u017cy napisa\u0107 klauzul\u0119<\/p>\n<pre><code class=\"sql\">distributed by<\/code><\/pre>\n<p>\nW Teradata pisze si\u0119<\/p>\n<pre><code class=\"sql\">usu\u0144 &lt;table&gt; wszystko<\/code><\/pre>\n<p>\n, a w GreenPlum pisze si\u0119<\/p>\n<pre><code class=\"sql\">usu\u0144 z &lt;table&gt;<\/code><\/pre>\n<p>\nW Oracle w celu optymalizacji pisze si\u0119<\/p>\n<pre><code class=\"sql\">delete from t where rowid in ()<\/code><\/pre>\n<p>\n, a w Teradata i GreenPlum pisze si\u0119<\/p>\n<pre><code class=\"sql\">delete from t where exists (select * from delta where delta.pk=t.pk)<\/code><\/pre>\n<p>\nDodatkowo zauwa\u017camy, \u017ce do pracy Ab Initio z GreenPlum konieczne by\u0142o zainstalowanie klienta GreenPlum na wszystkich w\u0119z\u0142ach klastra Ab Initio. Dzieje si\u0119 tak, poniewa\u017c po\u0142\u0105czyli\u015bmy si\u0119 z GreenPlum jednocze\u015bnie ze wszystkich w\u0119z\u0142\u00f3w naszego klastra. Aby odczyt z GreenPlum odbywa\u0142 si\u0119 r\u00f3wnolegle i ka\u017cdy r\u00f3wnoleg\u0142y w\u0105tek Ab Initio odczytywa\u0142 swoj\u0105 porcj\u0119 danych z GreenPlum, musieli\u015bmy umie\u015bci\u0107 w sekcji \u201ewhere\u201d zapytania SQL konstrukcj\u0119 rozumian\u0105 przez Ab Initio<\/p>\n<pre><code class=\"sql\">where ABLOCAL()<\/code><\/pre>\n<p>\ni zdefiniowa\u0107 warto\u015b\u0107 tej konstrukcji, wskazuj\u0105c czytaj\u0105cej z bazy danych transformacji parametr<\/p>\n<pre><code class=\"sql\">ablocal_expr=\u00abstring_concat(&quot;mod(t.&quot;, string_filter_out(&quot;{$TABLE_KEY}&quot;,&quot;{}&quot;), &quot;,&quot;, (decimal(3))(number_of_partitions()),&quot;)=&quot;, (decimal(3))(this_partition()))\u00bb<\/code><\/pre>\n<p>\n, kt\u00f3ra kompiluje si\u0119 w co\u015b w rodzaju<\/p>\n<pre><code class=\"sql\">mod(sk,10)=3<\/code><\/pre>\n<p>\n, tzn. musimy podsun\u0105\u0107 GreenPlum wyra\u017any filtr dla ka\u017cdej partycji. Dla innych baz danych (Teradata, Oracle) Ab Initio mo\u017ce wykona\u0107 to r\u00f3wnoleglenie automatycznie.<\/p>\n<h3>Por\u00f3wnawcze charakterystyki wydajno\u015bci Ab Initio w pracy z Hive i GreenPlum<\/h3>\n<p>\nW Sberbanku przeprowadzono eksperyment por\u00f3wnawczy wydajno\u015bci wygenerowanych graf\u00f3w MDW w odniesieniu do Hive i GreenPlum. W ramach eksperymentu w przypadku Hive by\u0142o 5 w\u0119z\u0142\u00f3w w tym samym klastrze, co Ab Initio, a w przypadku GreenPlum by\u0142o 4 w\u0119z\u0142y w osobnym klastrze. Tzn. Hive mia\u0142o pewn\u0105 przewag\u0119 nad GreenPlum \u201ena sprz\u0119cie\u201d.<\/p>\n<p>Rozwa\u017cono dwie pary graf\u00f3w, kt\u00f3re wykonuj\u0105 to samo zadanie aktualizacji danych w Hive i GreenPlum. Przy tym uruchomiono grafy wygenerowane przez konfigurator MDW:<\/p>\n<ul>\n<li>inicjalizuj\u0105ce \u0142adowanie + inkrementalne \u0142adowanie losowo wygenerowanych danych do tabeli Hive<\/li>\n<li>inicjalizuj\u0105ce \u0142adowanie + inkrementalne \u0142adowanie losowo wygenerowanych danych do identycznej tabeli GreenPlum<\/li>\n<\/ul>\n<p>\nW obu przypadkach (Hive i GreenPlum) uruchomiono \u0142adowania w 10 r\u00f3wnoleg\u0142ych w\u0105tkach na tym samym klastrze Ab Initio. Po\u015brednie dane do oblicze\u0144 Ab Initio by\u0142y przechowywane w HDFS (w terminach Ab Initio u\u017cyto uk\u0142adu MFS u\u017cywaj\u0105cego HDFS). Jedna losowo wygenerowana linia danych zajmowa\u0142a w obu przypadkach po 200 bajt\u00f3w.<\/p>\n<p>Wynik jest nast\u0119puj\u0105cy:<\/p>\n<p><b>Hive:<\/b><\/p>\n<p><b>Inicjalne \u0142adowanie w Hive<\/b><\/p>\n<p>Wstawiono wierszy<br \/>\n6 000 000<br \/>\n60 000 000<br \/>\n600 000 000<\/p>\n<p>Czas trwania inicjalnego<br \/>\n\u0142adowania w sekundach<br \/>\n41<br \/>\n203<br \/>\n1 601<\/p>\n<p><b>Inkrementalne \u0142adowanie w Hive<\/b><\/p>\n<p>Liczba wierszy, kt\u00f3re znajdowa\u0142y si\u0119 w<br \/>\ndocelowej tabeli na pocz\u0105tku eksperymentu<br \/>\n6 000 000<br \/>\n60 000 000<br \/>\n600 000 000<\/p>\n<p>Liczba wierszy r\u00f3\u017cnicy, kt\u00f3re zastosowano do<br \/>\ndocelowej tabeli w trakcie eksperymentu<br \/>\n6 000 000<br \/>\n6 000 000<br \/>\n6 000 000<\/p>\n<p>Czas trwania inkrementalnego<br \/>\n\u0142adowania w sekundach<br \/>\n88<br \/>\n299<br \/>\n<b>2 541<\/b><\/p>\n<p>\n<b>GreenPlum:<\/b><\/p>\n<p><b>Inicjalne \u0142adowanie w GreenPlum<\/b><\/p>\n<p>Wstawiono wierszy<br \/>\n6 000 000<br \/>\n60 000 000<br \/>\n600 000 000<\/p>\n<p>Czas trwania inicjalnego<br \/>\n\u0142adowania w sekundach<br \/>\n72<br \/>\n360<br \/>\n3 631<\/p>\n<p><b>Inkrementalne \u0142adowanie w GreenPlum<\/b><\/p>\n<p>Liczba wierszy, kt\u00f3re znajdowa\u0142y si\u0119 w<br \/>\ndocelowej tabeli na pocz\u0105tku eksperymentu<br \/>\n6 000 000<br \/>\n60 000 000<br \/>\n600 000 000<\/p>\n<p>Liczba wierszy r\u00f3\u017cnicy, kt\u00f3re zastosowano do<br \/>\ndocelowej tabeli w trakcie eksperymentu<br \/>\n6 000 000<br \/>\n6 000 000<br \/>\n6 000 000<\/p>\n<p>Czas trwania inkrementalnego<br \/>\n\u0142adowania w sekundach<br \/>\n159<br \/>\n199<br \/>\n<b>321<\/b><\/p>\n<p>\nWidzimy, \u017ce pr\u0119dko\u015b\u0107 inicjalnego \u0142adowania zar\u00f3wno w Hive, jak i w GreenPlum liniowo zale\u017cy od obj\u0119to\u015bci danych, a z powodu lepszego sprz\u0119tu jest nieco szybsza dla Hive ni\u017c dla GreenPlum.<\/p>\n<p>Inkrementalne \u0142adowanie w Hive tak\u017ce liniowo zale\u017cy od obj\u0119to\u015bci danych wcze\u015bniej za\u0142adowanych do docelowej tabeli i przebiega stosunkowo wolno w miar\u0119 wzrostu obj\u0119to\u015bci. Spowodowane jest to konieczno\u015bci\u0105 ca\u0142kowitego przepisania docelowej tabeli. Oznacza to, \u017ce zastosowanie ma\u0142ych zmian w ogromnych tabelach nie jest najlepszym sposobem wykorzystania dla Hive.<\/p>\n<p>Z kolei inkrementalne \u0142adowanie w GreenPlum ma s\u0142abo rozwini\u0119t\u0105 zale\u017cno\u015b\u0107 od obj\u0119to\u015bci dotychczasowych danych w docelowej tabeli i przebiega wystarczaj\u0105co szybko. Uda\u0142o si\u0119 to dzi\u0119ki SQL Joins i architekturze GreenPlum, kt\u00f3ra pozwala na operacj\u0119 delete.<\/p>\n<p>Zatem GreenPlum wprowadza r\u00f3\u017cnic\u0119 metod\u0105 delete+insert, a w Hive nie ma operacji delete ani update, dlatego ca\u0142y zbi\u00f3r danych podczas inkrementalnej aktualizacji musia\u0142 by\u0107 przepisywany w ca\u0142o\u015bci. Najbardziej wyra\u017ane jest por\u00f3wnanie wyr\u00f3\u017cnionych pogrubionych kom\u00f3rek, poniewa\u017c odpowiada ono najcz\u0119stszemu wariantowi u\u017cytkowania zasoboch\u0142onnych \u0142adowa\u0144. Widzimy, \u017ce GreenPlum wygra\u0142 z Hive w tym te\u015bcie 8 razy.<\/p>\n<h3>Praca Ab Initio z GreenPlum w trybie Near Real Time<\/h3>\n<p>\nW tym eksperymencie sprawdzimy mo\u017cliwo\u015b\u0107 Ab Initio dokonywania aktualizacji tabeli GreenPlum losowo generowanymi porcjami danych w trybie zbli\u017conym do rzeczywistego czasu. Rozwa\u017cymy tabel\u0119 GreenPlum dev42_1_db_usl.TESTING_SUBJ_org_finval, z kt\u00f3r\u0105 b\u0119dzie prowadzona praca.<\/p>\n<p>B\u0119dziemy u\u017cywa\u0107 trzech graf\u00f3w Ab Initio do pracy z ni\u0105:<\/p>\n<p>1) Graf Create_test_data.mp \u2013 tworzy w 10 r\u00f3wnoleg\u0142ych w\u0105tkach pliki z danymi w HDFS zawieraj\u0105ce 6 000 000 wierszy. Dane s\u0105 losowe, ich struktura jest zorganizowana do wstawienia w nasz\u0105 tabel\u0119.<\/p>\n<p><img decoding=\"async\" alt=\"Kiedy masz skal\u0119 podobn\u0105 do Sberbanku. U\u017cycie Ab Initio z Hive i GreenPlum\" src=\"\/wp-content\/uploads\/2020\/07\/8cac605c1c5931313bd016a48fb6384e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Kiedy masz skal\u0119 podobn\u0105 do Sberbanku. U\u017cycie Ab Initio z Hive i GreenPlum\" src=\"\/wp-content\/uploads\/2020\/07\/b86988bf1722329bde60013ba025d600.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n2) Graf mdw_load.day_one.current.dev42_1_db_usl_testing_subj_org_finval.pset \u2013 wygenerowany graf MDW do inicjalizuj\u0105cego wstawienia danych do naszej tabeli w 10 r\u00f3wnoleg\u0142ych w\u0105tkach (u\u017cywane s\u0105 dane testowe, wygenerowane przez graf (1)).<\/p>\n<p><img decoding=\"async\" alt=\"Kiedy masz skal\u0119 podobn\u0105 do Sberbanku. U\u017cycie Ab Initio z Hive i GreenPlum\" src=\"\/wp-content\/uploads\/2020\/07\/b4228a13c088c6b96abba35e9e58fe8e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n3) Graf mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset \u2013 wygenerowany graf MDW do inkrementalnej aktualizacji naszej tabeli w 10 r\u00f3wnoleg\u0142ych w\u0105tkach z u\u017cyciem nowej porcji danych (delta), wygenerowanej przez graf (1).<\/p>\n<p><img decoding=\"async\" alt=\"Kiedy masz skal\u0119 podobn\u0105 do Sberbanku. U\u017cycie Ab Initio z Hive i GreenPlum\" src=\"\/wp-content\/uploads\/2020\/07\/714a901616cf84e5a1fd7a764373e30f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWykonamy poni\u017cszy skrypt w trybie NRT:<\/p>\n<ul>\n<li>wygenerowa\u0107 6 000 000 testowych wierszy.<\/li>\n<li>przeprowadzi\u0107 inicjalizuj\u0105c\u0105 za\u0142adunek i wstawi\u0107 6 000 000 testowych wierszy do pustej tabeli.<\/li>\n<li>powt\u00f3rzy\u0107 5 razy za\u0142adunek inkrementalny.\n<ul>\n<li>wygenerowa\u0107 6 000 000 testowych wierszy.<\/li>\n<li>przeprowadzi\u0107 inkrementalne wstawienie 6 000 000 testowych wierszy do tabeli (w tym przypadku starym danym przypisywany jest czas wyga\u015bni\u0119cia valid_to_ts i wstawiane s\u0105 nowsze dane z tym samym kluczem g\u0142\u00f3wnym).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\nTen scenariusz emuluje tryb rzeczywistej pracy pewnego systemu biznesowego \u2013 w czasie rzeczywistym pojawia si\u0119 znaczna porcja nowych danych i natychmiast zlewa si\u0119 w GreenPlum.<\/p>\n<p>Teraz przyjrzyjmy si\u0119 logowi pracy scenariusza:<\/p>\n<p><i>Start Create_test_data.input.pset at 2020-06-04 11:49:11<br \/>\nFinish Create_test_data.input.pset at 2020-06-04 11:49:37<br \/>\nStart mdw_load.day_one.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 11:49:37<br \/>\nFinish mdw_load.day_one.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 11:50:42<br \/>\nStart Create_test_data.input.pset at 2020-06-04 11:50:42<br \/>\nFinish Create_test_data.input.pset at 2020-06-04 11:51:06<br \/>\nStart mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 11:51:06<br \/>\nFinish mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 11:53:41<br \/>\nStart Create_test_data.input.pset at 2020-06-04 11:53:41<br \/>\nFinish Create_test_data.input.pset at 2020-06-04 11:54:04<br \/>\nStart mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 11:54:04<br \/>\nFinish mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 11:56:51<br \/>\nStart Create_test_data.input.pset at 2020-06-04 11:56:51<br \/>\nFinish Create_test_data.input.pset at 2020-06-04 11:57:14<br \/>\nStart mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 11:57:14<br \/>\nFinish mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 11:59:55<br \/>\nStart Create_test_data.input.pset at 2020-06-04 11:59:55<br \/>\nFinish Create_test_data.input.pset at 2020-06-04 12:00:23<br \/>\nStart mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 12:00:23<br \/>\nFinish mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 12:03:23<br \/>\nStart Create_test_data.input.pset at 2020-06-04 12:03:23<br \/>\nFinish Create_test_data.input.pset at 2020-06-04 12:03:49<br \/>\nRozpocznij mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset o 2020-06-04 12:03:49<br \/>\nZako\u0144cz mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset o 2020-06-04 12:06:46<\/i><\/p>\n<p>Uzyskuje si\u0119 taki obraz:<\/p>\n<p>Wykres<br \/>\nCzas rozpocz\u0119cia<br \/>\nCzas zako\u0144czenia<br \/>\nD\u0142ugo\u015b\u0107<\/p>\n<p>Create_test_data.input.pset<br \/>\n04.06.2020 11:49:11<br \/>\n04.06.2020 11:49:37<br \/>\n00:00:26<\/p>\n<p>mdw_load.day_one.current.<br \/>\ndev42_1_db_usl_testing_subj_org_finval.pset<br \/>\n04.06.2020 11:49:37<br \/>\n04.06.2020 11:50:42<br \/>\n00:01:05<\/p>\n<p>Create_test_data.input.pset<br \/>\n04.06.2020 11:50:42<br \/>\n04.06.2020 11:51:06<br \/>\n00:00:24<\/p>\n<p>mdw_load.regular.current.<br \/>\ndev42_1_db_usl_testing_subj_org_finval.pset<br \/>\n04.06.2020 11:51:06<br \/>\n04.06.2020 11:53:41<br \/>\n00:02:35<\/p>\n<p>Create_test_data.input.pset<br \/>\n04.06.2020 11:53:41<br \/>\n04.06.2020 11:54:04<br \/>\n00:00:23<\/p>\n<p>mdw_load.regular.current.<br \/>\ndev42_1_db_usl_testing_subj_org_finval.pset<br \/>\n04.06.2020 11:54:04<br \/>\n04.06.2020 11:56:51<br \/>\n00:02:47<\/p>\n<p>Create_test_data.input.pset<br \/>\n04.06.2020 11:56:51<br \/>\n04.06.2020 11:57:14<br \/>\n00:00:23<\/p>\n<p>mdw_load.regular.current.<br \/>\ndev42_1_db_usl_testing_subj_org_finval.pset<br \/>\n04.06.2020 11:57:14<br \/>\n04.06.2020 11:59:55<br \/>\n00:02:41<\/p>\n<p>Create_test_data.input.pset<br \/>\n04.06.2020 11:59:55<br \/>\n04.06.2020 12:00:23<br \/>\n00:00:28<\/p>\n<p>mdw_load.regular.current.<br \/>\ndev42_1_db_usl_testing_subj_org_finval.pset<br \/>\n04.06.2020 12:00:23<br \/>\n04.06.2020 12:03:23<br \/>\n00:03:00<\/p>\n<p>Create_test_data.input.pset<br \/>\n04.06.2020 12:03:23<br \/>\n04.06.2020 12:03:49<br \/>\n00:00:26<\/p>\n<p>mdw_load.regular.current.<br \/>\ndev42_1_db_usl_testing_subj_org_finval.pset<br \/>\n04.06.2020 12:03:49<br \/>\n04.06.2020 12:06:46<br \/>\n00:02:57<\/p>\n<p>\nWidzimy, \u017ce 6 000 000 wierszy inkrementalnych przetwarza si\u0119 w ci\u0105gu 3 minut, co jest wystarczaj\u0105co szybkie.<br \/>\nDane w docelowej tabeli zosta\u0142y roz\u0142o\u017cone w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<pre><code class=\"sql\">select valid_from_ts, valid_to_ts, count(1), min(sk), max(sk) from dev42_1_db_usl.TESTING_SUBJ_org_finval group by valid_from_ts, valid_to_ts order by 1,2;<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Kiedy masz skal\u0119 podobn\u0105 do Sberbanku. U\u017cycie Ab Initio z Hive i GreenPlum\" src=\"\/wp-content\/uploads\/2020\/07\/baefcfd8142f4ad6275333e3dcfccf94.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nMo\u017cna dostrzec zgodno\u015b\u0107 wstawionych danych z momentami uruchamiania wykres\u00f3w.<br \/>\nOznacza to, \u017ce mo\u017cna uruchamia\u0107 w Ab Initio inkrementalne \u0142adowanie danych do GreenPlum z bardzo wysok\u0105 cz\u0119stotliwo\u015bci\u0105 i obserwowa\u0107 wysok\u0105 pr\u0119dko\u015b\u0107 wstawiania tych danych do GreenPlum. Oczywi\u015bcie, uruchomienie co sekund\u0119 nie b\u0119dzie mo\u017cliwe, poniewa\u017c Ab Initio, jak ka\u017cde narz\u0119dzie ETL, wymaga czasu na \"rozkr\u0119cenie\".<\/p>\n<h2>Podsumowanie<\/h2>\n<p>\nObecnie Ab Initio jest u\u017cywane w Sberbanku do budowy Jednolitej semantycznej warstwy danych (ESS). Projekt ten zak\u0142ada budow\u0119 jedynej wersji stanu r\u00f3\u017cnych bankowych byt\u00f3w biznesowych. Informacje pochodz\u0105 z r\u00f3\u017cnych \u017ar\u00f3de\u0142, kt\u00f3rych repliki s\u0105 przygotowywane na Hadoop. W zale\u017cno\u015bci od potrzeb biznesowych, opracowywany jest model danych i opisane s\u0105 transformacje danych. Ab Initio \u0142aduje informacje do ESS, a za\u0142adowane dane nie tylko same w sobie maj\u0105 znaczenie dla biznesu, ale s\u0105 r\u00f3wnie\u017c \u017ar\u00f3d\u0142em do budowy witryn danych. Funkcjonalno\u015b\u0107 produktu pozwala na u\u017cywanie r\u00f3\u017cnych system\u00f3w jako odbiornik\u00f3w (Hive, Greenplum, Teradata, Oracle), co daje mo\u017cliwo\u015b\u0107 przygotowania danych dla biznesu w r\u00f3\u017cnych jego wymaganych formatach.<\/p>\n<p>Mo\u017cliwo\u015bci Ab Initio s\u0105 szerokie, na przyk\u0142ad do\u0142\u0105czony framework MDW pozwala na budowanie technicznej i biznesowej historii danych \"z pude\u0142ka\". Dla programist\u00f3w Ab Initio daje mo\u017cliwo\u015b\u0107 \"nie wymy\u015blania ko\u0142a na nowo\", a korzystania z wielu istniej\u0105cych komponent\u00f3w funkcjonalnych, b\u0119d\u0105cych de facto bibliotekami, kt\u00f3re s\u0105 potrzebne przy pracy z danymi.<\/p>\n<blockquote><p>Autor \u2014 ekspert profesjonalnej spo\u0142eczno\u015bci Sberbanku SberProfi DWH\/BiGoData. Spo\u0142eczno\u015b\u0107 profesjonalna SberProfi DWH\/BiGoData odpowiada za rozw\u00f3j kompetencji w takich dziedzinach jak ekosystem Hadoop, Teradata, Oracle DB, GreenPlum, a tak\u017ce narz\u0119dzia BI takie jak Qlik, SAP BO, Tableau i inne.<\/p><\/blockquote>\n<p>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sberbank\/blog\/509936\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u043c\u0438 \u0432\u0441\u0442\u0430\u043b \u0432\u043e\u043f\u0440\u043e\u0441 \u0432\u044b\u0431\u043e\u0440\u0430 ETL-\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 BigData. \u0420\u0430\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0435\u0435\u0441\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0435 Informatica BDM \u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b\u043e \u043d\u0430\u0441 \u0438\u0437-\u0437\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0415\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0432\u0435\u043b\u043e\u0441\u044c \u043a \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0443 \u043f\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0443 \u043a\u043e\u043c\u0430\u043d\u0434 spark-submit. \u041d\u0430 \u0440\u044b\u043d\u043a\u0435 \u0438\u043c\u0435\u043b\u043e\u0441\u044c \u043d\u0435 \u0442\u0430\u043a \u043c\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432, \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0442\u0435\u043c \u043e\u0431\u044a\u0451\u043c\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0434\u0435\u043b\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u043d\u044c. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":87610,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-87609","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u043c\u0438 \u0432\u0441\u0442\u0430\u043b \u0432\u043e\u043f\u0440\u043e\u0441 \u0432\u044b\u0431\u043e\u0440\u0430 ETL-\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 BigData. \u0420\u0430\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0435\u0435\u0441\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0435 Informatica BDM \u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b\u043e \u043d\u0430\u0441 \u0438\u0437-\u0437\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/kogda-u-vas-sberovskie-masshtaby-ispolzovanie-ab-initio-pri-rabote-s-hive-i-greenplum\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u043e\u0433\u0434\u0430 \u0443 \u0432\u0430\u0441 \u0441\u0431\u0435\u0440\u043e\u0432\u0441\u043a\u0438\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u044b. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 Ab Initio \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 Hive \u0438 GreenPlum | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u043c\u0438 \u0432\u0441\u0442\u0430\u043b \u0432\u043e\u043f\u0440\u043e\u0441 \u0432\u044b\u0431\u043e\u0440\u0430 ETL-\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 BigData. \u0420\u0430\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0435\u0435\u0441\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0435 Informatica BDM \u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b\u043e \u043d\u0430\u0441 \u0438\u0437-\u0437\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/kogda-u-vas-sberovskie-masshtaby-ispolzovanie-ab-initio-pri-rabote-s-hive-i-greenplum\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-07-08T23:42:11+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-08T23:42:11+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47 Gdy macie ogromne potrzeby. Wykorzystanie Ab Initio w pracy z Hive i GreenPlum | ProHoster","description":"Jaki\u015b czas temu stan\u0119li\u015bmy przed wyborem narz\u0119dzia ETL do pracy z BigData. Wcze\u015bniej u\u017cywane rozwi\u0105zanie Informatica BDM nie spe\u0142nia\u0142o naszych oczekiwa\u0144 ze wzgl\u0119du na ograniczon\u0105 funkcjonalno\u015b\u0107.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/kogda-u-vas-sberovskie-masshtaby-ispolzovanie-ab-initio-pri-rabote-s-hive-i-greenplum","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u043e\u0433\u0434\u0430 \u0443 \u0432\u0430\u0441 \u0441\u0431\u0435\u0440\u043e\u0432\u0441\u043a\u0438\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u044b. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 Ab Initio \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 Hive \u0438 GreenPlum | ProHoster","og:description":"\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u043c\u0438 \u0432\u0441\u0442\u0430\u043b \u0432\u043e\u043f\u0440\u043e\u0441 \u0432\u044b\u0431\u043e\u0440\u0430 ETL-\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 BigData. \u0420\u0430\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0435\u0435\u0441\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0435 Informatica BDM \u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b\u043e \u043d\u0430\u0441 \u0438\u0437-\u0437\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/kogda-u-vas-sberovskie-masshtaby-ispolzovanie-ab-initio-pri-rabote-s-hive-i-greenplum","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-07-08T23:42:11+00:00","article:modified_time":"2020-07-08T23:42:11+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"87609","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 13:47:29","updated":"2026-02-22 15:29:30","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/87609","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=87609"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/87609\/revisions"}],"predecessor-version":[{"id":162163,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/87609\/revisions\/162163"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/87610"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=87609"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=87609"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=87609"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}