Tilrettelegging av store datagrunnlag for analyse med SAS Scalable Performance Data Engine (SPDE) Steinar Helstrup 8.juni 2017
Agenda Bakgrunn Strukturering av datagrunnlag for analyse Last av datagrunnlag med SAS DI Studio Eksempel på spørringer og responstid Oppsummering 2
1. Bakgrunn
Hva gjør vi? Sylinder Analyse Sylinder analyse er analyseavdelingen hos Sylinder. Vi er 100% eid av Vi bistår med analyser og beslutningsstøtte til, Trumf og øvrige samarbeidspartnere PERSONALISERT KUNDEDIALOG: Bygge modeller for personalisert dialog med kundene og implementere disse. Digitale tilbudskuponger basert på handlemønster EFFEKTANALYSER: Hva var effekten av kampanjen? Regne hjem verdien av kampanjen KUNDEINNSIKT: Hva kjennetegner forbrukerne av ulike produkter? Hva gjør kunden? Gjenkjøp? Kryssalg? DRIVERANALYSER: Hva driver veksten i kjeden? Hvilke faresignaler kan vi plukke opp fra dataene? RAPPORTERING: Standardisere og kontinuerlig videreutvikle rapportering for sluttbrukerne Bindeledd mellom forretningssiden og IT-siden: Analytikere som leker i sandkassa Tolke og forstå dataene Kontrollere datakvaliteten Aggregere/bearbeide dataene slik at de får rett form og kvalitet til formålet Bygge innsikt for beslutningsstøtte og kundedialog 4
Stort analysegrunnlag Kjede/Butikk Tid Vare (3,5 milliarder per år) Kampanje BONG DATABASE (Oracle) Trumf (>50% av omsetningen)
Hvordan kommer vi dit Analyseverktøy og systemer Database: Oracle (Toad) og SQL Server (MS SQL Server) Rapportering/Analyse ETL SAP Business Objects (SAP BO) MS Office (Fortrinnsvis Excel, noe Power Point) SAS DI Studio Informatica Power Center (PC) Data Mining SAS Enterprise Guide SAS Enterprise Miner Optimering SAS Market Optimization (MO) 6
2. Strukturering av datagrunnlag for analyse
SAS Analysemiljø hos Sylinder Til nå: SAS miljø installert på server hos ekstern driftspartner Fremover: SAS miljø settes opp på intern server Krav/begrensinger Begrenset linjekapasitet mellom database og SAS server Unngå installasjon og drift av relasjonsdatabase hos ekstern driftspartner Effektiv drift og forvaltning Enkelt slette gamle transaksjoner Rask AD-HOC analyse Utfordringer Dårlig ytelse på uttrekk av store datamengder fra kildetabeller i datavarehus (Oracle Exadata) Dårlig ytelse på spørring mot store SAS datasett Lite brukervennlig å lese fra mange datasett (splittet på tid/kjede) Løsning Kopiere datagrunnlag til SAS Datasett Sammenstille fakta og dimensjon i samme datagrunnlag Partisjonering av data Parallellisering med SPDE filer Rask disk (I/O disk) 8
SAS Analysemiljø hos Sylinder Internt driftsmiljø SAS Server (eksternt driftsmiljø) KILDE BONG DATABASE (Oracle) SAS DI Studio STAGE (SAS BASE datafiler) SAS DI Studio DETAIL DATASTORE (DDS) Dimensjoner Fakta (SAS BASE datafiler) SAS DI Studio ANALYSE MART (SAS BASE og SPDE filer) Ad-Hoc Analyse (SAS EG) Utvikling av modeller (SAS EG/EM) Begrenset linjekapasitet Drift av modeller (DI Studio) Resultater fra modeller
Sammenstilling av fakta og dimensjoner Slår opp og legger til sentral info fra dimensjonstabeller som ekstra felter Formål: I størst mulig grad unngå å koble mot dimensjoner før filtrering og aggregering av fakta Kilde SAS Detail Datastore (DDS): Transaksjon FAKTA Transaksjon FAKTA Detaljtransaksjon per handel/vare Transaksjon FAKTA Detaljtransaksjon per handel/vare En datafil per: måned, Detaljtransaksjon kjede, kundetypeper handel/vare En datafil per: måned, kjede, kundetype En datafil per: måned, kjede Transer alle kjeder siste 14 måneder m/siste nøkkelinfo på vare, butikk og kunde Transaksjon Vare Butikk Kunde Tid Kunde DIM Dimensjoner med historikk Tid DIM Vare DIM Dimensjoner med historikk Butikk DIM Dimensjoner med historikk 10
Partisjonering av datasett Splitt av datasett i mindre grupper av kunder Gjør det enkelt og raskt å bygge en analyse på en gruppe kunder og teste/validere mot en annen gruppe Muliggjør parallellisering av videre spørringer Datasett med nøkkelinfo fra dimensjoner Datasett Transaksjon Vare Butikk Kunde Tid 16 datasett splittet på tilfeldige grupper av kunder Datasett Transaksjon Vare Butikk Kunde Tid 1 Gruppe 01 2 Gruppe 02 3 Gruppe 03 4 Gruppe 04 5 Gruppe 05 1 Alle Trumf kundene blir fordelt i en tilfeldig kundegruppe ved innmelding Gruppe 01-16 11 6 Gruppe 06 7 Gruppe 07 8 Gruppe 08 9 Gruppe 09 10 Gruppe 10 11 Gruppe 11 12 Gruppe 12 13 Gruppe 13 14 Gruppe 14 15 Gruppe 15 16 Gruppe 16
3. Last av datagrunnlag med SAS DI Studio
Splitt av datasett med loop i SAS DI Studio Kasselapp m/varer Kasselapp totalsum Oversikt over eksisterende SAS datafiler Lage dynamisk liste med måned/kjede 14*6 = 84 Kjører 8 parallelle SAS sesjoner som løper igjennom listen med dataset som skal splittes Splitt av dataset med dynamsisk SAS script 84 filer splittes i 16 kundegrupper = 1344 midlertidige filer # År/Måned Kjede 1 2016/01 1 2 2016/01 2 3 2016/01 3 4 2016/01 4 5 2016/01 5 6 2016/01 6 7 2016/02 1.. 84x 1344x 13
Splitt av datasett - Dynamisk SAS Script (1) Eksempel på oppbygging av SAS script Parametere År/Måned= &am. KjedeKunde = &kk. Opprett dynamisk view Skriv til 16 nye datafiler Bruk av SAS script gjør det enkelt å verifisere hva som skjer, samt enkelt å legge til nye felter. Les fra view Splitt datafil Kjører SAS script 14
Splitt av datasett - Dynamisk SAS Script (2) Resultat Opprett dynamisk view Skriv til 16 nye datafiler Les fra view Splitt datafil 15
Last av midlertidige datafiler til SPDE tabeller (fakta og sumtabeller) Liste med 16 kundegrupper 8 parallelle kjøringer BongVare Bong Sumtabeller Lager dynamisk liste med måned/kjede 14*6 = 84 16 Append til 16 ulike SPDE filer - Ca 50 fysiske filer per tabell - Hver fysiske fil er komprimert til ca 200Mb - Lagret på I/O disk Sletter midlertidige datafiler
Variabler for prediksjonsmodeller Har laget en DI Studio-jobb som beregner alle variablene vi bruker i alle prediksjonsmodellene Løper kun igjennom fakta tabellen en gang 8 parallelle kjøringer Oppretter modellvariabler Liste med 16 kundegrupper Sammenstill er modellvariabler Beregner modellvariabler Fjerner kunder som har reservert seg Lagrer modellvariabler Finner kunder som har reservert seg 17
Score av en prediksjonsmodell En DI Studio jobb per prediksjonsmodell Meget raskt å gjøre score når modellvariablene er forhåndsberegnet Liste med 16 kundegrupper Sekvensiell loop Henter modell variabler og scorer kundene Sammenstiller 16 dataset med score verdier i et view Cut betingelse og lagring til SAS dataset Laster resultat til temp tabell i Oracle Kryssbytter nye data med forrige lastet versjon 18
4. Eksempel på spørringer og responstid
Eksempel på ytelse i internt SAS miljø (I) TESTDATA Antall rader 82 millioner Antall unike kunder 90.000 Størrelse 12,9 GB data Tidsforbruk uttrekk alle Kiwi handler med alle varer for Trumf kundegruppe Type Tidsbruk SAS SPDE 16 sek SAS Base 20 sek Oracle Exadata 2 min 3 sek * * Spørringen internt i Oracle responderer på 730 ms. Resterende tid brukes til å overføre data til SAS serveren 26 DATA WORK.UTTREKK_SPDE; 27 SET SANASPDE.SM003T_FBONGVAREKUNDE_TRUMF3_09; 28 WHERE PARTISJONLISTE_LNR=9 /*TRUMFTRANSER KIWI*/; 29 RUN; NOTE: The data set WORK.UTTREKK_SPDE has 37277087 observations and 37 variables. NOTE: DATA statement used (Total process time): real time 16.48 seconds cpu time 25.02 seconds 30 31 DATA WORK.UTTREKK_BASE; 32 SET SANALYSE.SM003T_FBONGVAREKUNDE_TRUMF3_09; 33 WHERE PARTISJONLISTE_LNR=9 /*TRUMFTRANSER KIWI*/; 34 RUN; NOTE: The data set WORK.UTTREKK_BASE has 37277087 observations and 37 variables. NOTE: DATA statement used (Total process time): real time 19.70 seconds cpu time 19.60 seconds 35 36 DATA WORK.UTTREKK_ORA; 37 SET OAN01.SM003T_FBONGVAREKUNDE_TRUMF3; 38 WHERE PARTISJONLISTE_LNR=9 /*TRUMFTRANSER KIWI*/ 39 AND UTVALGGRUPPE_NR=9; 40 RUN; NOTE: The data set WORK.UTTREKK_ORA has 37277087 observations and 37 variables. NOTE: DATA statement used (Total process time): real time 2:02.96 cpu time 2:30.08 20
Eksempel på ytelse i internt SAS miljø (II) TESTDATA Antall rader 82 millioner Antall unike kunder 90.000 Størrelse 12,9 GB data Tidsforbruk uttrekk ALLE handler med ALLE varer for EN butikk Type Tidsbruk SAS SPDE * 0,56 sek SAS Base 4,69 sek Oracle Exadata 0,47 sek *Henter raskt uten behov for indeksering av felter 26 DATA WORK.UTTREKK_SPDE; 27 SET SANASPDE.SM003T_FBONGVAREKUNDE_TRUMF3_09; 28 WHERE BUTIKK_LNR=14175; 29 RUN; NOTE: The data set WORK.UTTREKK_SPDE has 67667 observations and 37 variables. NOTE: DATA statement used (Total process time): real time 0.56 seconds cpu time 7.84 seconds 31 DATA WORK.UTTREKK_BASE; 32 SET SANALYSE.SM003T_FBONGVAREKUNDE_TRUMF3_09; 33 WHERE BUTIKK_LNR=14175; 34 RUN; NOTE: The data set WORK.UTTREKK_BASE has 67667 observations and 37 variables. NOTE: DATA statement used (Total process time): real time 4.69 seconds cpu time 4.67 seconds 36 DATA WORK.UTTREKK_ORA; 37 SET OAN01.SM003T_FBONGVAREKUNDE_TRUMF3; 38 WHERE BUTIKK_LNR=14175 39 AND UTVALGGRUPPE_NR=9; 40 RUN; NOTE: The data set WORK.UTTREKK_ORA has 67667 observations and 37 variables. NOTE: DATA statement used (Total process time): real time 0.47 seconds cpu time 0.31 seconds 21
5. Oppsummering
Oppsummering Lisens SAS SPDE er inkludert i SAS BASE Egenskaper SAS Performance Data Engine er designet for å levere data med høy ytelse Organiserer data i et strømlinjevennlig format Tillater parallelle spørringer Utnytter bruk av flere CPU er Automatisk sortering ved bruk av BY Begrensninger (viktigste) Dårlig ytelse ved bruk av view mot en SPDE tabell Tillater enten komprimere eller kryptering av datasett Ikke mulig å kopiere datafiler direkte i operativsystem Konklusjon Kan være et meget bra supplement til standard SAS Base filer Viktig å teste ytelse på SAS Base vs SPDE dataset for å finne ut hva som fungerer best ift behov 23