SAS Hash Tables w pigułce



Podobne dokumenty
SAS Podstawowe informacje przed ćwiczeniem 1

STROJENIE PRZETWARZAŃ SAS

Stosowanie indeksów ma swoje korzyści, ale bywa również kosztowne.

ZESTAW 1 SAS 4GL. Język stworzony na potrzeby przetwarzania dużych zbiorów danych. Składają się nań:

Bloki anonimowe w PL/SQL

SAS Podstawowe informacje przed ćwiczeniem 2

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Oracle PL/SQL. Paweł Rajba.

Tabela wewnętrzna - definicja

Języki formalne i techniki translacji

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle

Materiały do laboratorium MS ACCESS BASIC

Przykładowe B+ drzewo

Indeksowanie w bazach danych

Informatyka w selekcji - Wykªad 4

Część 1: OLAP. Raport z zajęć laboratoryjnych w ramach przedmiotu Hurtownie i eksploracja danych

Lista, Stos, Kolejka, Tablica Asocjacyjna

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

Autor: Joanna Karwowska

Bloki anonimowe w PL/SQL

Wprowadzenie do SAS. Jak zacząć? Enhanced Editor (1) Uruchamianie programu. Ćwiczenie 3. Definiowanie bibliotek

Wykład 3 Składnia języka C# (cz. 2)

Oracle PL/SQL. Paweł Rajba.

Język PL/SQL. Rozdział 2. Kursory

Składowane procedury i funkcje

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Algorytmy i struktury danych. Wykład 6 Tablice rozproszone cz. 2

KORPORACYJNE SYSTEMY ZARZĄDZANIA INFORMACJĄ

PHP: bloki kodu, tablice, obiekty i formularze

SQL 4 Structured Query Lenguage

Kursor. Rozdział 10a Kursory. Otwieranie kursora. Deklarowanie kursora

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

BAZY DANYCH Cz III. Transakcje, Triggery

D D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia?

Kursor jawny. Rozdział 10a Kursory. Deklarowanie kursora (1) Deklarowanie kursora (2)

Tytuł: PRZETWARZANIE DANYCH W SAS Autor: Wioletta Grzenda, Aneta Ptak-Chmielewska, Karol Przanowski, Urszula Zwierz. Wstęp

Oracle PL/SQL. Paweł Rajba.

1 Obliczenia na danych

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

W PostgreSQL mamy do dyspozycji nie tylko funkcje wbudowane, ale również możemy tworzyć własne. Są one zapisywane w tabeli systemowej pg_proc.

Programowanie w SQL. definicja bloku instrukcji BEGIN...END, warunkowe wykonanie instrukcji IF...ELSE, wyrażenie CASE,

Przykład 1: Funkcja jest obiektem, przypisanie funkcji o nazwie function() do zmiennej o nazwie funkcja1

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

ZAJĘCIA 2. Przed rozpoczęciem zajęć należy wykonać instrukcje z poprzednich laboratoriów bądź z pliku zaj2_prep.sas. FILTROWANIE WIERSZY

Administracja i programowanie pod Microsoft SQL Server 2000

Dynamiczne struktury danych

Informatyka I. Wykład 4. Tablice. Dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Realizacja ekstensji klasy. Paulina Strzelecka, Tomasz Roszkowski

PODSTAWY BAZ DANYCH 13. PL/SQL

Wprowadzenie do programowania w SAS-ie oraz estymacji rozkładów

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

KORPORACYJNE SYSTEMY ZARZĄDZANIA INFORMACJĄ

Wykład 5. SQL praca z tabelami 2

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2.

Procedury i funkcje składowane

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

Kursory i wyjątki. (c) Instytut Informatyki Politechniki Poznańskiej 1


Algorytmy i struktury danych

PAKIETY STATYSTYCZNE

Kompletna dokumentacja kontenera C++ vector w -

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Bazy danych wykład dwunasty PL/SQL, c.d. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa)

Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory.

