Instytut Informatyki Politechnika Śląska Gliwice, ul. Akademicka 16 XML w bazie danych IBM DB2 Dr inż. Dariusz Mrozek Wykład: IBM DB2 uniwersalna platforma przetwarzania danych
O czym dzisiaj? XML w relacyjnej bazie danych Sposoby obsługi danych XML w IBM DB2 Przechowywanie danych XML Przetwarzanie danych XML Indeksowanie danych XML 2
Dlaczego XML?.. Wymiana danych pomiędzy luźno powiązanymi systemami Niezależność od platformy Dobry w aplikacjach klient-serwer typu HTTP Reprezentacja dokumentów (znaki sterujące, np. HTML, Word,..) Doskonała reprezentacja powiązań hierarchicznych oraz rekurencyjnych pomiędzy danymi (FK w b.d.) Wsparcie dla kolejności danych i wstępne sortowanie (ważne dla aplikacji typu Content Management) Samoopisywalność i rozszerzalność XML 3
Dlaczego XML w relacyjnej bazie danych? Dokumenty/dane XML zgromadzone w jednym miejscu Możliwość zadawania zapytań jak do b.d., indeksowania i tworzenia planów zapytań Wysokie koszty parsowania dokumentów XML lepiej przechowywać całe Rozszerzenia XML w b.d. nie powodują zmian w działaniu aplikacji relacyjnych Wsparcie serwera na poziomie utrzymania b.d., np. kopie zapasowe 4
Dokument XML 5
Model danych XML rodzaje węzłów 6
Bazy danych XML-enabled 7
Obsługa XML w IBM DB2 Typ danych: xml Wsparcie dla XPath i XQuery Indeksowanie danych XML 8
DB2 purexml Kolumny relacyjne są przechowywane w typowym formacie relacyjnym (tabele) Natywne składowanie XML Dokumenty XML są przechowywane z zachowaniem pełnej hierarchii w postaci sparsowanego drzewa hierarchicznego Do manipulacji danymi można używać SQL lub XQuery 9
Natywny sposób przechowywania danych XML 10
Typ danych XML 11
Wewnętrzny sposób przechowywania dokumentów XML Drzewo XML reprezentujące dokument jest przechowywane na stronach danych Dokumenty, których rozmiar przekracza rozmiar strony są dzielone na regiony i przechowywane na wielu stronach Poszczególne gałęzie są identyfikowane przez NodeID 3 regiony przechowywane na 3 stronach 12
Dostęp do regionów Dostęp do danych w tym samym regionie jest szybszy niż między regionami Indeks regionów wspomaga trawersowanie pomiędzy regionami drzewa 13
Przechowywanie XML: Wewnętrzne obiekty i ich powiązanie Dane XML przechowywane są w innych strukturach niż dane relacyjne 14
Wstawianie danych XML Niejawne parsowanie XML Wstawianie danych tekstowych do kolumny typu XML INSERT INTO dept VALUES ('PR27',, '<dept> <emp> </emp> </dept>'); Jawne parsowanie z użyciem XMLPARSE Transformuje wartość XML z postaci serializowanej do wewnetrznej reprezentacji hierarchicznej Pozwala określić, co zrobić ze spacjami (strip/preserve) INSERT INTO dept VALUES ( PR27, xmlparse(document '<a>...</a>')); INSERT INTO dept VALUES ( PR27, xmlparse(document '<a>...</a> preserve whitespace)); 15
Usuwanie danych XML Polecenie DELETE Usuwa dokument XML wraz z innymi danymi dla wskazanego wiersza DELETE FROM dept WHERE deptid= A001 ; Warunek może również bazować na zawartości dokumentu XML DELETE FROM dept WHERE XMLEXISTS ('$d//phone[type="home"] passing INFO as "d"); Ustawienie wartości NULL Usuwa dokument XML UPDATE dept SET custdoc = NULL WHERE deptid='a001 ; 16
Import danych XML 17
Walidacja podczas ładowania danych Rejestracja schematu w bazie danych register xmlschema 'http://mysample.org' from 'C:/XMLFiles/DeptInfo.xsd' as user1.mysample complete; Importowanie danych z walidacją import from dept.del of del xml from C:/data/XMLFILES xmlvalidate using xds default user1.mysample insert into dept; SQL3149N 5 rows were processed from the input file. 4" rows were successfully inserted into the table. "1" rows were rejected. Number of rows read = 5 Number of rows skipped = 0 Number of rows inserted = 4 Number of rows updated = 0 Number of rows rejected = 1 Number or rows committed = 5 18
Eksport danych XML 19
SQL/XML i XQuery DB2 umożliwia operowanie na danych z użyciem dwóch języków: XQuery SQL/XML XPath Umożliwia nawigowanie wewnątrz dokumentów XML Podstawa operowania dla XQuery i SQL/XML XQuery Udostępnia dwie istotne funkcje pozwalające na dostęp do danych db2-fn:sqlquery db2-fn:xmlcolumn Zwraca rezultaty w postaci sekwencji elementów SQL/XML Udostępnia funkcje pozwalające na jednoczesną pracę z danymi relacyjnymi i XML 20
Język XPath 21
Przykładowe wyrażenia w języku XPath 22
Wprowadzenie do XQuery w DB2 W odróżnieniu od relacyjnych danych (posiadających określoną strukturę i przez to przewidywalnych), dane XML są: Często nieprzewidywalne Wysoce zmienne Samoopisujące Zapytania do danych XML pozwalają na przeprowadzenie różnych operacji: Poszukiwać w danych XML obiektów na nieznanym poziomie w hierarchii Wykonywać strukturalne transformacje danych Zwracać rezultaty różnych, czasem mieszanych typów 23
Funkcje XQuery w DB2 db2-fn:xmlcolumn ( xml-column-name ) Zwraca kolumnę XML jako sekwencję wartości XML Parametr wejściowy identyfikuje nazwę kolumny XML w tabeli xquery db2-fn:xmlcolumn( CUSTOMER.INFO )/customerinfo; db2-fn:sqlquery ( full-select-sql-statement ) Pozwala zadać zapytanie SQL, którego celem jest zwrócenie kolumny XML Parametr wejściowy jest traktowany jako polecenie SQL i parsowane przez parser XML xquery db2-fn:sqlquery( SELECT INFO FROM CUSTOMER WHERE CID=6 )/customerinfo; 24
db2-fn:xmlcolumn Pobiera wszystkie dokumenty XML ze wskazanej kolumny, a następnie wykonuje na nich zapytanie XQuery 25
Inne ciekawe zapytania Transformacja dokumentu xquery <ShippedItems> {db2-fn:xmlcolumn("purchaseorder.porder") /PurchaseOrder[@Status="Shipped"]/item/name} </ShippedItems>; FLOWR xquery for $po in db2-fn:xmlcolumn("purchaseorder.porder")/purchaseorder for $quantity in $po/item/quantity where $po/@status="shipped" return ($po/item/name, $quantity); 26
db2-fn:sqlquery Pobiera dokumenty XML używając polecenia SQL, a następnie wykonuje na nich zapytanie XQuery Pozwala na filtrowanie danych w modelu relacyjnym 27
Funkcje SQL/XML Pozwalają wykonać polecenia XQuery zanurzone wewnątrz poleceń SQL XMLQUERY() XMLTABLE() XMLEXISTS() Umożliwia to na: Operowanie na fragmentach dokumentów XML zamiast na całych dokumentach Wykorzystanie danych XML jako części zapytań SQL Operowanie zarówno na danych relacyjnych, jak i XML Wtórne przetworzenie zwróconych danych XML w zapytaniu SQL 28
Funkcja XMLQUERY Funkcja skalarna, wykonywana raz dla każdego kwalifikującego się dokumentu Wykonuje polecenie w języku XPath lub XQuery Pozwala na wprowadzenie parametrów wejściowych do zapytania XQuery Zwraca sekwencję 0, 1 lub więcej obiektów z każdego dokumentu 29
Funkcja XMLQUERY (2) SELECT XMLQUERY( $i/customerinfo/name PASSING INFO AS i ) FROM CUSTOMER; Polecenie SELECT iteruje po wszystkich wierszach tabeli CUSTOMER Dla każdego wiersza wykonywane jest polecenie XQuery Klauzula passing wiąże zmienną $i z wartością kolumny INFO w bieżącym wierszu Następuje wykonanie polecenia XQuery XMLQUERY zwraca rezultat wykonania polecenia XQuery, jako wartość typu XML 30
Funkcja XMLTABLE Tworzy tymczasową tabelę z danych XML 31
Funkcja XMLEXISTS Predykat testujący, czy polecenie XQuery zwraca jakąś wartość 32
Funkcja XMLEXISTS (2) ID klientów, którzy mają asystenta select CID from CUSTOMER where XMLEXISTS ('$d/customerinfo/assistant' passing INFO as "d"); Nazwy klientów (element name) z Toronto/Kanada select XMLQUERY('$d/customerinfo/name' passing INFO as "d") from CUSTOMER where XMLEXISTS('$x/customerinfo/addr[@country ="Canada" and city="toronto"]' passing INFO as "x"); 33
XMLELEMENT Pozwala skonstruować dokument XML na podstawie danych z relacyjnej tabeli select XMLELEMENT (NAME "PurchaseOrder", XMLELEMENT (NAME "poid", POID), XMLELEMENT (NAME "status", STATUS), XMLELEMENT (NAME "custid", CUSTID), XMLELEMENT (NAME "orderdate", ORDERDATE)) from PURCHASEORDER where POID = 5001; 34
Indeksy XML Indeksy zakładane na kolumnach XML Poprawiają efektywność wykonania zapytań kierowanych do danych XML Podobnie jak w przypadku tradycyjnych indeksów mają pewne wady: Wpływ na polecenia modyfikujące Zajmowana przestrzeń dyskowa 35
Indeksy XML Elementy indeksów XML umożliwiają dostęp do gałęzi dokumentów XML poprzez utworzenie kluczy indeksu w oparciu o wyrażenia wskazujące odpowiednie węzły CREATE INDEX IDX1 ON TB1(XMLDOC) GENERATE KEY USING XMLPATTERN /company/emp/salary AS SQL DOUBLE; CREATE INDEX IDX2 ON TB1(XMLDOC) GENERATE KEY USING XMLPATTERN //@id AS SQL VARCHAR(20); 36
Indeksy XML a tradycyjne indeksy Tradycyjne indeksy Oparte na kolumnach Jedna lub więcej kolumn Indeksy XML Oparte na wyrażeniach XML ścieżkach Tylko jedna kolumna XML 1 wiersz 1 klucz indeksu Wszystkie gałęzie, które satysfakcjonują predykat XML 1 dokument 0, 1 lub więcej kluczy indeksu B-Tree B-Tree 37
Budowa indeksu Indeks XML zawiera pary ścieżka-wartość Ścieżka jest identyfikowana przez PathID DocID wskazuje na region zawierający korzeń dokumentu Bezpośredni dostęp do podelementów drzewa 38
Wsparcie dla programistów 39
Podsumowanie i przypomnienie Natywny sposób przechowywania danych XML w DB2 Nie ma wymagania ekstrakcji danych, użycia typów CLOB, BLOB Zoptymalizowany silnik dla języków XPath i XQuery Wysoka wydajność Możliwość indeksowania danych Dokumenty nie są parsowane w momencie wykonania zapytania W pełni zintegrowane przetwarzanie relacyjne i XML Bez konieczności wewnętrznej translacji zapytań XQuery do SQL Bezproblemowe przetwarzanie danych różnego rodzaju za jednym zamachem 40
Dzikękuję za uwagę! Pytania? Dariusz.Mrozek@polsl.pl