DS2-proseduuri / ohjelmointisyntaksi Tapio Kalmi Team Leader, Data Management Consulting SAS Institute Oy
Sisältö DS2 konsepti DS2, HPDS2 ja FedSQL proseduurit Yleistä DS2 ja FedSQL kielistä DS2 kielen pääkohdat Yhteenveto Linkkejä tietolähteisiin
DS2 konsepti Uusi SAS teknologia ja ohjelmointikieli tiedonhallintaan Osa Base SAS asennusta, joten kaikkien käytettävissä Toimii Base SASin alustalla ja sen ulkopuolella Käyttää Base SASissa LIBNAME yhteyksiä eri tietokantoihin Jos kanta muu kuin SAS, tarvitaan kannan SAS/ACCESS, jotta toimisi Tukee säikeistettyjen SAS palvelujen ajamista niitä tukevilla alustoilla Erilaisilla SAS palvelimilla ja työasemilla Tietokantapalvelimilla
DS2 ajoympäristöt Base SAS palvelimet ja työasemat (PROC DS2 ja PROC FEDSQL) SAS Enterprise Miner ympäristö SAS Federation palvelin SAS High Performance Grid ympäristö SAS High Performance Analytics ympäristö (PROC HPDS2) SAS In Memory Analytics ympäristöt Tietokantapalvelimet, joissa SAS Code Accelerator on asennettuna Greenplum Teradata
BASE SAS teknologia SAS 6: MVA Multi Vendor Architecture (MVA) teknologia mahdollistaa sen, että samaa SAS ohjelmaa voidaan ajaa sellaisenaan eri ympäristöissä. SAS ajo ajetaan lähes aina palvelimella tai työasemalla, jossa SAS asennus. Poikkeus on ollut SAS/Access tuotteilla mahdollinen SQL Pass Through, jolla on voitu lähettää SAS sovelluksen ohjelmakoodia tietokantapalvelimelle ajoon. Application Layer (Proc Layer) Portable Supervisor Code (X Layer) Host Supervisor Code (W Layer)
BASE SAS + DS2 teknologia SAS 9.4: MVA + TKTS Threaded Kernel (TK) Threaded Kernel Table Services (TKTS) Embedded Process (EP) Uutuutena DS2, joka on Base SASin rinnalle tehty ympäristö. DS2 käynnistää oman prosessin (tai prosesseja, jos säikeistetty ajo). Base SASissa laajennuksia, joilla se liitetään DS2een. SAS Code Accelerator asennus sisältää TKTS:n tietokantapalvelimella tarvittavat osat. Application Layer (Proc Layer) Portable Supervisor Code (X Layer) Host Supervisor Code (W Layer) Threaded Kernel
SAS DS2 konsepti MVA (character, double, missing) TKTS (char, nchar, double, int, varchar, missing, null, etc) BASE PROCs DATA STEP MVA Engine APIs SPDS BASD SPD ACCESS DRIVERS ODS OUTPUT PROC FEDSQL PROC DS2 FEDSQL DS2 MVA TASKS TK THREADS
DS2 rajapinnat tietokantoihin DS2 ajurit on saatavissa kaikille alla mainituille ja TKTS tuki vain lihavoiduille Aster DB2 (vain UNIX ja PC ympäristöt) Greenplum MySQL Netezza ODBC yhteensopivat kannat Oracle SAP SAS SAS SPD Engine Sybase IQ Teradata Huomaa: DS2 ei tue SAS SPD Server taulujen käyttöä ilman SPD Engine osaa.
DS2, HPDS2 ja FEDSQL proseduurit Base SAS kutsuu TKTS ympäristön DS2 ja FedSQL ohjelmia niitä vastaavilla DS2, HPDS2 ja FEDSQL proseduureilla Ohjelmalogiikka kirjoitetaan DS2 ja FedSQL määrityksin ja komennoin PROC DS2 <option(s)>;...ds2 language statements RUN; RUN CANCEL; QUIT; PROC FEDSQL <option(s)>;...fedsql statements QUIT;
Yleistä DS2 ohjelmointikielestä Täydentää SAS DATA vaihetta, mutta ei korvaa sitä Olio ohjelmoinnin rakenteita, mutta ei kaikkia varsinaisen olioohjelmoinnin ominaisuuksia kuten esimerkiksi periytyvyys Sisältää Uusia tietomuotoja, kuten ANSI SQL tietomuodot Uusia ohjelmointirakenteita Valmiita metodeja Mahdollisuuden upottaa FEDSQL ohjelmakoodia DS2 koodin sisään Lisäksi voidaan tehdä käyttäjän määrittelemiä metodeja ja paketteja
Yleistä FedSQL ohjelmointikielestä ANSI SQL:1999 standardin mukainen Yhteinen SQL syntaksi riippumatta tietokannasta Mukana ANSI SQL tietomuodot (INT, FLOAT, DECIMAL, ) Tukee säikeistystä Voidaan käyttää DS2:n kautta tai suoraan
DS2 vs DATA vaihe, eroavuuksia Taulua ei oletusarvoisesti kirjoiteta uudelleen Kaikki uudet muuttujat tulee määritellä PUT komennon sarake ja rivi parametrit eivät ole käytettävissä Lainausmerkkien käyttö erilaista määrittää muuttujan nimen määrittää literaalin %TSLIT() funktio makromuuttujaviittauksia varten ABORT, DISPLAY, ENDSAS, ERROR, FILE, INFILE, INPUT, MERGE, MODIFY, UPDATE ja monta muuta komentoa/funktiota puuttuu Formaattivalikoima on omansa
DS2, uusia komentoja IF lauseke sijoituslauseessa x = if y<>0 then x/y else.; Tämä ei anna ERRORia, kuten x=ifn(y,x/y,.); DATA vaiheessa SELECT lauseke sijoituslauseessa samaan tyyliin kuin IF Esimerkkejä uusista funktioista INTDT lisää päiviä DATE arvoon tai vähentää niitä INTTS lisää sekunteja TIMESTAMP arvoon tai vähentää niitä NULL tarkistaa, onko kentän arvo NULL POWER korottaa luvun haluttuun potenssiin SQLEXEC suorittaa FedSQL komentoja DS2 ohjelmassa
DS2 ohjelmalohkot ohjelmalohkojen alku ja loppukomennot DATA...ENDDATA PACKAGE...ENDPACKAGE THREAD...ENDTHREAD DO...END METHOD...END Ohjelmalohkoja voi olla sisäkkäin ja peräkkäin DATA ohjelmalohkoja voi olla vain yksi ja sen on oltava viimeisenä Sen sisällä on aina metodeja ja tarvittaessa myös DO rakenteita
DS2 metodit Metodi on ohjelmalohko, jota voidaan kutsua nimellä METHOD komento antaa metodille nimen ja aloittaa ohjelmalohkon END komento päättää ohjelmalohkon Metodin nimi on globaali Metodin muuttujat voivat olla globaaleja tai paikallisia Systeemimetodit (INIT, RUN, SETPARMS ja TERM) sekä joukko valmiiksi tehtyjä metodeja tulevat asennuksen mukana Lisäksi käyttäjä voi määritellä omia metodeja ja tallettaa niitä paketteihin
DS2 muuttujien määritykset ja scope Muuttujat tulee aina alustaa DECLARE (DCL) komennolla Ohjelmalohkojen ulkopuolella määritellyt muuttujat ovat globaaleja Ohjelmalohkoissa voidaan määritellä lokaaleja muuttujia THIS.muuttujanimi viittauksella viitataan globaaliin muuttujanimeen Muuten muuttujaa etsitään eri ohjelmalohkoista viittauksen tehneestä ohjelmalohkosta alkaen uloimpaa ohjelmalohkoa kohti ja käytetään sitä määritystä, joka ensimmäisenä löytyy Jos muuttujalle ei löydy määritystä, luodaan uusi local DOUBLE muuttuja Vain DATA ohjelmalohkossa määritellyt muuttujat menevät output tauluun
Esimerkki 1 Alustuskomennot Muuttujien alustaminen DECLARE ja RETAIN komennoin INIT, RUN ja TERM metodit Systeemimetodit, jotka ovat aina olemassa ja helposti käytettävissä SET komento INIT metodissa Suoritetaan vain kerran, ei automaattista loop rakennetta SET komento RUN metodissa Suoritetaan kuten DATA vaiheessa, automaattinen loop rakenne SET komennoissa esimerkki FedSQL koodista upotettuna DS2 koodiin
proc ds2; data AllHouses (overwrite=yes drop=(stylemax MaxSize)) StyleMax (overwrite=yes keep=(stylemax)) td.biggesthouse (overwrite=yes keep=(maxsize)); declare doublesizedif StyleMax MaxSize; retain StyleMaxMaxSize 0; method init(); set {select mean(sqfeet) as avgsize from INIT metodi suoritetaan vain yhden kerran ohjelman alussa. h.houses {option locktable=share}}; end; Sinisellä korostettuna FEDSQL ohjelmointikielinen osuus.
method run(); set {select *from h.houses {option locktable=share} order by style}; by style; StyleMax =max(stylemax, sqfeet); SizeDif=sqfeet avgsize; output allhouses; Jos SET komento puuttuu, if last.style then do; RUN metodi suoritetaan vain yhden kerran. output stylemax; Jos SET komento mukana, MaxSize=max(MaxSize,StyleMax); suoritetaan kerran per rivi. StyleMax =0; end; Sinisellä korostettuna FEDSQL ohjelmointikielinen osuus. end;
method term(); output td.biggesthouse; end; enddata; run; quit; TERM metodi suoritetaan vain yhden kerran ohjelman lopussa.
Valmiiksi tehdyt DS2 metodit FCMP PROC FCMP:llä määriteltyjen funktioiden käyttö HASH ja HASH Iterator HASH toiminnallisuus kuten DATA vaiheessa, mutta eri syntaksi LOGGER Rajapinta SAS Logging palveluihin MATRIX DS2:n sisään rakennettu matriisilaskenta (kevyempi kuin IML) SQLSTMT Tietokantataulujen luontiin, ylläpitoon ja poistamiseen
PACKAGE ohjelmalohko Muuttujamääritysten ja metodien tallettaminen DS2 paketiksi Logiikka talletetaan kryptattuna tauluun Talletettuihin paketteihin voidaan viitata DS2 ja FedSQL ohjelmissa Taulut voivat olla missä tahansa kirjastossa/tietokannassa
Esimerkki 2: Oma metodi ja paketti package zoo.animal / overwrite=yes; declare varchar(100) s; method animal(varchar(100) s); this.s = s; end; method speak(); put s; end; endpackage; run;
data _null_; method init(); declare package zoo.animal a1; declare package zoo.animal a2( lion'); a1 = a2; a1.speak(); a2.speak(); a1 = _new_ zoo.animal( giraffe'); a1.speak(); a2.speak(); end; enddata; run;
Method Overload Tarkoittaa tilannetta, jossa kaksi tai useampi metodi ovat saman nimisiä, mutta joilla on erilaiset kutsuparametrit Näissä tilanteissa DS2 käyttää sitä metodia, jonka parametrit vastaavat kutsuparametreja Tämä tekniikka mahdollistaa sen, että saman nimistä metodia voidaan kutsua kutsuparametrina käytetyn sarakkeen tietomuodosta riippumatta Metodit hoitavat tarvittavan logiikan taustalla Kutsuvan ohjelman tekeminen helpottuu
DS2 säikeistys Koodaus tehty ohjelmoijalle hyvin helpoksi Säikeistettävä ohjelmalogiikka kirjoitetaan THREAD ohjelmalohkoon Ohjelma koodataan aivan samalla tavalla kuin muut DS2 ohjelmat DATA ohjelmalohkosta kutsutaan THREAD ohjelmalohkoa ja kerrotaan käytettävien säikeitten määrä Olennaisinta on käyttää säikeistystä oikein eli vain niissä tapauksissa, joissa saadaan oikea lopputulos myös säikeistetyllä ajolla Rivikohtaisen käsittelyn tulee olla toisista riveistä riippumatonta Tarvittaessa yhdistely tehdään pääohjelmassa, joka kutsui säikeitä
DS2 In-Database Lisenssoituna tulee olla Base SAS SAS In Database Code Accelerator SAS Access Interface tietokannalle (Greenplum tai Teradata) SAS Embedded Process tulee olla asennettuna tietokantaan Ohjelmassa tulee olla THREAD ohjelmalohko ja DATA ohjelmalohko Käytetyn taulun tulee sijaita ko tietokannassa
Esimerkki 3: Säikeistys In-Database thread th_pgm / overwrite=yes; retain isum irows 0; keep isum irows; method run(); set teralib.indata; irows=irows+1; isum=isum+i; end; method term(); output; end; endthread; run;
Esimerkki 3: Säikeistys In-Database data out(overwrite=yes); retain fsum 0; retain nrows 0; keep fsum nrows; dcl thread th_pgm m; method run(); set from m threads=1; fsum =fsum + isum; nrows = nrows + irows; end; method term(); output; end; THREADS= parametrilla ei ole merkitystä In Database enddata; tapauksessa, koska tietokanta run; jakaa ajon säikeisiin omalla logiikallaan. Sen vuoksi tässä voi olla arvona vaikka 1 ja silti ajo toimii säikeistettynä. THREADS parametrin voi tässä tapauksessa vaikka jättää kokonaan pois.
Milloin DS2 koodaus kannattaa? DATA vaiheen ohjelmia kannattaa muuttaa DS2 ohjelmiksi vain silloin kun siitä on todellista hyötyä. Esimerkiksi: Jos laskennan tarkkuus edellyttää uusien tietomuotojen käyttöä Jos tarvitaan SAS FedSQL ohjelmalogiikkaa Jos tarvitaan matriisilaskennan ja DATA vaiheen yhdistämistä Jos optimiratkaisu vaatii säikeistettyä moniajoa (Threaded Kernel, TK) tietokantapalvelimella, High Performance Analytics palvelimella tai SAS Federation palvelimella Jos tarvitaan uusia komentoja, metodeja, paketointia tai integraatio muihin ympäristöihin (SAS ympäristöt,teragram,r, C/C++, IML)
Miten DATA vaiheesta DS2? Muutamien SAS ratkaisujen scoring lähdekoodien muuntamista varten on tehty PROC DSTRANS, mutta se Muuntaa vain osan DATA vaiheen komennoista Käsittelee vain yhden ohjelmakoodin kerrallaan Tekee hyvin vain alkuperäisen tehtävänsä, ei muuta muuntaa vain varsin yksinkertaiset DATA vaiheen ohjelmat onnistuneesti Näin ollen on suositeltavaa tehdä muunnos manuaalisesti koodaamalla
DS2 yhteenveto Mitä? Uusi DATA vaiheen kaltainen ohjelmointikieli, joka tukee säikeistystä Miksi? Voidaan ajaa SAS logiikkaa uusissa paikoissa Uudet tietotyypit antavat lisämahdollisuuksia Optimointia moderneilla ohjelmointitekniikoilla Kenelle? Kokeilumielessä SAS 9.3 käyttäjille, täysi tuki SAS 9.4:n mukana Milloin? Heti, kun tarvitaan uusia ominaisuuksia. Koodaaminen on työläämpää kuin Base SAS ympäristössä, mutta ajot voivat nopeutua kertaluokkaa.
DS2 ja FedSQL dokumentaatio Base SAS 9.4 Procedures Guide http://support.sas.com/documentation/cdl/en/proc/64787/pdf/default/p roc.pdf SAS 9.4 DS2 Language Reference http://support.sas.com/documentation/cdl/en/ds2ref/66009/pdf/default /ds2ref.pdf SAS 9.4 FedSQL Language Reference http://support.sas.com/documentation/cdl/en/fedsqlref/66010/pdf/defa ult/fedsqlref.pdf
DS2 lisäinformaatiota SAS Aamutori 18.10 klo 8:30 10:30, Innopoli 2, Tekniikantie 14, Espoo Data Step 2, DS2 lisätarkkuutta laskentaan, uusia tietomuotoja ja paljon muuta sas.com sivuston päivitykset www.support.sas.com The SAS Training Post ohjelmointivinkit http://blogs.sas.com/content/sastraining/
KIITOS, KYSYMYKSIÄ?