Traffine I/O

Bahasa Indonesia

2023-01-23

Stored Procedure vs. UDF di Snowflake

Pengantar

Stored procedure dan UDF (User-Defined Function) merupakan bagian penting dari pemrograman database, yang berfungsi untuk mengelompokkan logika database yang dapat digunakan ulang, sehingga mendorong praktik pemrograman yang efisien. Namun, keduanya memiliki tujuan dan karakteristik penggunaan yang berbeda, dan memahami perbedaan di antara keduanya adalah kunci untuk memanfaatkan kemampuan mereka secara efektif.

Artikel ini bertujuan untuk menjelaskan perbedaan utama antara stored procedure dan UDF di Snowflake, tujuan individu masing-masing, dan kasus penggunaan yang tepat. Artikel ini juga menguraikan perilaku yang berbeda di antara keduanya dan menjelaskan bagaimana memilih alat yang tepat untuk kebutuhan spesifik Anda.

Tujuan Stored Procedure

Dalam dunia database, stored procedure memiliki peran khusus. Mereka umumnya digunakan untuk melakukan operasi administratif dengan mengeksekusi pernyataan SQL. Stored procedure memberikan cara untuk mengelompokkan dan mengemas serangkaian pernyataan SQL menjadi rutin tunggal yang dapat dipanggil setiap kali operasi-operasi ini perlu dilakukan.

Tubuh stored procedure diizinkan, tetapi tidak diwajibkan, untuk secara eksplisit return sebuah nilai. Nilai ini dapat berupa penanda kesalahan, kode status, atau titik data lain yang procedure ini ditujukan untuk menghasilkan. Jika nilai return tidak secara eksplisit ditentukan, secara implisit akan dikembalikan nilai NULL. Fleksibilitas dalam nilai return memungkinkan stored procedure menjadi lebih dari sekadar fungsi; mereka menjadi bagian integral dari sistem manajemen database yang tangguh, melayani berbagai fungsi administratif dan pengendalian.

Tujuan User-Defined Function

UDF di Snowflake memiliki peran yang berbeda dibandingkan stored procedure. Tujuan utama dari UDF adalah menghitung dan mengembalikan sebuah nilai. Nilai return ini bukan opsional; ini merupakan persyaratan wajib dari sebuah UDF. Setiap UDF harus memiliki pernyataan return yang secara eksplisit memberikan sebuah nilai, sehingga membuat UDF berguna untuk perhitungan, transformasi data, dan tugas-tugas serupa.

Sebagai contoh, jika Anda memiliki sebuah UDF dalam bahasa JavaScript, tubuh dari UDF ini harus memiliki pernyataan return yang menentukan sebuah nilai. Ini bisa berupa hasil perhitungan, titik data yang telah diubah, atau nilai lain yang diperoleh dari logika internal fungsi tersebut. Oleh karena itu, UDF umumnya berfungsi sebagai logika modular dan dapat digunakan kembali dalam pernyataan SQL, sehingga meningkatkan efisiensi dan kemudahan pemeliharaan kode database Anda.

Membuat Stored Procedure

Pertimbangkan untuk membuat stored procedure ketika:

  • Anda sedang melakukan migrasi stored procedure yang sudah ada dari aplikasi atau sistem lain. Menjaga logika dalam sebuah procedure seringkali menyederhanakan proses migrasi dan memastikan konsistensi fungsional.
  • Anda perlu melakukan operasi administratif pada database. Operasi ini meliputi query-query biasa dan tugas-tugas manipulasi bahasa manipulasi data (DML) seperti SELECT dan UPDATE, serta tugas-tugas administratif seperti operasi bahasa definisi data (DDL) yang melibatkan penghapusan tabel sementara, penghapusan data yang lebih lama dari periode tertentu, atau penambahan pengguna.

Membuat UDF

