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.

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

Izmena postojeće kolone u identity kolonu

Objavljeno: 11-09-2014 | Autor: Žana (Jovana) Baćović | Kategorija: T-SQL

Ознаке:

0

Identity kolona predstavlja kolonu kojoj SQL Server automatski dodjeljuje vrijednost (broj) iz niza brojeva kojim je definisan. Taj niz je definisan početnom vrijednošću i inkrementom tj. vrijednošću za koju se početna vrijednost uvećava prilikom unosa novog reda.
Prilikom kreiranja tabele, sintaksa za kreiranje identity kolone je sledeća:

CREATE TABLE dbo.TestKefalo
(ID INT IDENTITY(1,1));

Prvi broj u IDENTITY(1,1) predstavlja početnu vrijednost a drugi broj vrijednost inkrementa.
Analogno se u tabeli dodaje identity kolona, naredbom ALTER TABLE ADD.

PIVOT sa promjenljivim brojem kolona – dinamički pivot

Objavljeno: 06-05-2014 | Autor: Žana (Jovana) Baćović | Kategorija: T-SQL

Ознаке:

1

Relacioni operator PIVOT u T-SQL-u se koristi za rotiranje tabele, tako što jedinstvene vrijednosti kolone transformiše u toliki broj kolona, pri čemu obavlja potrebne agregacije nad vrijednostima preostalih kolona. Jednostavnije rečeno, prevodi vertikalno orjentisanu tabelu u horizontalno orjentisanu tj. sa nivoa redova prelazi se na nivo kolona.
Često je skup vrijednosti kolone od koje kreiramo nove kolone konačan (ili želimo da prikažemo samo određene vrijednosti) i tada se, za taj skup, koristi PIVOT za predefinisani skup kolona.

Nekada je skup vrijednosti kolone koju želimo da pivotiramo po svim vrijednostima promljenljiv i tada se koristi dinamički pivot.

Primjer: Nad SQL Kefalo bazom kreirati upit koji kao rezultat daje broj epizoda za svaki crtać, po svim godinama u kojima su epizode proizvedene. Godine proizvodnje prikazati kao kolone.
Pošto je spisak godina proizvodnje promjenljiv, prvi korak je da se kreira taj spisak, koji će predstavljati spisak kolona u PIVOT-u. Ova konkatenacija stringa može da se uradi na više načina, kao što je opisano u prethodnim člancima:

Konkatenacija string vrednosti iz razlicitih redova (1. deo)
Konkatenacija string vrednosti iz razlicitih redova (2. deo)

Koristićemo primjer sa FOR XML PATH i STUFF funkcijom:

Ažuriranje (update) view – a

Objavljeno: 10-03-2014 | Autor: Žana (Jovana) Baćović | Kategorija: T-SQL, View-ovi

Ознаке:

0

View može da služi samo za čitanje podataka (read only view) ili da bude promjenljiv, odnosno da nad njim mogu da se pišu dml (Data Manipulation Language) naredbe update, insert i delete.

Read only view

Postoji više načina da view bude read only, navešću samo jedan pošto nisu tema ovog članka.
Read only svojstvo view-a može da se postigne i tako što se na kraju upita koji ga kreira doda union all sa uslovom koji neće biti zadovoljen.
Primjer: Nad Kefalo bazom izvršiti sledeći upit:

CREATE VIEW dbo.NadimciAutoraReadOnly (AutorID, Nadimak)
AS
SELECT AutorID, Nadimak
FROM dbo.Autori
UNION ALL
SELECT 0,''
WHERE 1=0

Ukoliko pokušate da izvršite update:

UPDATE dbo.NadimciAutoraReadOnly
SET Nadimak = 'Peyo nadimak'
WHERE AutorID = 1001;

SQL Server će prijaviti grešku da view ima izvedeno ili konstantno polje i neće izmijeniti podatke.

Kreiranje XML-a iz SQL tabele

Objavljeno: 05-02-2014 | Autor: Žana (Jovana) Baćović | Kategorija: T-SQL, XML

1

Ako želite da kreirate jednostavan XML koristeći podatke iz SQL tabele, to možete da uradite koristeći XML Path mod u FOR XML klauzuli.

Primjer: Prikazivanje svih crtanih filmova iz Kefalo baze, sa zaglavljem SpisakCrtaca možete da uradite na sledeći način:

SELECT Naziv
FROM dbo.CrtaniFilmovi
FOR XML PATH(""),ROOT("SpisakCrtaca"),TYPE

Kreiranje XML-a sa hijerarhijom

Ukoliko želite da kreirate XML koji sadrži ugnježdene elemente, jedan od načina je da koristite AUTO mod u FOR XML klauzuli.

Primjer:

Izračunavanje dužine stringa korišćenjem funkcija LEN() i DATALENGTH()

Objavljeno: 14-01-2014 | Autor: Žana (Jovana) Baćović | Kategorija: Funkcije, T-SQL

0

SQL funkcije LEN() i DATALENGTH() služe za izračunavanje dužine stringa.
Potrebno je biti oprezan prilikom njihovog korišćenja, imati u vidu da se različito ponašaju sa različitim tipovima podataka, kao i da različito tretiraju blanko znakove na kraju stringa.

Funkcija LEN()

Za izračuvanje dužine stringa, SQL Server koristi nekoliko ugrađenih funkcija. Funkcija koja se najčešće koristi je LEN().

Primjer: Definišimo promjenljivu tipa nvarchar i izračunajmo njenu dužinu.

Procedura sa ulaznim parametrom radi sporije – parameter sniffing

Objavljeno: 30-12-2013 | Autor: Žana (Jovana) Baćović | Kategorija: Optimizacija, Stored procedure, T-SQL

0

Procedure sa ulaznim parametrima se koriste da bi se poboljšale performanse sistema, kada postoji mnogo zajedničkih upita istog oblika. Prilikom prvog izvršavanja procedure (pod prvim se podrazumijeva izvršavanje nakon (re)kompajliranja), SQL Server kreira keširani plan izvršenja (execution plan), koji koristi prilikom sledećeg poziva. Ovakvo ponašanje (koje predstavlja ponašanje SQL Servera po dizajnu) je poznato pod nazivom parameter sniffing.
Kreirani plan je prilagođen prvoj prosleđenoj vrijednosti parametra i u zavisnosti od njene raspoređenosti na izvoru, može biti izabran tako da koristi npr. nonclustered index seek. Takav plan može da odgovara ostalim vrijednostima parametra, ali može da se desi da nekoj vrijednosti parametra više odgovara korišćenje clustered index scan, a ipak će koristiti keširani plan.
Tada procedura traje mnogo duže nego što je uobičajeno, dešava se da se izvršavanje poveća sa minut ili dva na preko sat vremena. Kada pokušate da zaključite koji upit u proceduri je iznenada počeo da pravi problem, zaključićete da se tijelo procedure, sa proslijeđenom vrijednošću parametra pušteno kao upit izvršava za isto vrijeme kao procedura ranije i da problem nije u tijelu procedure.
Problem je opisano ponašanje SQL Servera, odnosno