Mis on ETL?
ETL on protsess, mis eraldab andmeid mitmest lähtesüsteemist, muudab neid (arvutuste, konkatenatsioonide jne kaudu) ja lisab need seejärel andmelao süsteemi. ETL tähistab Extract, Transform ja Load.
Lihtne on uskuda, et andmelao loomine on sama lihtne kui andmete hankimine paljudest allikatest ja andmelao andmebaasi sisestamine. See pole kaugeltki nii ja selleks on vaja keerulist ETL-protseduuri. ETL-i protsess, mis on tehniliselt keeruline, hõlmab erinevate sidusrühmade, sealhulgas arendajate, analüütikute, testijate ja tippjuhtide aktiivset osalemist.
Oma väärtuse säilitamiseks otsustusvahendina peab andmelaosüsteem arenema sünkroonis äritegevuse arenguga. ETL on andmelaosüsteemi regulaarne (igapäevane, nädalane, kuu) protsess, mis peab olema agiilne, automatiseeritud ja korralikult dokumenteeritud.
Kuidas ETL töötab?
Siin õpime samm-sammult, kuidas ETL-protsess töötab:
1. etapp) ekstraheerimine
Andmed ekstraheeritakse lähtesüsteemist ja paigutatakse kaevandamise ajal lavastusalasse. Kui on vaja mingeid teisendusi, tehakse need lavastusalal, et lähtesüsteemi jõudlust ei kahjustataks. Tagasivõtmine on keeruline, kui kahjustatud andmed edastatakse otse allikast andmelao andmebaasi. Enne ekstraheeritud andmete andmelattu teisaldamist saab neid etapialas valideerida.
Andmelaod võivad kombineerida süsteeme erineva riistvara, andmebaasihaldussüsteemide, operatsioonisüsteemide ja sideprotokollidega. Andmelaod peavad kombineerima süsteeme erinevate DBMS-i, riistvara, operatsioonisüsteemide ja sideprotokollidega. Allikad võivad hõlmata pärandprogramme, nagu suurarvutid, kohandatud rakendused, kontaktseadmed, nagu sularahaautomaadid ja kõnelülitid, tekstifailid, arvutustabelid, ERP, tarnijate ja partnerite andmed jne.
Seega on enne andmete väljavõtmist ja füüsilist laadimist vaja loogilist andmekaarti. Sellel andmekaardil on näidatud seos allikate ja sihtandmete vahel.
Kolm andmete ekstraheerimise meetodit:
- Osaline ekstraheerimine – Kui lähtesüsteem teavitab teid kirje muutmisest, on see andmete hankimiseks kõige lihtsam viis.
- Osaline ekstraheerimine (ilma värskendusteateta) – Kõik süsteemid ei saa värskenduse toimumisest teatist edastada; kuid nad saavad märkida muudetud kirjetele ja pakkuda nendest kirjetest väljavõtte.
- Täielik väljavõte – Teatud süsteemid ei suuda kindlaks teha, milliseid andmeid on üldse muudetud. Selle stsenaariumi korral on ainus viis andmete süsteemist väljavõtmiseks teha täielik väljavõte. See lähenemisviis nõuab faili eelmise väljavõtte varukoopiat
samas vormingus, et tuvastada tehtud muudatused.
Olenemata kasutatud meetodist ei tohiks ekstraheerimine mõjutada lähtesüsteemide jõudlust ega reageerimisaega. Need on reaalajas tootmisandmebaasid. Igasugune aeglustumine või lukustamine võib mõjutada ettevõtte lõpptulemust.
2. etapp) ümberkujundamine
Lähteserverist hangitud andmed on toored ja algses olekus kasutuskõlbmatud. Selle tulemusena tuleb see puhastada, kaardistada ja ümber kujundada. Tegelikkuses on see peamine samm, kus ETL-protsess lisab väärtust ja muudab andmeid, et luua sisukaid BI-aruandeid.
See on ETL-i võtmekontseptsioon, mille puhul rakendate eraldatud andmetele funktsioonide kogumit. Otsene liikumine or seda läbimaa on andmete tüüp, mis ei vaja mingit teisendust.
Muutmisetapi ajal saate andmetega teha kohandatud toiminguid. Oletame näiteks, et klient soovib müügitulu summat, mida andmebaasis pole. või kui tabelis on ees- ja perekonnanimi eraldi veergudes. Enne laadimist saab need ühendada.
Järgnevalt on toodud mõned näited andmete terviklikkuse probleemidest.
- Sama isiku erinevad kirjapildid, näiteks Prashant, Parshant jne.
- Ettevõtte nime esitamiseks on palju võimalusi, näiteks Google, Google Inc.
- Kasutatakse erinevaid nimetusi, nagu Cleaveland ja Cleveland.
- Võimalik, et samale kliendile toodavad erinevad rakendused mitu kontonumbrit.
- Mõned andmete jaoks vajalikud failid jäetakse tühjaks.
Samm 3) Laadimine
ETL-i protsessi viimane etapp on andmete laadimine sihtandmelao andmebaasi. Tüüpilises andmelaos laaditakse suhteliselt lühikese aja jooksul suur hulk andmeid. Selle tulemusena tuleks laadimisprotsess jõudluse jaoks optimeerida.
Koormustõrke korral tuleks kasutusele võtta taastamisprotseduurid, et toimingud saaksid tõrkekohast taasalustada, ilma et see kahjustaks andmete terviklikkust. Andmelao administraatorid peavad jälgima, jätkama ja peatama laadimisi serveri jõudluse alusel.
Laadimise tüübid:
- Esialgne koormus — täites kõik
Andmelao tabelid - Täiendav koormus — rakendamine käimas
muudatusi vastavalt vajadusele regulaarselt - Täielik värskendus — sisu tühjendamine
ühest või mitmest tabelist ja laadides need uuesti värskete andmetega
Laadi kinnitus
- Kontrollige, et võtmevälja andmed ei oleks puudu või tühjad.
- Testida tuleks sihttabelitel põhinevaid vaadete modelleerimist.
- Uurige kombineeritud väärtusi3 ja arvutatud mõõte.
- Andmete kontrollimine mõõtmete ja ajaloo tabelites.
- Uurige laaditud faktide ja dimensioonide tabeli BI-aruandeid.
ETL-i seadistamine PythonScripti abil
Selle tulemusena peate ärianalüüsi jaoks andmete koondamiseks käivitama põhilise väljavõtte teisenduskoormuse (ETL) mitmest andmebaasist andmelattu. Saadaval on mitu ETL-paketti, mis teie arvates olid teie põhikasutuse jaoks liiga suured.
Selles artiklis näitan teile, kuidas saada andmeid MySQL-ist, SQL-serverist ja Firebirdist. Kasutades Python 3.6, teisendage andmed ja laadige need SQL-serverisse (andmelattu).
Kõigepealt peame oma projekti jaoks looma kataloogi:
python_etl |__main.py |__db_credentials.py |__variables.py |__sql_queries.py |__etl.py
ETL-i seadistamiseks Pythoni abil peate oma projektikataloogis genereerima järgmised failid.
- db_credentials.py: Peaks olema kogu teave, mis on vajalik kõigi andmebaasidega ühenduse loomiseks. nagu andmebaasi parool, pordi number jne.
- sql_queries.py: Kõik sagedamini kasutatavad andmebaasipäringud andmete väljavõtmiseks ja laadimiseks stringvormingus peaksid olema saadaval.
- etl.py: Ühendage andmebaasiga ja tehke vajalikud päringud, tehes kõik vajalikud protseduurid.
- main.py: Vastutab toimingute voo juhtimise ja oluliste toimingute tegemise eest kindlaksmääratud järjekorras.
Selles saidi sql_queries.py jaotises salvestame kõik oma sql-päringud lähteandmebaasidest väljavõtmiseks ja sihtandmebaasi (andmelattu) importimiseks.
Andmebaasi mandaatide ja muutujate seadistamine
Looge failis variables.py muutuja baasi nime salvestamiseks.
datawarehouse_name = 'teie_andmelao_nimi'
Konfigureerige kõik oma lähte- ja sihtandmebaasi ühendusstringid ja mandaadid saidil db_credentials.py, nagu allpool näidatud. Salvestage konfiguratsioon loendina, et saaksime seda vajaduse korral hiljem paljudes andmebaasides korrata.
muutujatest import datawarehouse_name datawarehouse_name = 'teie_andmeladu_nimi' # sql-server (sihtmärk db, andmeladu) datawarehouse_db_config = { 'Usaldusväärne_ühendus': 'jah', 'draiver': '{SQL server}', 'server': ', 'dallata_server' andmebaas': '{}'.format(andmevaramaja_nimi), 'kasutaja': 'teie_db_kasutajanimi', 'parool': 'teie_db_parool', 'automaatne kinnistamine': tõene, } # sql-server (allikate db) sqlserver_db_configrusted = [_Connection'T ': 'jah', 'draiver': '{SQL server}', 'server': 'teie_sql_server', 'andmebaas': 'db1', 'kasutaja': 'teie_db_kasutajanimi', 'parool': 'teie_db_parool', ' autocommit': Tõene, } ] # mysql (allikas db) mysql_db_config = [ { 'kasutaja': 'teie_kasutaja_1', 'parool': 'teie_parool_1', 'host': 'db_connection_string_1', 'andmebaas' , { 'kasutaja': 'teie_kasutaja_1', 'password': 'teie_parool_2', 'host': 'db_ühenduse_string_2', 'andmebaas': 'db_2', }, ] # firebird (allikas db) fdb_db_'configs : "/teie/tee/allikasse.db", 'kasutaja': "teie_kasutajanimi", 'password': "teie_parool", } ]
SQL päringud
Selles saidi sql_queries.py jaotises salvestame kõik oma SQL-päringud lähteandmebaasidest väljavõtmiseks ja sihtandmebaasi (andmelattu) importimiseks.
Peame iga andmebaasi jaoks rakendama erinevaid süntakse, kuna töötame mitme andmeplatvormiga. Seda saame teha päringute eraldamisega andmebaasi tüübi alusel.
# näide päringut, on erinevatel andmebaasidel erinevad firebird_extract = (''' SELECT fbd_column_1, fbd_column_2, fbd_column_3 FROM fbd_table; ''') firebird_insert = (''' INSERT INTO tabel (veerg_1, veerg_2, veerg_3?) ?, ?) ''') firebird_extract_2 = (''' SELECT fbd_column_1, fbd_column_2, fbd_column_3 FROM fbd_table_2; ''') firebird_insert_2 = (''' INSERT INTO tabel_2 (veerg_1, veerg ) ''') sqlserver_extract = (''' SELECT sqlserver_column_2, sqlserver_column_3, sqlserver_column_1 FROM sqlserver_table ''') sqlserver_insert = (''' INSERT INTO, ''' SISESTAGE tabel,''2 veerg, '' ? ) mysql_extract = (''' SELECT mysql_column_3, mysql_column_1, mysql_column_2 FROM mysql_table ''') mysql_insert = (''' INSERT INTO tabel (veerg_3, veerg_1, veerg_2) VALUE, ?''ries ? class SqlQuery: def __init__(self, extract_query, load_query): self.extract_query = ekstrakti_päring self.load_query = load_query # loo SqlQuery klassi eksemplarid fbd_query = SqlQuery(SqlQuery(SqlQuery) d_insert_3) sqlserver_query = SqlQuery(sqlserver_extract , sqlserver_insert) mysql_query = SqlQuery(mysql_extract, mysql_insert) # salvesta iteratsiooni loendina fbd_queries = [fbdquery, fbd_query_1] sqlserver_queries = [sqlserver_query]my_query =my_squeries
Ekstrakti teisenduskoormus
ETL-i seadistamiseks ülalnimetatud andmeallikate jaoks Pythoni abil vajate järgmisi mooduleid:
# Pythoni moodulid import mysql.connector import pyodbc import fdb # muutujad muutujatest import andmelao_nimi
Selles saame kasutada kahte tehnikat: etl() ja etl_process().
etl_process() on protseduur andmebaasi allika ühenduse loomiseks ja meetodi etl() väljakutsumiseks andmebaasiplatvormil.
Ja teise meetodi puhul, mis on meetod etl(), käivitab see esmalt ekstraktipäringu, seejärel salvestab SQL-andmed muutujaandmetesse ja lisab need sihtandmebaasi, mis on meie andmelatu. Andmete teisendamise saab teostada tüübikorteri andmemuutujat muutes.
def etl(päring, allika_cnx, sihtmärk_cnx): # andmete ekstraktimine allikast db source_cursor = source_cnx.cursor() source_cursor.execute(query.extract_query) data = source_cursor.fetchall() source_cursor.close() # laadi andmed lattu db, kui data: target_cursor = target_cnx.cursor() target_cursor.execute("KASUTA {}".formaat(andmelao_nimi)) target_cursor.executemany(query.load_query, data) print('andmed laaditi lattu db') target_cursor.close() else : print('andmed on tühjad') def etl_process(queries, target_cnx, source_db_config, db_platform): # loo allika db-ühendus if db_platform == 'mysql': source_cnx = mysql.connector.connect(**source_db_config) elif db_platform == 'sqlserver': source_cnx = pyodbc.connect(**source_db_config) elif db_platform == 'firebird': source_cnx = fdb.connect(**source_db_config) else: return 'Viga! tundmatu db-platvorm' # sql-päringute tsükkel päringu jaoks päringutes: etl(päring, allikas_cnx, sihtmärk_cnx) # sule allika db-ühendus source_cnx.close()
Kõike kokku pannes
Nüüd saame järgmises etapis vaadata üle kõik saidi main.py mandaadid ja käivitada kõigi andmebaaside jaoks etl.
Selleks peame importima kõik vajalikud muutujad ja meetodid:
# muutujad andmebaasist db_credentials import datawarehouse_db_config, sqlserver_db_config, mysql_db_config, fbd_db_config alates sql_queries import fbd_queries, sqlserver_queries, mysql_queries alates muutujate import * # meetodid etl_process importist
Selles failis olev kood vastutab mandaatide kordumise eest, et luua ühendus andmebaasiga ja täita Pythoni abil vajalikke ETL-i toiminguid.
def main(): print('käivitage etl') # loo ühendus sihtandmebaasi (sql-server) jaoks target_cnx = pyodbc.connect(**datawarehouse_db_config) # silmus läbi mandaatide # mysql for config failis mysql_db_config: proovi: print("laadimine db: " + config['andmebaas']) etl_process(mysql_queries, target_cnx, config, 'mysql') välja arvatud erand veana: print("etl for {} has error".format(config['andmebaas'])) print ('veateade: {}'.format(error)) jätka # sql-server konfiguratsiooni jaoks failis sqlserver_db_config: try: print("loading db: " + config['andmebaas']) etl_process(sqlserver_queries, target_cnx, config, ' sqlserver') välja arvatud erand veana: print("etl for {} has error".format(config['andmebaas'])) print('veateade: {}'.format(error)) jätka # firebird for config in fbd_db_config: try: print("loading db: " + config['andmebaas']) etl_process(fbd_queries, target_cnx, config, 'firebird') välja arvatud erand veana: print("etl for {} has error".format(config ['andmebaas'])) print('veateade: {}'.format(error)) jätka target_cnx.close() if __name__ == "__main__": main()
Tippige terminali python main.py ja olete just loonud puhta pythoni skripti abil ETL-i.
ETL-i tööriistad
Turul on mitmeid andmehoidla tööriistu. Siin on mõned kuulsamad näited:
1. MarkLogic:
MarkLogic on andmehoidlasüsteem, mis kasutab andmete integreerimise lihtsamaks ja kiiremaks muutmiseks mitmesuguseid ärivõimalusi. See võib teha päringuid mitmesuguste andmete, näiteks dokumentide, seoste ja metaandmete kohta.
https://www.marklogic.com/product/getting-started/
2. Oraakel:
Oracle on valdkonna populaarseim andmebaas. See pakub laias valikus andmelaolahendusi nii kohapealsete kui ka pilveteenuste jaoks. See aitab parandada klientide kogemusi, suurendades tegevuse tõhusust.
https://www.oracle.com/index.html
3. Amazon RedShift:
Redshift on Amazoni andmehoidla lahendus. See on lihtne ja kulutõhus lahendus erinevat tüüpi andmete analüüsimiseks standardse SQL-i ja olemasolevate ärianalüüsi tööriistadega. Samuti võimaldab see täita keerulisi päringuid petabaitide struktureeritud andmete kohta.
https://aws.amazon.com/redshift/?nc2=h_m1
Järeldus
See artikkel andis teile põhjaliku ülevaate sellest, mis on ETL, ja samm-sammult õpetuse Pythonis ETL-i seadistamiseks. See andis teile ka nimekirja parimatest tööriistadest, mida enamik organisatsioone tänapäeval oma ETL-i andmekanalite loomiseks kasutab.
Enamikul tänapäeva organisatsioonidel on seevastu tohutul hulgal väga dünaamilise struktuuriga andmeid. Selliste andmete jaoks nullist ETL-i konveieri loomine on raske protseduur, kuna organisatsioonid peavad selle konveieri loomiseks kasutama palju ressursse ja seejärel tagama, et see suudab sammu pidada suure andmemahu ja skeemimuudatustega.
Umbes Autor
Prashant Sharma
Praegu omandan tehnoloogia bakalaureusekraadi (B.Tech) Vellore Tehnoloogiainstituudis. Olen programmeerimisest ja selle tegelikest rakendustest, sealhulgas tarkvaraarendusest, masinõppest, süvaõppest ja andmeteadusest, väga entusiastlik.
Loodan, et teile meeldib artikkel. Kui soovite minuga ühendust võtta, saate ühenduse luua:
või muude kahtluste korral saate saatke kiri mulle ka
seotud
- '
- "
- konto
- aktiivne
- Materjal: BPA ja flataatide vaba plastik
- Amazon
- analytics
- rakendused
- PIIRKOND
- artikkel
- Automatiseeritud
- Varundamine
- võimendamine
- ehitama
- Ehitus
- äri
- ärianalüüsi
- helistama
- Kontroll
- Cleveland
- Cloud
- pilvteenustest
- kood
- KOMMUNIKATSIOON
- ettevõte
- ühendus
- jätkama
- loomine
- volikiri
- andmed
- andmete integreerimine
- andmeteadus
- andmekogus
- andmelaod
- andmebaas
- andmebaasid
- sügav õpe
- arendama
- Arendajad
- & Tarkvaraarendus
- seadmed
- mõõde
- dokumendid
- juht
- efektiivsus
- jms
- täitmine
- juhid
- Kogemused
- kaevandamine
- Väljavõtted
- ebaedu
- esimene
- voog
- formaat
- värske
- täis
- suunata
- riistvara
- siin
- Suur
- ajalugu
- Kuidas
- Kuidas
- HTTPS
- identifitseerima
- mõju
- importivate
- Kaasa arvatud
- info
- integratsioon
- Intelligentsus
- küsimustes
- IT
- Võti
- suur
- Õppida
- õppimine
- joon
- nimekiri
- koormus
- masinõpe
- juhtimine
- kaart
- Turg
- Meedia
- Populaarseim
- liikuma
- nimed
- teade
- numbrid
- Pakkumised
- tegutsevad
- operatsioonisüsteemid
- Operations
- oraakel
- et
- organisatsioonid
- Muu
- partnerid
- Parool
- jõudlus
- inimesele
- Platvormid
- populaarne
- Toodetud
- Produktsioon
- Programming
- Programmid
- projekt
- tõmmates
- Python
- Töötlemata
- reaalajas
- Reaalsus
- andmed
- taastumine
- Suhted
- Aruanded
- Vahendid
- vastus
- tulu
- teadus
- Teenused
- komplekt
- Lühike
- lihtne
- So
- tarkvara
- tarkvaraarenduse
- Lahendused
- SQL
- Stage
- riik
- salvestada
- kauplustes
- süsteem
- süsteemid
- sihtmärk
- tech
- tehnikat
- Tehnoloogia
- Allikas
- aeg
- Transformation
- juhendaja
- Värskendused
- väärtus
- müüjad
- maht
- Ladu
- Ladustamine
- iga nädal
- Töö
- töötab