dilluns, 30 de gener de 2017

Master Data Services (II)

En el passat post vam veure què era i per què servia el component Master Data Services d'SQL Server. Avui veurem quines estructures de dades estan disponibles.
L'estructura principal de MDS és el model, seria equivalent a una BBDD. Cada model conté una o més entitats, que serien equivalents a les taules. I cada entitat té atributs, que serien equivalents al les columnes d'una taula de BBDD.
Per crear un model nou hem d'anar a l'url de MDS (ex. http://<servidor>/MDS/default.aspx) a l'apartat "System Administration"

I després a Manage --> Models
Des d'aquest menú podrem crear nous models o editar el nom dels models existents.
Des del mateix menú Manage podem seleccionar Entities per afegir entitats als models.
 
Al crear una nova entitat hi ha 2 punts importants:
- Name for staging tables, que serà el nom de la taula staging que ens servirà per poder fer càrregues massives (ho veurem al proper post)
- Create Code values automatically. Per defecte tota entitat té 2 atributs: Code, que és la Primary Key, i name. En aquest punt escollirem si el code volem que sigui autogenerat o no.

Si anem a editar una entitat podrem modificar els seus atributs.
Quan afegim un nou atribut podrem triar el seu tipus de dades, longitud, domini, format, etc. La majoria d'aquests atributs no són editables, així que penseu-vos-els bé abans de crear-los.

Amb això ja podeu crear les estructures bàsiques per poder començar a operar amb MDS. En un nivell més avançat es poden crear jerarquies, business rules, etc.

Us recomano utilitzar Internet Explorer en la consola de MDS ja que ni amb Chrome ni Firefox el format es veu bé (ex. alguns camps deshabilitats no es veu que estan deshabilitats) , ni totes les funcions javascript funcionen.

En el proper post veurem com omplir de dades les entitats que hem creat als nostres models.

dilluns, 16 de gener de 2017

Master Data Services (I)

Odio l'Excel. Si no ho dic com a mínim un cop al dia és que no he treballat prou.
Amb l'SSIS s'ha de vigilar amb els drivers...que si 32-bit o 64-bit...si toquen el nom d'una columna ja falla tot...els tipus de dades els agafa sobre una mostra i si hi ha un tipus de dades diferent falla la càrrega....etc....etc....etc
També odio als usuaris que tenen les seves dades guardades en Excels i que acaben creuant amb les dades del DWH, però només tenen ells les dades. I després volen que les coses quadrin!

Com a possible solució als dos problemes hi ha un component infrautilitzat d'SQL Server, el Master Data Services (MDS) (https://msdn.microsoft.com/en-us/library/ee633763(v=sql.120).aspx).
Per a l'usuari és un plug-in d'excel que li permet introduir i compartir dades fàcilment, guardar versions. Per al desenvolupador d'ETL és una taula de BBDD que no té els problemes de l'Excel.

MDS està pensat per que les empreses tinguin una sola realitat de les dades mestres, ja que la informació emmagatzemada es pot compartir fàcilment a diversos usuaris, però al final és una bona manera de compartir tant dades mestres com qualsevol altre tipus de dades.

MDS té un component web, que és des d'on es gestionen les estructures, permisos, versions, etc, i un plug-in d'Excel, des d'on es poden introduir les dades fàcilment.


Per instal·lar el MDS es fa des del setup normal de l'SQL Server. Si no voleu tenir problemes amb el servidor d'IIS us recomano executar les següents comandes en Power Shell:
Install-WindowsFeature Web-Mgmt-Console, AS-NET-Framework, Web-Asp-Net, Web-Asp-Net45, Web-Default-Doc, Web-Dir-Browsing, Web-Http-Errors, Web-Static-Content, Web-Http-Logging, Web-Request-Monitor, Web-Stat-Compression, Web-Filtering, Web-Windows-Auth, NET-Framework-Core, WAS-Process-Model, WAS-NET-Environment, WAS-Config-APIs 
 
Install
-WindowsFeature Web-App-Dev, NET-Framework-45-Features -IncludeAllSubFeature –Restart 
 

Un cop instal·lat heu d'anar al configuration manager per escollir el site web que utilitzareu i la BBDD on es guardaran les dades de MDS.

El proper dia veurem les estructures de dades que té MDS i com es tradueixen en taules de BBDD.



dilluns, 2 de gener de 2017

SSIS i Amazon S3

Després de massa temps sense publicar res he decidit que com a propòsit d'any nou publicaré un post cada 2 setmanes, a veure quant duro....

Avui veurem com pujar fitxers a Amazon S3 des del SSIS.
La manera de pujar els fitxers serà mitjançant una script task amb codi .Net.
El primer que necessitem és baixar-nos l'SDK per .Net: https://aws.amazon.com/sdk-for-net/
i instal·lar-lo.
Des d'un projecte d'SSIS afegim una script task. El codi a implementar és el següent:

Per pujar un fitxer a S3 només ens calen 3 línies:
1- Crear el Client passant-li la key na,e, secret key i region (això ens ho dóna la configuració d'Amazon).
 2.- Creaer una TransferUtility a partir del client.
3.- Pujar el fitxer indicant-li l'origen, el destí i el nom del fitxer.

Per que aquest codi compili necessitem fer referència a les dll de l'SDK que ens hem baixat abans. Concretament necessitem: AWSSDK.Core.dll i AWSSDK.S3.dll.

Hem de recordar que cada vegada que utilitzem una dll externa per tal que funcioni quan ho executem l'hem de copiar a: C:\Program Files (x86)\Microsoft SQL Server\120\DTS\Binn (si és de 32-bits) o a C:\Program Files\Microsoft SQL Server\120\DTS\Binn (si és de 64-bits).


Si després volem atacar els fitxers S3 amb eines com Hive és recomanable que cada grup de fitxers estigui en una carpeta i que el format sigui de text pla (ex csv, tsv, txt) i, si es vol, pot estar comprimit (molt preferiblement en tar.gz).

Si estem en entorn Windows una manera de comprimir en tar.gz és amb aquesta comanda de 7-.zip
"C:\Program Files\7-Zip\7z.exe" -ttar a dummy FITXER_INICIAL.csv -so | C:\"Program Files"\7-Zip\7z -si -tgzip a FITXER_COMPRIMIT.tar.gz

A l'script task d'SSIS se li poden passar variables per anar pujant diferents fitxers, per exemple per dates, a través d'un foreach loop container i anar canviant el contingut del .bat que conté les comandes per comprimir el fitxer.


En el proper post veurem per que ens pot ser útil el component Master Data Services i com instal·lar-lo.