Obowiązuje od wersji

Ćwiczenia 2 IBM DB2 Data Studio

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Bazy danych 6. Klucze obce. P. F. Góra

Podstawy programowania. Podstawy C# Tablice

Wykład 4. Tablice. Pliki

Wstęp do programowania

Programowanie i struktury danych

Zapytania, złączenia, optymalizacja zapytań, planowanie zapytań, optymalizacja indeksów.

Pakiety podprogramów Dynamiczny SQL

PL/SQL. Zaawansowane tematy PL/SQL

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Bash - wprowadzenie. Bash - wprowadzenie 1/39

KURS C/C++ WYKŁAD 6. Wskaźniki

Porządek symetryczny: right(x)

Podstawy otwartych języków programowania Przechowywanie danych

Wyszukiwanie w BST Minimalny i maksymalny klucz. Wyszukiwanie w BST Minimalny klucz. Wyszukiwanie w BST - minimalny klucz Wersja rekurencyjna

Programowanie w języku Java. Kolekcje

SQL SERVER 2012 i nie tylko:

Algorytmy i struktury danych. Wykład 4 Tablice nieporządkowane i uporządkowane

Wykład. Wprowadzenie do systemu SAS (import i transformacje danych)

Oracle PL/SQL. Paweł Rajba.

Tablice cz. I Tablice jednowymiarowe, proste operacje na tablicach

Bibliotek grid została stworzona aby wykorzystywać funkcje programu R ( oraz wprowadzone do programu R) do tworzenia odwzorowań typu grid oraz siatek

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Dawid Gierszewski Adam Hanasko

Podstawy Programowania C++

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

PARADYGMATY PROGRAMOWANIA Wykład 4

Transkrypt:

, SAS Institute Polska czerwiec 2014 Spis treści 1. Wstęp... 2 2. Składnia Hash tables... 2 2.1. Deklaracja obiektu hash table... 2 2.2. Metody w hash table... 3 2.3. Atrybuty hash table... 4 3. Iteracyjny dostęp do danych... 4 3.1. Deklaracja obiektu hiter... 4 3.2. Metody obiektu hiter... 4 4. Przykłady... 5 4.1. Deklarowanie hash table... 5 4.2. Użycie iteratora... 5 4.3. Ładowanie i szukanie... 6 4.4. Sortowanie danych wynikowych... 7

2 1. Wstęp Hash Tables znajduje swoje zastosowanie wszędzie tam, gdzie istnieje potrzebna przyspieszenia wykonywania operacji oraz zwiększenia wydajności przetwarzania danych. Pozwala w znaczący sposób przyspieszyć takie operacje jak łączenie tabel, wyszukiwanie podzbiorów oraz agregacje danych. Dzieje się tak, ponieważ technika ta kładzie nacisk na optymalne wykorzystanie pamięci poprzez tworzenie dedykowanej struktury kluczy przechowywanej w pamięci, co pozwala na szybki odczyt wartości kluczy. 2. Składnia Hash tables 2.1. Deklaracja obiektu hash table Hash tables można zadeklarować wykorzystując jeden z dwóch sposobów. Stosując wyrażenie declare, a następnie operator _new_: declare hash obiekt; obiekt= _new_ hash(); lub używając tylko wyrażenia declare: declare hash obiekt(); Poniżej znajduje się lista opcjonalnych argumentów, które mogą być wykorzystane w wyrażeniu declare: dataset: Określa jaki zbiór ma być załadowany do hash table. hashexp: Określa rozmiar hash table. Liczba n jest potęgą liczby 2. Obiekt hash będzie składał się z 2 n kubełków. Domyślnie n=8, zatem hash ma 256 kubełków. ordered: Określa w jaki sposób mają być posortowane dane przechowywane wewnątrz hash table: a ascending YES Y - porządek rosnący d descending porządek malejący NO N brak porządku (wartość domyślna) duplicate: Określa czy podczas ładowania danych do hash table należy ignorować duplikaty kluczy. Żadna z poniższych opcji nie jest domyślnie ustawiona. replace r przechowuje ostatnią wartość duplikatu klucza error e zwraca błąd do loga w przypadku gdy zostanie znaleziony duplikat klucza multidata: Określa czy możliwe jest zastosowanie w kluczu wielokrotnych wartości danych. YES Y umożliwia wiele wartości dla każdego klucza NO N pozwala tylko na jeden element danych dla każdego klucza (wartość domyślna) SAS Institute Polska Strona 2 z 7

