divendres, 17 de juny de 2016

ADEU-BIML: SQL Server (II)

En el darrer post (http://www.eljordifabi.tech/2016/06/adeu-biml-sql-server-i.html) vam veure com generar la metadata d'un origen SQL Server. Avui utilitzarem aquesta metadata per començar a generar dtsx. Ens queden la creació de les taules a l'staging area, l'esborrat de les taules, la creació dels índexos i, finalment, l'extracció de les dades.

Creació de taules

Per crear les taules començarem amb el fitxer: 001_CreateTablesStagParent.biml que podeu trobar al github. La primera part afectada és: UT_generateSubPackages.biml

 En aquest paquet invocarem als .biml per cadascuna de les funcions. A l'anterior post vam veure l'implementació del GenerateMetadataDatabase.biml, ara veurem el de CreateTablesStagDatabase.biml
En aquest cas recuperarem de les taules de metadata el nom de les taules i de la bbdd i farem un bucle per poder recuperar les columnes de cada taula:

<# string _table_sql = "select t.table_name, t.schema_name, d.source_name, t.database_table_id, d.source_id, d.short_name "+
"from biml.source_database_table t "+
"join biml.source_detail de on t.database_table_id=de.source_detail_id "+
"join biml.source d on t.database_id=d.source_id "+
"join biml.project p on d.project_id=p.project_id "+
"join biml.source_type st on st.id_source_type=d.source_type "+
"where de.extract_type is not null and project_name='"+_project+"' "+
" and d.source_name='"+_bdcx+"'";
 En el punt de recuperació del tipus de dades de la columna veiem que s'utilitza la funció RowConversion del fitxer UT_SQLServer_datatype.cs 
Si des de 001_CreateTablesStagParent.biml generem els dtsx ens apareixerá un dtsx pel projecte i un altre per cada BBDD que haguem configurat a la nostra BBDD de metadata. És important tenir en compte que només és generarà l'script d'aquelles taules en que haguem informat a mà el tipus d'extracció (en el nostre cas Full o Incremental).
Un punt important a l'hora de crear taules: AFEGIU SEMPRE UN CAMP QUE INDIQUI QUAN S'HA INSERIT LA FILA, serà molt útil a l'hora de debutar.

Esborrat de taules

Per l'esborrat de taules el sistema és molt similar. El codi inicial està al fitxer 002_DropTablesStagParent.biml que a través de UT_generateSubPackages.biml invoca a DropTablesStagDatabase.biml
Igual que abans es consulten totes les taules que hi ha introduïdes a l'esquema de metadata i, en comptes de create, es genera el drop.

Creació d'índex

En la part de creació d'índex només crearem els índex unique clustered, però es poden crear tota la resta amb petites modificacions de la consulta inicial. El BIML inicial és: 003_CreateIndexStagParent.biml que acaba invocant a CreateIndexStagDatabase.biml
Recuperarem els índex i per cadascun d'ells les seves columnes

<# string _ix_sql = "select ix.index_name, ix.database_table_index_id, t.table_name, t.schema_name, d.short_name"+
" from biml.source_database_table t "+
" join biml.source_detail de on t.database_table_id=de.source_detail_id "+
" join biml.source d on t.database_id=d.source_id "+
" join biml.project p on d.project_id=p.project_id "+
" join biml.source_type st on st.id_source_type=d.source_type"+
" join biml.source_database_table_index ix on ix.database_table_id=t.database_table_id "+
" where is_unique='UNIQUE' "+
" and index_type='CLUSTERED' "+
" and de.extract_type is not null and project_name='"+_project+"'"+
" and d.source_name='"+_bdcx+"'";

Al ser índex clustered no tenen columnes included, també es podria modificar l'script per que acceptes columnes included d'índex non-clustered.

Ara ja tenim tota l'estructura creada a l'staging area, ara només falta omplir-la de dades. Això ho veurem al proper post.

Com sempre teniu tot el codi al Github: https://github.com/jordiisidro/adeu-biml/


Cap comentari:

Publica un comentari