Amazon RedShift egy teljes körűen felügyelt szolgáltatás adatlakók, adatelemzések és adattárházak számára induló, közép- és nagyvállalatok számára. Az Amazon Redshiftet vállalkozások tízezrei használják szerte a világon adatelemző platformjuk korszerűsítésére.
Greenplum egy nyílt forráskódú, masszívan párhuzamos adatbázis, amelyet elemzésekhez használnak, főleg a helyszíni infrastruktúrához. A Greenplum alapja a PostgreSQL adatbázis motor.
Sok ügyfél a következő okok miatt találta vonzó lehetőségnek az Amazon Redshiftre való átállást a Greenplumról a helyszíni Greenplum kezelése helyett:
Annak ellenére, hogy a Greenplum és az Amazon Redshift is a nyílt forráskódú PostgreSQL adatbázismotort használja, a migráció továbbra is sok tervezést és kézi beavatkozást igényel. Ez a bejegyzés lefedi a kulcsfontosságú funkciókat és szempontokat a Greenplumról az Amazon Redshiftre történő kódátalakítás során. Az eljárások, funkciók és nézetek migrációjára összpontosít.
Megoldás áttekintése
AWS adatbázis-migrációs szolgáltatás (AWS DMS) és a AWS sémakonverziós eszköz (AWS SCT) képes migrálni a legtöbb objektumot egy heterogén adatbázis-migráció során a Greenplumról az Amazon Redshiftre. Vannak azonban olyan helyzetek, amikor a kódkonverziós csapatok hibákkal és figyelmeztetésekkel találkoznak a nézetek, eljárások és funkciók tekintetében, miközben létrehozzák azokat az Amazon Redshiftben. Az ilyen típusú helyzetek megoldásához a kód kézi átalakítása szükséges.
A bejegyzések arra összpontosítanak, hogyan lehet kezelni a következőket a Greenplumról az Amazon Redshiftre való áttérés során:
- tömbök
- Dátumok és időbélyegek
- Reguláris kifejezések (regex)
Felhívjuk figyelmét, hogy ehhez a bejegyzéshez a Greenplum 4.3-at és az Amazon Redshift PostgreSQL 8.2-t használjuk.
Tömbfüggvényekkel való munka
Az AWS SCT nem konvertálja a tömbfüggvényeket, miközben a Greenplumról vagy a PostgreSQL-ről az Amazon Redshiftre költözik. A fejlesztőknek ezeket a funkciókat széles körben kézzel kell átalakítaniuk. Ez a bejegyzés felvázolja a leggyakoribb tömbfunkciókat:
- ARRAY_UPPER
- JSON_EXTACT_ARRAY_ELEMENT_TEXT és JSON_ARRAY_LENGTH
- UNNEST ()
- STRING_AGG()
- ANY ARRAY()
ARRAY_UPPER()
Ez a függvény egy tömb felső korlátját adja vissza. Használható a nth elemet egy tömbből PostgreSQL-ben vagy Greenplumban.
A Greenplum kód a következő:
Az Amazon Redshiftben nincs funkció egy elem tömbből való kinyerésére; azonban két JSON-függvény használható erre a célra:
- JSON_EXTRACT_ARRAY_ELEMENT_TEXT() – Egy JSON-tömbelemet ad vissza a JSON-karakterlánc legkülső tömbjében
- JSON_ARRAY_LENGTH() – Egy JSON-karakterlánc külső tömbjének elemeinek számát adja vissza
Lásd a következő kódot:
UNNEST()
Az UNNEST() a PostgreSQL rendszerfüggvénye félig strukturált adatokhoz, egy tömbnek vagy tömbök kombinációjának sorhalmazzá történő bővítéséhez. Azért vezették be, hogy javítsa több ezer vagy rekord adatbázis-teljesítményét beszúrások, frissítések és törlések esetén.
Ehhez használhatja az UNNEST()-et alap tömb, több tömbés több különböző hosszúságú tömb.
A tömbök feloldására használt Amazon Redshift néhány funkciója ilyen split_part
, json_extract_path_text
, json_array_length
és json_extract_array_element_text
.
A Greenplumban az UNNEST függvény egy tömb sorkészletére való kiterjesztésére szolgál:
teljesítmény
A 1
A 2
Az Amazon Redshift nem támogatja az UNNEST funkciót; a következő megoldást használhatja:
STRING_AGG()
A STRING_AGG() függvény egy aggregált függvény amely összefűzi a karakterláncok listáját, és elválasztót helyez el közéjük. A függvény nem adja hozzá az elválasztót a karakterlánc végéhez. Lásd a következő kódot:
A Greenplum kód a következő:
A STRING_AGG() függvény Amazon Redshift megfelelője LISTAGG(). Ez az összesítő függvény az ORDER BY kifejezés szerint rendezi a csoport sorait, majd az értékeket egyetlen karakterláncba fűzi össze:
Lásd a következő kódot:
ANY ARRAY()
A PostgreSQL ANY ARRAY() függvénye kiértékeli és összehasonlítja a bal oldali kifejezést a tömb minden elemével:
Az Amazon Redshiftben az értékelés IN operátorral érhető el:
Dátumfüggvényekkel való munka
Ebben a részben a közötti különbség kiszámítását tárgyaljuk date_part
a Greenplum számára és a datediff az Amazon Redshift számára.
Amikor az alkalmazásnak ki kell számítania a különbséget a Greenplum dátumok almezői között, akkor a függvényt használja dátum_rész, amely lehetővé teszi olyan almezők lekérését, mint az év, hónap, hét és nap. A következő példalekérdezésekben kiszámítjuk a számát completion_days
közötti különbség kiszámításával originated_date
és a eco_date
.
A dátum almezői közötti különbség kiszámításához az Amazon Redshift a datediff függvényt használja. A következő lekérdezések példát mutatnak be a completion_days
mint a különbség között eco_date
és a orginated_date
. A DATEDIFF meghatározza a két kifejezés között átlépő dátumrész-határok számát.
A Greenplum és az Amazon Redshift lekérdezéseket az alábbiak szerint hasonlítjuk össze:
- Évenkénti különbség
A következő Greenplum lekérdezés 1 évet ad vissza 2009-01-01 és 2009-12-31 között:
A következő Amazon Redshift lekérdezés 1 évet ad vissza 2009-01-01 és 2009-12-31 között:
- Különbség hónaponként
A következő Greenplum lekérdezés 1 hónapot ad vissza 2009-01-01 és 2008-12-31 között:
A következő Amazon Redshift lekérdezés 1 hónapot ad vissza 2009-01-01 és 2008-12-31 között:
- Heti különbség
A következő Greenplum lekérdezés 0 hetet ad vissza 2009-01-01 és 2009-12-31 között:
A következő Amazon Redshift lekérdezés 0 hetet ad vissza 2009-01-01 és 2009-12-31 között:
- Naponkénti különbség
A következő Greenplum lekérdezés 1 napot ad vissza:
A következő Amazon Redshift lekérdezés 1 napot ad vissza:
- Óránkénti különbség
A következő Greenplum lekérdezés 1 órát ad vissza:
A következő Amazon Redshift lekérdezés 1 órát ad vissza:
- Percenkénti különbség
A következő Greenplum lekérdezés 3 percet ad vissza:
A következő Amazon Redshift lekérdezés 1 percet ad vissza:
- Másodpercenkénti különbség
A következő Greenplum lekérdezés 40 másodpercet ad vissza:
A következő Amazon Redshift lekérdezés 45 másodpercet ad vissza:
Most nézzük meg, hogyan használjuk az Amazon Redshiftet a napok és hetek másodpercekben történő kiszámítására.
A következő Amazon Redshift lekérdezés 2 napot jelenít meg:
A következő Amazon Redshift lekérdezés 9 hetet jelenít meg:
A Greenplum esetében a dátum almezőket szimpla idézőjelben kell megadni, míg az Amazon Redshift esetében használhatunk dátum almezőket, például év, hónap, hét, nap, perc, másodperc idézőjelek nélkül. A Greenplum esetében ki kell vonnunk az almezőt az egyik részből a másikba, míg az Amazon Redshift esetében vesszővel választhatjuk el a két dátumot.
ISOYEAR kivonat a dátumból
Az ISOYEAR 8601 egy hétszámozási év. A január 4-ét tartalmazó hét hétfőjével kezdődik. Tehát a január eleji vagy december végi dátum esetében az ISO év eltérhet a Gergely-évtől. Az ISO év 52 vagy 53 teljes hétből áll (364 vagy 371 nap). A plusz hetet szökőhétnek nevezzük; az ilyen héttel töltött évet szökőévnek nevezik.
A következő Greenplum lekérdezés az ISOYEAR 2020-at jeleníti meg:
A következő Amazon Redshift lekérdezés az ISOYEAR 2020-at jeleníti meg:
A gener_series() függvény
A Greenplum átvette a PostgreSQL függvényt generate_series()
. De a generate_series
funkció eltérően működik az Amazon Redshifttel, miközben lekéri a rekordokat a táblából, mert ez a csak vezető csomópont funkciót.
Számsorozat megjelenítéséhez az Amazon Redshiftben futtassa a következő lekérdezést a vezető csomóponton. Ebben a példában 10 sort jelenít meg, 1-től 10-ig számozva:
Egy adott dátumhoz tartozó napok sorozatának megjelenítéséhez használja a következő lekérdezést. Kivonja a napot a megadott dátumból, és kivonja az 1-et, így 0 és 6 közötti számsort jelenít meg:
De azoknál a lekérdezéseknél, amelyek lekérik a rekordot a táblából, csatlakoznak egy másik tábla sorához, és feldolgozzák az adatokat a számítási csomópontban, ez nem működik, és hibaüzenetet generál az Érvénytelen művelettel. A következő kód egy példa egy SQL utasításra, amely működik Greenplum esetén, de nem működik az Amazon Redshift esetében:
Az Amazon Redshift esetében a megoldás egy táblázat létrehozása a sorozatadatok tárolására, és a kód átírása az alábbiak szerint:
Munkavégzés reguláris kifejezésekkel (regex függvények)
Az Amazon Redshift és a Greenplum három feltételt támogat minta illesztés:
- HASONLÓ
- HASONLÓ
- POSIX operátorok
Ebben a bejegyzésben nem tárgyaljuk ezeket a mintaillesztéseket részletesen. Ehelyett néhány olyan regex függvényt és reguláris escape karaktert tárgyalunk, amelyeket az Amazon Redshift nem támogat.
Regexp_split_to_table függvény
A Regex_felosztása_táblázatba függvény feloszt egy karakterláncot egy POSIX reguláris kifejezés-mintával határolóként.
Ennek a függvénynek a szintaxisa a következő:
A Greenplum esetében a következő lekérdezést használjuk:
Az Amazon Redshift esetében a regexp_split_to_table
függvényt az Amazon Redshift segítségével kell konvertálni split_part
funkció:
A konvertálás másik módja regexp_split_to_table
a következő:
Részkarakterlánc reguláris kifejezésekből
A részkarakterlánc (a reguláris kifejezésből származó karakterlánc) kivonja a továbbadott mintának megfelelő részkarakterláncot vagy értéket. Ha nincs egyezés, nullát ad vissza. További információkért lásd: Mintaillesztés.
A következő kódot használjuk a Greenplumban:
Használhatjuk a regexp_substr funkció segítségével ezt a kódot Amazon Redshiftre konvertálhatja. A karakterláncból kivont karaktereket adja vissza egy reguláris kifejezésminta keresésével. A szintaxis a következő:
Kulcspontok a reguláris kifejezések átalakítása során
A Postgres menekülési karaktere E nem működik az Amazon Redshiftben. Ezenkívül a következő Greenplum reguláris kifejezési megszorítások nem támogatottak az Amazon Redshiftben:
- m – Csak a szó elején egyezik
- y – Csak a szó elején vagy végén egyezik
Az Amazon Redshift esetén használja helyette a \< és \>, vagy a [[:<:]] és [[:>:]] billentyűket.
Használja a következő kódot a Greenplumhoz:
Használja a következő kódot az Amazon Redshifthez:
OR
Következtetés
A Greenplumról az Amazon Redshiftre történő heterogén adatbázis-migrációhoz az AWS DMS és az AWS SCT segítségével migrálhatja a legtöbb adatbázis-objektumot, például táblákat, nézeteket, tárolt eljárásokat és függvényeket.
Vannak olyan helyzetek, amikor egy függvényt használnak a forráskörnyezethez, és a célkörnyezet nem támogatja ugyanazt a funkciót. Ebben az esetben manuális átalakításra van szükség ugyanazon eredménykészlet előállításához és az adatbázis-áttelepítés befejezéséhez.
Egyes esetekben a célkörnyezet által támogatott új ablak funkció használata hatékonyabbnak bizonyul az analitikus lekérdezéseknél, hogy petabájtnyi adatot dolgozzanak fel.
Ez a bejegyzés több olyan helyzetet is tartalmazott, amikor kézi kódkonverzióra van szükség, ami szintén javítja a kód hatékonyságát és a lekérdezéseket.
Ha bármilyen kérdése vagy javaslata van, kérjük, ossza meg visszajelzését.
A szerzőkről
Jagrit Shrestha az Amazon Web Services (AWS) adatbázis-tanácsadója. Adatbázis-szakértőként dolgozik, segít az ügyfeleknek a helyszíni adatbázis-munkaterhelések áttelepítésében az AWS-re, és műszaki útmutatást ad.
Ishwar Adhikary az Amazon Web Services (AWS) adatbázis-tanácsadója. Szorosan együttműködik az ügyfelekkel adatbázis- és alkalmazás-infrastruktúráik korszerűsítésében. Fókuszterülete a relációs adatbázisok áttelepítése az On-premise adatközpontból az AWS Cloudba.
Shrenik Parekh adatbázis-tanácsadóként dolgozik az Amazon Web Servicesnél (AWS). Szakértelemmel rendelkezik az adatbázis-migráció értékelésében, az adatbázis-migrációban, az adatbázis-környezet korszerűsítésében, célzott adatbázisokkal AWS felhőalapú adatbázis-szolgáltatások használatával. Emellett az AWS adatelemzési webszolgáltatásaira is összpontosít. Szabadidejében szeret túrázni, jógázni és egyéb szabadtéri tevékenységeket végezni.
Santhosh Meenhallimath az AWS adatépítésze. Analitikai megoldások kidolgozásán, adatforrások létrehozásán és az adatbázisok AWS-be való migrálásán dolgozik.
- SEO által támogatott tartalom és PR terjesztés. Erősödjön még ma.
- Platoblockchain. Web3 metaverzum intelligencia. Felerősített tudás. Hozzáférés itt.
- Forrás: https://aws.amazon.com/blogs/big-data/code-conversion-from-greenplum-to-amazon-redshift-handling-arrays-dates-and-regular-expressions/
- 1
- 10
- 100
- 11
- 2020
- 39
- 7
- 9
- a
- Szerint
- Fiók
- elért
- tevékenységek
- Ezen kívül
- cím
- fogadott
- Minden termék
- lehetővé teszi, hogy
- amazon
- Az Amazon Web Services
- Amazon Web Services (AWS)
- Analitikai
- analitika
- és a
- Másik
- Alkalmazás
- TERÜLET
- körül
- Sor
- értékelés
- vonzó
- AWS
- alapján
- BAT
- mert
- Kezdet
- között
- köteles
- határait
- Épület
- vállalkozások
- kiszámítása
- hívott
- eset
- esetek
- CAT
- Központ
- karakter
- karakter
- szorosan
- felhő
- kód
- kombináció
- Közös
- összehasonlítani
- teljes
- Kiszámít
- Körülmények
- megfontolások
- korlátok
- szaktanácsadó
- tanácsadók
- Átalakítás
- megtérít
- átalakított
- burkolatok
- teremt
- létrehozása
- Kereszt
- Crossed
- Ügyfelek
- dátum
- Adatelemzés
- Adatközpont
- adattárházak
- adatbázis
- adatbázisok
- találka
- Időpontok
- nap
- Nap
- december
- részlet
- meghatározza
- fejlesztők
- különbség
- különböző
- megvitatni
- kijelző
- kijelzők
- DOE
- Nem
- ne
- minden
- Korai
- hatékonyság
- hatékony
- elemek
- alkalmazottak
- találkozás
- Motor
- Vállalatok
- Környezet
- Egyenértékű
- hiba
- hibák
- Eter (ETH)
- értékelés
- példa
- Bontsa
- bővülő
- szakvélemény
- kifejezések
- külön-
- kivonat
- kivonatok
- nem sikerül
- Visszacsatolás
- kevés
- finanszíroz
- zászlók
- Összpontosít
- összpontosított
- koncentrál
- következő
- következik
- Startupoknak
- forma
- talált
- ból ből
- Tele
- teljesen
- funkció
- funkciók
- Gen
- generál
- adott
- földgolyó
- Csoport
- fogantyú
- Kezelés
- kalap
- segít
- turisztika
- Kezdőlap
- Hogyan
- How To
- azonban
- HTML
- HTTPS
- javul
- javítja
- in
- beleértve
- információ
- Infrastruktúra
- infrastruktúrák
- Betétek
- helyette
- beavatkozás
- Bevezetett
- ISO
- IT
- maga
- január
- Jim
- János
- csatlakozik
- csatlakozott
- json
- Kulcs
- nagy
- Késő
- vezető
- Lista
- néz
- Sok
- csinál
- sikerült
- kezelése
- kézikönyv
- kézzel
- Marketing
- masszívan
- Mérkőzés
- egyező
- közepes
- üzenet
- vándorol
- elvándorlás
- jegyzőkönyv
- Mobil
- korszerűsítésére
- hétfő
- Hónap
- több
- hatékonyabb
- a legtöbb
- Szükség
- igények
- Új
- csomópont
- szám
- számozott
- számok
- objektumok
- ONE
- nyílt forráskódú
- működés
- operátor
- opció
- érdekében
- rendelés
- Más
- Kültér
- körvonalak
- Párhuzamos
- paraméterek
- rész
- Elmúlt
- Mintás
- teljesítmény
- előadó
- PHIL
- Helyek
- tervezés
- emelvény
- Plató
- Platón adatintelligencia
- PlatoData
- kérem
- pont
- pozíció
- állás
- postgresql
- Hozzászólások
- eljárások
- folyamat
- feldolgozás
- gyárt
- bizonyul
- ad
- cél
- Kérdések
- miatt
- rekord
- nyilvántartások
- szabályos
- kötelező
- megköveteli,
- Eredmények
- Visszatér
- SOR
- futás
- azonos
- keres
- Második
- másodperc
- Rész
- Series of
- szolgáltatás
- Szolgáltatások
- készlet
- számos
- Megosztás
- előadás
- egyetlen
- helyzet
- helyzetek
- So
- megoldások
- Megoldások
- néhány
- forrás
- szakember
- szakadások
- SQL
- Startups
- nyilatkozat
- Steve
- Még mindig
- tárolni
- memorizált
- ilyen
- támogatás
- Támogatott
- szintaxis
- rendszer
- T1
- táblázat
- cél
- csapat
- Műszaki
- ideiglenes
- A
- The Source
- azok
- ezer
- három
- idő
- időbélyeg
- nak nek
- unió
- Frissítés
- használ
- érték
- Értékek
- nézetek
- háló
- webes szolgáltatások
- hét
- Hetek
- ami
- míg
- nélkül
- Munka
- művek
- év
- Jóga
- A te
- zephyrnet