3 2.2. Metody w hash table Metoda definekey pozwala na zadeklarowanie nazw zmiennych, które tworzą klucz: rc=obj.definekey( klucz1,, klucz_n ); rc=obj.definekey(all: yes ); Metoda definedata pozwala na zadeklarowanie nazw zmiennych, których wartości skojarzone są z kluczem: rc=obj.definedata( zmienna_1,, zmienna_n ); rc=obj.definedata(all: yes ); Metoda definedone kończy fazę deklarowania i inicjalizowania hash table: rc=obj.definedone(); Metoda add dodaje do hash table dane i zapisuje je pod daną kombinacją kluczy: rc=obj.add(); rc=obj.add(key: klucz1,,key: klucz_n data: zmienna_1,,data: zmienna_m ); Metoda replace dodaje do hash table dane i zapisuje je pod daną kombinacją kluczy. Jeśli w hash table znajdują się już dane o danym kluczu to zostaną one napisane: rc=obj.replace(); rc=obj.replace(key: klucz1,,key: klucz_n data: zmienna_1,,data: zmienna_m ); Metoda find wyszukuje w hash table wpis odpowiadający podanej kombinacji kluczy i w przypadku, gdy zakończy się sukcesem zwraca zmienną do wektora PDV: rc=obj.find(); rc=obj.find(key: klucz1,,key: klucz_n ); Metoda check wyszukuje w hash table wpis odpowiadający podanej kombinacji kluczy i w przypadku, gdy zakończy się sukcesem zwraca wartość 0: rc=obj.check(); rc=obj.check(key: klucz1,,key: klucz_n ); Metoda remove usuwa z hash table rekord o podanych wartościach klucza: rc=obj.remove(); rc=obj.remove(key: klucz1,,key: klucz_n ); Metoda output wypisuje wartość hash table do zbioru wynikowego: rc=obj.output(dataset: zbior_wynikowy ); Metoda clear usuwa wpisy z obiektu hash bez usuwanie obiektu hash: rc=obj.clear(); SAS Institute Polska Strona 3 z 7

4 Metoda sum pobiera sumę dla danego klucza i przetrzymuje go w data stepie pod zmienną sum_var: rc=obj.sum(); rc=obj.sum(key: klucz1,,key: klucz_n sum:sum_var); Metoda ref wykonuje operację wyszukiwania aktualnego klucza. Jeśli klucza nie ma w obiekcie hash to zostanie on dodany: rc=obj.ref(); rc=obj.ref(key: klucz1,,key: klucz_n ); Metoda equals określa czy dwa obiekty hash są równe. Jeśli są równe to zmienna res_var zostanie ustawiona na 1. W przypadku gdy nie będą równe zmienna ta przyjmie wartość 0 : rc=obj.equals(hash: hash_obj. Result: res_var); 2.3. Atrybuty hash table Atrybut num_items przechowuje informację o ilości elementów trzymanych w hash table: i=obj.num_items; Atrybut item_size uzyskuje rozmiar elementu w bajtach: i=obj.num_items; Atrybut delete usuwa cały obiekt hash table z pamięci: rc=obj.delete(); 3. Iteracyjny dostęp do danych 3.1. Deklaracja obiektu hiter Iterator pozwala na sekwencyjny dostęp do danych. Aby można było go użyć należy pierw zadeklarować obiekt. Obiekt typu hiter deklarujemy używając poniższej składni: declare hiter nazwa_obiektu_hiter( nazwa_obiektu_hash ); 3.2. Metody obiektu hiter Metoda first zwraca pierwszy rekord z hash table. rc= nazwa_obiektu_hiter.first(); Metoda last zwraca ostatni rekord z hash table. rc= nazwa_obiektu_hiter.last(); SAS Institute Polska Strona 4 z 7