Pertimbangkan untuk membuat UDF ketika:

  • Anda sedang melakukan migrasi UDF yang sudah ada dari aplikasi atau sistem lain. Pendekatan ini memastikan bahwa logika tetap terenkapsulasi dalam sebuah fungsi, menjaga integritas struktural desain aplikasi asli.
  • Anda membutuhkan sebuah fungsi yang dapat dipanggil sebagai bagian dari pernyataan SQL dan harus mengembalikan sebuah nilai untuk digunakan dalam pernyataan tersebut.
  • Output Anda perlu mencakup sebuah nilai untuk setiap baris input atau setiap kelompok. Sebagai contoh, Anda mungkin menggunakan sebuah UDF dalam pernyataan SQL seperti select MyFunction(col1) from table1; atau select MyAggregateFunction(col1) from table1 group by col2;.

Perbedaan Penggunaan dan Perilaku

Stored Procedure dan UDF memiliki beberapa perbedaan perilaku yang memengaruhi penggunaan dan kesesuaian mereka untuk tugas-tugas yang berbeda di Snowflake. Perbedaan ini meliputi nilai return, bagaimana mereka digunakan dalam SQL, konteks di mana mereka dapat dipanggil, jumlah yang dapat dipanggil dalam satu pernyataan, dan kemampuan mereka untuk mengakses database.

UDF Mengembalikan Nilai; Stored Procedure Tidak Perlu

Baik stored procedure maupun fungsi dapat mengembalikan sebuah nilai. Namun, tubuh dari sebuah stored procedure diizinkan, tetapi tidak diwajibkan, untuk secara eksplisit mengembalikan sebuah nilai, seperti penanda kesalahan.

Nilai yang dikembalikan oleh sebuah stored procedure tidak dapat digunakan secara langsung dalam SQL, berbeda dengan nilai yang dikembalikan oleh sebuah fungsi. Meskipun stored procedure dapat mengembalikan sebuah nilai, sintaksis perintah CALL tidak memberikan tempat untuk menyimpan nilai yang dikembalikan atau cara untuk memprosesnya atau mengirimkan nilai tersebut ke operasi lain. Namun, ada cara-cara tidak langsung untuk menggunakan nilai yang dikembalikan oleh sebuah stored procedure.

UDF Dapat Dipanggil dalam Konteks Pernyataan Lainnya; Stored Procedure Dipanggil Secara Independen

Sebuah stored procedure tidak dievaluasi menjadi sebuah nilai dan tidak dapat digunakan dalam semua konteks di mana ekspresi umum digunakan. Sebagai contoh, Anda tidak dapat menjalankan SELECT my_stored_procedure().... Di sisi lain, sebuah UDF dievaluasi menjadi sebuah nilai dan dapat digunakan dalam konteks di mana ekspresi umum digunakan, seperti SELECT my_function() ....

Beberapa UDF Dapat Dipanggil dengan Satu Pernyataan; Satu Stored Procedure Dipanggil dengan Satu Pernyataan

Satu pernyataan yang dapat dijalankan hanya dapat memanggil satu stored procedure. Sebaliknya, satu pernyataan SQL dapat memanggil beberapa fungsi. Demikian pula, stored procedure, berbeda dengan fungsi, tidak dapat dipanggil sebagai bagian dari sebuah ekspresi. Namun, stored procedure dapat memanggil stored procedure lain, atau memanggil dirinya sendiri secara rekursif.

UDF Tidak Dapat Mengakses Basis Data; Stored Procedure Dapat

Dalam sebuah stored procedure, Anda dapat menjalankan operasi-operasi database, seperti SELECT, UPDATE, dan CREATE. Sebaliknya, UDF tidak memiliki akses ke API yang dapat melakukan operasi-operasi database. Perbedaan utama ini membuat stored procedure menjadi alat yang kuat untuk manajemen dan manipulasi database, sementara UDF melayani tujuan yang lebih spesifik dalam menghitung dan mengembalikan nilai-nilai.

Referensi

https://docs.snowflake.com/en/developer-guide/stored-procedures-vs-udfs

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!