Apakah ada prosedur tersimpan yang dikirimkan oleh Snowflake?

SHOW PROCEDURES IN ACCOUNT;

SELECT * FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) WHERE "is_builtin" != 'N';
-- 0 rows

SHOW FUNCTIONS IN ACCOUNT;

SELECT * FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) WHERE "is_builtin" != 'N';
--  571

Kami memiliki daftar fungsi yang cukup luas, tetapi saya tidak dapat menemukan satu pun prosedur tersimpan.

Beberapa fungsi (misalnya SYSTEM$CANCEL_ALL_QUERIES) mengandung efek samping, yang berarti dapat disimpan sebagai prosedur (bahkan mendukung eksekusi melalui PANGGILAN):

SELECT SYSTEM$CANCEL_ALL_QUERIES(CURRENT_SESSION()::INT);
CALL SYSTEM$CANCEL_ALL_QUERIES(CURRENT_SESSION()::INT);

Apakah ada alasan di balik pendekatan ini?

0
Lukasz Szozda 8 Mei 2021, 00:02

1 menjawab

Jawaban Terbaik

Snowflake telah menjadi produk yang berkembang selama 6 tahun terakhir. Ketika pertama kali dirilis, tidak ada dukungan untuk SQL dinamis alias Prosedur, dan hanya ada sedikit dukungan untuk introspeksi Database, seperti yang Anda miliki di tabel sistem PostgreSQL.

Begitu banyak dari "lakukan X" atau "ceritakan tentang Y" yang dilakukan melalui panggilan fungsi yang agak jelek, yang dengan jelas menunjukkan kepada Anda di mana keluar dari lubang pasir (dibandingkan dengan PostgreSQL di mana db health/state juga "tabel"). Saya ingat tim kami mengkodekan dukungan untuk membaca hasil dari perintah SHOW karena RESULT_SCAN tidak ada.

Jadi platform telah banyak berubah, dan sekarang menggunakan model mental "fungsi" hanya membaca, "prosedur" mengubah pola pikir, tampaknya hal-hal yang sesuai dengan model.

1
Simeon Pilgrim 8 Mei 2021, 07:37