5 Metoda next zwraca następny rekord z hash table. rc= nazwa_obiektu_hiter.next(); Metoda prev zwraca poprzedni rekord z hash table. rc= nazwa_obiektu_hiter.prev(); 4. Przykłady 4.1. Deklarowanie hash table set sashelp.class (obs=1); declare hash ht(dataset:"sashelp.class"); ht.definekey("name"); ht.definedata(all:"yes"); ht.definedone(); name= "Janet"; rc=ht.find(); put rc= name= sex= age= height= weight=; rc= ht.find(key:"philip"); put rc= name= sex= age= height= weight=; rc= ht.find(key:"nemo"); put rc= name= sex= age= height= weight=; rc=0 Name=Janet Sex=F Age=15 Height=62.5 Weight=112.5 rc=0 Name=Philip Sex=M Age=16 Height=72 Weight=150 rc=160038 Name=Philip Sex=M Age=16 Height=72 Weight=150 4.2. Użycie iteratora set sashelp.class (obs=1); declare hash obj(dataset:"sashelp.class", ordered: "Y"); declare hiter iter_obj("obj"); ht.definekey("name"); ht.definedata(all:"yes"); ht.definedone(); rc=iter_obj.first(); do while (rc=0); put name= sex= age= height= weight=; rc=iter_obj.next(); end; Pętla wypisuje dane do logu. Wykonuje się dopóki metoda next() zwróci liczbę różną od 0, czyli aż wypisane zostaną wszystkie rekordy trzymane w hash table. /* Create Input Data Set */ data patients; length patient_id $ 16 discharge 8; input patient_id discharge:date9.; datalines; SAS Institute Polska Strona 5 z 7

6 ; /* Load and iterate over hash */ length patient_id $ 16 discharge 8; declare hash ht(dataset:"patients", ordered:"ascending"); ht.definekey("patient_id"); ht.definedata("patient_id", "discharge"); ht.definedone(); declare hiter iter("ht"); rc = iter.first(); do while (rc=0); put patient_id discharge:date9.; rc = iter.next(); end; 4.3. Ładowanie i szukanie /* Create Input Data Set */ data names; length first last title $ 16 born died 8; input first last born died title & $16.; datalines; William Blake 1757 1827 Spring John Keats 1795 1821 To Autumn Mary Shelley 1797 1851 Frankenstein ; /* Load and Find */ length first last title $ 16; length born died 8; declare hash ht(dataset:"names"); ht.definekey("first", "last"); ht.definedata("born", "died", "title"); ht.definedone(); /* Find John Keats */ first = "John"; last = "Keats"; rc = ht.find(); if rc = 0 then put "Found " first last title $QUOTE.; else put "Not Found " first last; Found John Keats "To Autumn" SAS Institute Polska Strona 6 z 7

7 4.4. Sortowanie danych wynikowych /* Add to hash and then output */ length patient_id $ 16 discharge 8; if _N_ = 1 then do; declare hash ht(ordered:"a"); ht.definekey("patient_id"); ht.definedata("patient_id", "discharge"); ht.definedone(); end; infile datalines eof=output; input patient_id discharge:date9.; ht.add(); /* ht.add() same as: ht.add(key:patient_id, data:patient_id, data:discharge); */ return; output: ht.output(dataset:"sorted_ids"); datalines; ; set sorted_ids; put patient_id discharge:date9.; SAS Institute Polska Strona 7 z 7