PL/SQL Subprograms

8.17. Bagaimana Table Functions Mengalirkan Input Data

Cara bagaimana sebuah table function mengurutkan atau mengelompokkan baris-baris data yang diambilnya dari argumen-argumen cursor disebut dengan data streaming. Sebuah function dapat mengalirkan input datanya dengan salah beberapa cara sebagai berikut:

  • Tidak menempatkan batasan-batasan pada urutan dari baris-baris data yang masuk
  • Mengurutkan mereka berdasarkan sebuah kunci-kunci khusus dari kolom atau kolom-kolom
  • Mengelompokkan mereka berdasarkan sebuah kunci khusus

Clustering (pengelompokan) menyebabkan baris-baris data yang memiliki nilai-nilai kunci yang sama muncul secara bersama-sama namun sebaliknya tidak melakukan suatu pengurutan baris-baris data.

Kita dapat mengontrol kelakuan dari pengaliran input dengan menggunakan klausa ORDER BY atau CLUSTER BY ketika mendefinisikan function.

Pengaliran data dapat ditentukan untuk eksekusi sekuensial atau paralel dari sebuah function.

Jika sebuah klausa ORDER BY atau CLUSTER BY tidak ditentukan, baris-baris data masuk dalam sebuah urutan random.

Catatan: Arti kata dari ORDER BY adalah berbeda untuk eksekusi paralel dibandingkan dengan arti kata dari klausa ORDER BY di dalam perintah SQL. Dalam sebuah perintah SQL, klausa ORDER BY secara global mengurutkan seluruh kumpulan data (data set). Dalam sebuah table function, klausa ORDER BY mengurutkan masing-masing baris-baris data secara lokal terhadap setiap instance dari table function tersebut yang berjalan pada sebuah slave.

Contoh berikut ini menggambarkan sintaks untuk mengurutkan aliran data (input stream). Dalam contoh tersebut, function f mengambil baris-baris data dari kind (Region, Sales) dan mengembalikan baris-baris data dari form (Region, AvgSales), yang menunjukkan rata-rata penjualan untuk setiap wilayah (region).

CREATE FUNCTION f(p ref_cursor_type) RETURN tab_rec_type PIPELINED
CLUSTER p BY Region
PARALLEL_ENABLE(PARTITION p BY Region) IS
ret_rec rec_type;
cnt number;
sum number;
BEGIN
  FOR rec IN p LOOP
    IF (first rec in the group) THEN
      cnt := 1;
      sum := rec.Sales;
    ELSIF (last rec in the group) THEN
      IF (cnt <> 0) THEN
        ret_rec.Region := rec.Region;
        ret_rec.AvgSales := sum/cnt;
        PIPE ROW(ret_rec);
      END IF;
    ELSE
      cnt := cnt + 1;
      sum := sum + rec.Sales;
    END IF;
  END LOOP;
  RETURN;
END;

8.17.1. Memilih Antara Partitioning dan Clustering untuk Eksekusi Paralel

Pembagian dan pengelompokan adalah membingungkan, namun mereka melakukan sesuatu yang berbeda. Sebagai contoh, kadangkala pembagian (partitioning) dapat menjadi cukup tanpa pengelompokan (clustering) di dalam eksekusi paralel.

Mari kita perhatikan sebuah function SmallAgr yang melakukan pengumpulan (aggregation) terhadap gaji untuk setiap department_id, dimana department_id dapat berupa 1, 2, atau 3. Baris-baris data input ke function tersebut dapat dibagi berdasarkan HASH pada department_id sehingga bahwa seluruh department_id yang sama dengan 2 pergi ke slave yang lain, dan seterusnya.

Baris-baris data input tidak perlu dikelompokkan berdasarkan department_id untuk melakukan pengumpulan (aggregation) di dalam function tersebut. Setiap slave dapat memiliki sebuah array 1×3 SmallSum[1..3] dimana pengumpulan jumlah untuk setiap department_id ditambahkan ke memori ke dalam SmallSum[department_id].

Dengan kata lain, jika jumlah dari nilai-nilai unik dari department_id sangat besar, kita menggunakan pengelompokan (clustering) untuk menghitung jumlah department dan menulisnya ke disk satu department_id setiap kali.

 

 

Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26


Bookmark and Share

 

Buku ini membahas berbagai macam tip dan trik yang sangat berguna bagi Anda pembaca pengguna database Oracle. Pemula, mahasiswa, programmer, maupun database administrator yang mengharapkan solusi cepat dalam menangani permasalahan-permasalahan dalam penggunaan database Oracle dapat membaca buku ini. Anda tidak harus membaca buku ini secara urut karena buku ini di susun berdasarkan topik permasalahan, dan Anda dapat membaca topik-topik yang sesuai dengan permasalahan yang Anda hadapi.
Dapat di beli di toko buku Gramedia, Gunung Agung, Uranus, Karisma, Uranus dsb.

 

Find Related articles