WHILE petlja u SSIS paketima korišćenjem Foreach Loop Container-a

Objavljeno: 28-05-2015 | Autor: Žana (Jovana) Baćović | Kategorija: SSIS

0

Kada u SSIS paketima želimo da izvršimo određeni skup radnji za više različitih entiteta ili djelova entiteta, nije uvijek neophodno da se pravi više paketa ili control flow-ova. Korišćenjem komponente Foreach Loop Container može da se simulira izvršavanje while petlje u programskim jezicima. Primjeri korišćenja mogu da budu prebacivanje podataka iz različitih fajlova u SQL bazu ili obrnuto, arhiviranje podataka neke tabele po različitim kriterijumima i slično.

Dodavanje varijabli

Za prolazak kroz petlju potrebne su nam varijable, jedna koja sadrži kolekciju za koju se petlja izvršava koja je tipa Object i zvaćemo je Loop_Count, kao i varijable za datum i tip u kojima se čuva pokazivač na tekući član tj. za njihove različite vrijednosti prolazimo kroz petlju.

Kreiranje control flow-a

Prvo dodajemo Execution task komponentu u kojoj ćemo definisati skup datuma i tipova za koje će se izvršavati petlja. Izvor može biti sama tabela iz koje se presipaju podaci, a može biti i neka tabela metapodataka. Kreirajmo tabelu metapodataka i napunimo je sa 3 različite vrijednosti.

CREATE TABLE dbo.LoopPodaci
 (Datum INT,
  Tip tinyint,
  ValidInd bit);
GO
INSERT INTO dbo.LoopPodaci (Datum,Tip,ValidInd)
VALUES
	(20140630,1,1),
	(20140731,2,1),
	(20140831,2,1);

U tabeli postoji i kolona ValidInd koja predstavlja indikator koji određuje da li će se slog uzeti u obzir. Na osnovu navedenog, upit za Execution task komponentu je sledeći:

SELECT Datum,Tip
FROM dbo.LoopPodaci
WHERE ValidInd = 1;

Nakon definisanja izvora i podešavanja ResultSet-a na Full result set, potrebno je da se pozicioniramo na Result set granu u drvetu sa lijeve strane i dobijeni rezultat dodijelimo promjenljivoj tipa Object koju smo prethodno kreirali:

Zatim prevučemo komponentu Foreach Loop Container i povežemo sa kreiranom Execution task komponentom. Pozicioniramo se na Foreach Loop Container, desni klik miša i izaberemo opciju Edit. U Collection grani sa lijeve strane za Enumerator izaberemo Foreach ADO Enumerator, pod ADO object source variable izaberemo Loop_Count varijablu i opciju Rows in the first table:

Nakon toga na grani Variable Mappings izaberemo prvo varijablu Datum a potom Tip i one će automatski dobiti Index 0 odnosno 1, respektabilno. Ovdje je bitno obratiti pažnju da redosled izbora varijabli zavisi od redosleda koji je definisan u rezultatu koji je dodijeljen promjenljivoj tipa Object koja im predstavlja izvor, kako bi dodjela bila ispravna:

Ovim smo obezbijedili da kombinacija promjenljivih Datum i Tip dobije onoliko vrijednosti koliko ih ima u izvornom upitu i za njih možemo da definišemo bilo koje akcije u okviru Foreach Loop Container komponente. U našem primjeru kreiran je paket u kome se podaci prebacuju iz jedne tabele u drugu po datumu i tipu i nakon toga se za svaki datum i tip izvrši određena procedura.

U ovom članku nećemo opisivati akcije i način njihovog kreiranja, dovoljno je da znate da je dozvoljeno da koristite sve komponente i operacije koje su inače dozvoljene u control flow-u.

After Insert trigger ne radi prilikom inserta kroz SSIS paket

Objavljeno: 19-02-2015 | Autor: Miloš Milenković | Kategorija: SSIS

2

Često se javlja potreba da se prilikom upisivanja podataka u neku tabelu o tome obaveste određeni korisnici ili da se to negde zabeleži, zajedno sa vremenom kad je podatak upisan i korisnikom koji je izvršio upisivanje. Najpraktičniji način da se ovo uradi je upotreba trigera.

Za ovu priliku, kreiraćemo tabelu u koju će biti upisani pomenuti podaci prilkom svakog dodavanja novog reda u tabelu CrtaniFilmovi u našoj bazi SQL_KEFALO:

CREATE TABLE log_insert
(id int IDENTITY,
CrtacID int,
Naziv nvarchar(50),
Korisnik nvarchar(50),
Datum datetime DEFAULT(GETDATE()));

Zatim na tabeli CrtaniFilmovi kreiramo After Insert triger koji će u kreiranu tablu logovati crtani film koji je dodat u tabelu, kao i naziv korisnika koji je dodao taj novi red u tabelu i vreme dodavanja:

CREATE TRIGGER trg_LogInsert ON CrtaniFilmovi
AFTER INSERT
AS
BEGIN
	INSERT INTO log_insert (CrtacID, Naziv, Korisnik)
	SELECT CrtacId, Naziv, SUSER_SNAME() 
        FROM inserted;
END

Sada možemo da probamo da li kreirani triger radi tako što ćemo dodati novi red u tabelu CrtaniFilmovi, a onda proveriti tabelu log_insert.

Pregled vrijednosti varijabli (promljenljivih) u SSIS paketu tokom izvršavanja

Objavljeno: 17-11-2014 | Autor: Žana (Jovana) Baćović | Kategorija: SSIS

Ознаке:

0

Promjenljive ili varijable u SSIS paketima služe za čuvanje vrijednosti koje im se dodjeljuju i koje se prosleđuju tokom izvršavanja paketa. Nekada je potrebno da znamo te vrijednosti kako bi se izvršilo detektovanje grešaka prilikom izvršavanja, da bi se utvrdilo da li je do greške došlo zbog pogrešne dodjele ili prosleđivanja vrijednosti.

Vrijednosti promjenljivih tokom izvršavanja možete vidjeti kroz nekoliko koraka:

  • Postavite breakpoint na komponenti na kojoj želite da vidite vrijednost promjenljivih tako što se pozicionirate na komponentu, desni klik miša i izaberete opciju Edit Breakpoints:
  • U sledećem prozoru izaberite OnPreExecute i OnPostExecute event opcije, kako biste vidjeli

Uvođenje paralelizma u SSIS paket – Balanced Data Distributor

Objavljeno: 17-01-2014 | Autor: Tatjana Mađer | Kategorija: Optimizacija, SSIS

Ознаке: , ,

0

Balanced Data Distributor (BDD) je SSIS komponenta koja omogućava jednostavan način da se iskoriste multi-procesorski serveri uvođenjem paralelizma u data flow paketa.

BDD se prvi put pojavljuje sa verzijom SQL Servera 2008. Ne dolazi podrazumevano sa instalacijom SQL Servera, već je neophodno instalirati ga posebno (instalacija se može preuzeti sa sledećeg link-a). Nakon instaliranja, potrebno ga je ručno dodati da bi se pojavio u listi data flow transformacija i to na sledeći način: u Toolbox-u uraditi desni klik na Data Flow Transformations i izabrati Choose Items->SSIS Data Flow Items tab gde je potrebno čekirati Balanced Data Distributor i potvrditi sa OK.