Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:
Databricks SQL
Databricks Runtime
Membuat fungsi skalar atau tabel SQL yang mengambil sekumpulan argumen dan mengembalikan nilai skalar atau sekumpulan baris.
Berlaku untuk:
Databricks SQL
Databricks Runtime 13.3 LTS ke atas
Membuat fungsi skalar Python yang mengambil sekumpulan argumen dan mengembalikan nilai skalar.
UDF Python memerlukan Katalog Unity pada gudang SQL tanpa server atau pro, atau sumber daya komputasi yang mendukung Katalog Unity.
Berlaku untuk:
Databricks SQL
Databricks Runtime 14.1 ke atas
Selain menggunakan pemanggilan parameter posisional, Anda juga dapat memanggil SQL dan Python UDF dengan menggunakan pemanggilan parameter bernama.
Berlaku untuk:
Databricks SQL
Databricks Runtime 16.2 dan versi lebih baru
Gunakan klausa untuk ENVIRONMENT menginstal dependensi kustom dan mengatur versi lingkungan untuk fungsi yang dideklarasikan dengan LANGUAGE PYTHON. Pada komputasi klasik, an environment_version other than 'None' membutuhkan Databricks Runtime 18.2 atau lebih tinggi.
Berlaku untuk:
Databricks SQL
Databricks Runtime 16.3 ke atas
Gunakan PARAMETER STYLE PANDAS bersama HANDLER klausa untuk mendefinisikan fungsi batch LANGUAGE PYTHON . Handler memproses data input sebagai iterator objek pandas.Series dan menghasilkan pandas.Series objek sebagai output.
Berlaku untuk:
Databricks SQL
Databricks Runtime 18.1 ke atas
Gunakan klausa dengan HANDLER fungsi skalar LANGUAGE PYTHON baris demi satu waktu untuk menamai fungsi Python yang menangani input UDF. Pada komputasi serverless dan pada gudang SQL pro dan serverless, atur UDF environment_version secara eksplisit ke atau 6 lebih tinggi.
Berlaku untuk:
Databricks SQL
Databricks Runtime 16.3 ke atas
Gunakan klausa ini CREDENTIALS untuk mendeklarasikan kredensial layanan Unity Catalog yang diakses oleh fungsi skalar LANGUAGE PYTHON batch atau baris per waktu. Lihat Gunakan kredensial layanan dalam Python UDF untuk kebutuhan tipe fungsi, komputasi, lingkungan, dan jaringan.
Berlaku untuk:
Databricks SQL
Databricks Runtime 19 ke atas
Gunakan klausa ini SECRETS untuk mendeklarasikan rahasia Unity Catalog yang diakses oleh fungsi skalar, batch LANGUAGE PYTHON , atau fungsi skalar LANGUAGE SCALA . Lihat persyaratan dan izin UDF untuk komputasi, lingkungan, dan persyaratan izin.
Berlaku untuk:
pemeriksaan Databricks SQL
Databricks Runtime 18.2 ke atas
Membuat fungsi skalar Scala atau Java yang menjalankan logika JVM yang dikompilasi yang dikemas sebagai JAR. UDF Scala dan Java memerlukan Katalog Unity. Dukungan SQL warehouse terbatas pada gudang SQL pro dan serverless. Anda mereferensikan kode yang dikompilasi dengan HANDLER klausul dan memberikan JAR melalui ENVIRONMENT kunci klausa java_dependencies . Untuk alur kerja lengkap, termasuk cara membangun JAR dan mendaftarkan fungsi, lihat Scala dan Java fungsi yang ditentukan pengguna (UDF) di Unity Catalog.
Sintaks
CREATE [OR REPLACE] [TEMPORARY] FUNCTION [IF NOT EXISTS]
function_name ( [ function_parameter [, ...] ] )
{ [ RETURNS data_type ] |
RETURNS TABLE [ ( column_spec [, ...]) ] }
[ characteristic [...] ]
{ AS dollar_quoted_string | HANDLER handler_name [ AS dollar_quoted_string ] | RETURN { expression | query } }
function_parameter
parameter_name data_type [DEFAULT default_expression] [COMMENT parameter_comment]
column_spec
column_name data_type [COMMENT column_comment]
characteristic
{ LANGUAGE { SQL | PYTHON | SCALA | JAVA } |
[NOT] DETERMINISTIC |
COMMENT function_comment |
[CONTAINS SQL | READS SQL DATA] |
DEFAULT COLLATION default_collation_name |
PARAMETER STYLE PANDAS |
CREDENTIALS ( service_credential [, ...] ) |
SECRETS ( secret_name [, ...] ) } |
environment }
service_credential
credential_name [ DEFAULT | AS credential_alias ]
secret_name
catalog_name.schema_name.secret_name
environment
ENVIRONMENT ( { environment_key = environment_value } [, ...] )
Parameter
ATAU GANTIKAN
Jika ditentukan, fungsi atau prosedur yang sudah ada dengan nama yang sama akan diganti. Tanda tangan fungsi baru (jumlah parameter dan tipe parameter), tipe pengembalian, dan isi dapat berbeda dari fungsi yang sudah ada. Anda tidak dapat menentukan parameter ini dengan
IF NOT EXISTS.SEMENTARA
Cakupan fungsi yang sedang dibuat. Saat Anda menentukan
TEMPORARY, fungsi yang dibuat valid dan terlihat di sesi saat ini. Tidak ada entri persisten yang dibuat dalam katalog.JIKA TIDAK ADA
Jika ditentukan, buat fungsi hanya jika tidak ada. Pembuatan fungsi berhasil (tidak ada kesalahan yang dilemparkan) jika fungsi yang ditentukan sudah ada dalam sistem. Anda tidak dapat menentukan parameter ini dengan
OR REPLACE.-
Nama untuk fungsi. Untuk fungsi permanen, Anda dapat secara opsional memenuhi syarat nama fungsi dengan nama skema. Jika nama tidak memenuhi syarat, fungsi permanen dibuat dalam skema saat ini.
Nama fungsi harus unik untuk semua rutinitas (prosedur dan fungsi) dalam skema.
function_parameter
Menentukan parameter fungsi.
-
Nama parameter harus unik dalam fungsi.
-
Jenis data apa pun yang didukung. Untuk Python,
data_typediubah ke jenis data Python sesuai dengan pemetaan bahasa ini.STRINGdata_typeUntuk pengurutan bawaan, adalah fungsidefault_collation_name. default_expression DEFAULT
Berlaku untuk:
Databricks SQL
Databricks Runtime 10.4 LTS ke atasOpsional default yang akan digunakan ketika pemanggilan fungsi tidak menetapkan argumen ke parameter.
default_expressionharus dapat ditransmisikan kedata_type. Ekspresi tidak boleh mereferensikan parameter lain atau mengandung subkueri.Saat Anda menentukan default untuk satu parameter, semua parameter berikut juga harus memiliki default.
DEFAULTdidukung hanya untukLANGUAGE SQL.KOMENTAR komentar
Deskripsi opsional parameter.
commentharus berupaSTRINGliteral.
-
MENGEMBALIKAN data_type
Jenis data hasil dari fungsi skalar. Untuk Python UDF, nilai return harus sesuai dengan deklarasi
data_type.Untuk SQL UDF, klausa ini bersifat opsional. Tipe data diambil dari badan fungsi jika tidak disediakan.
RETURNS TABLE [ (column_spec [,...] ) ]
Klausa ini menandai fungsi sebagai fungsi tabel. Secara opsional juga menentukan tanda tangan hasil fungsi tabel. Jika tidak ada column_spec yang ditentukan, itu akan berasal dari isi UDF SQL.
RETURNS TABLEdidukung untukLANGUAGE SQLdan untukLANGUAGE PYTHONUDTF polimorfik (Databricks Runtime 18.1 ke atas).-
Nama kolom harus unik dalam tanda tangan.
-
Jenis data apa pun yang didukung.
KOMENTAR column_comment
Deskripsi opsional kolom.
commentharus berupaSTRINGliteral.
-
-
Isi fungsi. Untuk fungsi skalar, itu bisa berupa kueri atau ekspresi. Untuk fungsi tabel, itu hanya bisa menjadi kueri. Ekspresi tidak dapat berisi:
- Fungsi agregat
- Fungsi Jendela
- Fungsi pemberian peringkat
- Fungsi penghasil baris seperti explode
Di dalam isi fungsi Anda dapat merujuk ke parameter dengan nama tanpa penentu atau dengan mengaitkan parameter dengan nama fungsi.
SEPERTI dollar_quoted_definition
dollar_quoted_definitionadalah fungsi Pythonbodyyang diapit oleh dua$[tag]$body$[tag]$yang cocok.tagdapat berupa string kosong.Contoh:
$$ return “Hello world” $$ $py$ return "Hello World" $py$handler_name HANDLER
Untuk fungsi skalar
LANGUAGE PYTHONbaris demi satu waktu:Berlaku untuk:
Databricks SQL
Databricks Runtime 18.1 ke atashandler_nameadalahSTRINGliteral yang menamai fungsi Python dalam definisi yang dikutip dolar yang mengimplementasikan UDF. Handler menerima argumen UDF dan mengembalikan nilai yang sesuai dengan tipe pengembalian yang dideklarasikan. Pada komputasi serverless dan pada gudang SQL pro dan serverless, atur UDFenvironment_versionsecara eksplisit ke atau6lebih tinggi. Lihat Gunakan handler bernama dalam Python UDF skalar.Untuk fungsi batch
LANGUAGE PYTHONyang dinyatakan denganPARAMETER STYLE PANDAS:Berlaku untuk:
Databricks SQL
Databricks Runtime 16.3 ke atashandler_nameadalahSTRINGliteral yang menamai fungsi Python dalam definisi yang dikutip dolar yang mengimplementasikan UDF. Handler menerima iterator atas satu atau lebihpandas.Seriesobjek dan menghasilkanpandas.Seriesobjek dengan jumlah baris yang sama dengan input. Lihat fungsi handler batch UDF.Untuk fungsi a
LANGUAGE SCALA/orLANGUAGE JAVA:Berlaku untuk:
pemeriksaan Databricks SQL
Databricks Runtime 18.2 ke atasJalur yang sepenuhnya memenuhi syarat ke metode yang mengimplementasikan
LANGUAGE SCALAfungsi atauLANGUAGE JAVA, sebagaiSTRINGharfiah. Gunakan format'package.Object.method'untuk Scala dan'package.ClassName.method'untuk Java. Kode yang dikompilasi harus disediakan sebagai JAR melaluijava_dependencieskunciENVIRONMENTklausul.CREDENTIALS ( service_credential [, ...] )
Berlaku untuk:
Databricks SQL
Databricks Runtime 16.3 ke atasMendeklarasikan satu atau lebih kredensial layanan Unity Catalog yang dapat digunakan oleh fungsi batch
LANGUAGE PYTHON. Fungsi skalarLANGUAGE PYTHONbaris demi satu waktu memerlukan Databricks Runtime 18.1 atau lebih tinggi pada komputasi klasik. Pada komputasi serverless dan pada gudang SQL pro maupun serverless, fungsi skalar harus secara eksplisit diaturenvironment_versionke atau6di atas. Lihat Gunakan kredensial layanan dalam Python UDF untuk persyaratan lengkap.Masing-masing
credential_namemenamai kredensial layanan Unity Catalog. Pembuat UDF harus memilikiACCESShak istimewa pada setiap kredensial layanan. Tandai paling banyak satu kredensialDEFAULTagar SDK cloud yang sudah dipatch akan menggunakannya secara otomatis. GunakanAS credential_aliasuntuk menetapkan alias unik ke kredensial non-default.RAHASIA ( secret_name [, ...] )
Berlaku untuk:
Databricks SQL
Databricks Runtime 19 ke atasMendeklarasikan rahasia Unity Catalog yang dapat diakses oleh fungsi skalar, batch
LANGUAGE PYTHON, atau fungsi skalarLANGUAGE SCALA. Definisi UDF harus secara eksplisit diaturenvironment_versionke atau6di atas. Setiap namasecret_nameharus terdiri dari tiga bagian dalam bentukcatalog.schema.secret. Untuk membuat atau mengganti UDF, Anda harus memilikiREAD SECRETkatalog dan skema pada setiap secret danUSE CATALOGUSE SCHEMApada induknya. Lihat persyaratan dan izin UDF untuk dukungan komputasi dan perilaku izin runtime. Sebagai contoh, lihat Python UDF atau Scala UDF.karakteristik
Semua klausul karakteristik bersifat opsional. Anda dapat menentukan sejumlah dari mereka dalam urutan apa pun, tetapi Anda dapat menentukan setiap klausul hanya sekali.
LANGUAGE SQL, LANGUAGE PYTHON, LANGUAGE SCALA, atau LANGUAGE JAVA
Bahasa implementasi fungsi.
LANGUAGE SCALAdanLANGUAGE JAVAmemerlukan Katalog Unity danHANDLERklausa yang mereferensikan kode yang dikompilasi yang disediakan melaluiENVIRONMENTklausa. Lihat fungsi yang ditentukan pengguna (UDF) Scala dan Java di Unity Catalog.PANDAS GAYA PARAMETER
Berlaku untuk:
Databricks SQL
Databricks Runtime 16.3 ke atasMendeklarasikan fungsi batch
LANGUAGE PYTHONyang bertukar data dengan handler sebagai iterator objekpandas.Series. Anda juga harus menentukan klausulHANDLER. Lihat fungsi batch Python yang ditentukan pengguna (UDF) di Unity Catalog.[TIDAK] DETERMINISTIK
Apakah fungsi itu deterministik? Fungsi bersifat deterministik ketika hanya mengembalikan satu hasil untuk sekumpulan argumen tertentu. Anda dapat menandai fungsi sebagai
DETERMINISTICketika fungsinya tidak demikian, dan sebaliknya. Salah satu alasannya mungkin untuk mendorong atau mencegah pengoptimalan kueri seperti pelipatan konstan atau penyimpanan sementara kueri. Jika Anda tidak menentukan opsi ini, default tergantung pada bahasa fungsi. Untuk fungsi SQL, ini diturunkan dari badan fungsi. Untuk fungsi Python, Scala, dan Java, fungsinya adalahNOT DETERMINISTIC.KOMENTAR function_comment
Komentar untuk fungsi tersebut.
function_commentharus berupa String harfiah.CONTAINS SQL atau READS SQL DATA
Apakah fungsi membaca data secara langsung atau tidak langsung dari tabel atau tampilan. Saat fungsi membaca data SQL, Anda tidak dapat menentukan
CONTAINS SQL. Jika Anda tidak menentukan salah satu klausul, properti berasal dari isi fungsi.KOLASI DEFAULT default_collation_name
Berlaku untuk:
Databricks SQL
Databricks Runtime 17.0 ke atasMenentukan kolatasi default yang akan digunakan untuk:
-
STRINGparameter danRETURNSjenis data danRETURNS TABLEbidang fungsi. -
DEFAULTEkspresi. - Isi fungsi SQL.
Jika tidak ditentukan, kolaborasi default berasal dari skema tempat fungsi dibuat.
-
lingkungan
Menentukan lingkungan untuk fungsi yang dideklarasikan dengan
LANGUAGE PYTHON, ,LANGUAGE SCALAatauLANGUAGE JAVA. KlausaENVIRONMENTtidak didukung untuk fungsi SQL. Anda harus menentukanenvironment_versionkapan pun Anda menyertakan klausul tersebutENVIRONMENT.dependensi
Array string JSON yang menentukan paket Python yang diperlukan atau file roda untuk
LANGUAGE PYTHONfungsi. Kuncinyadependenciestidak peka huruf besar/kecil. Format yang didukung:- Paket PyPI dengan versi opsional, misalnya: "simplejson==3.19.3"
- Jalur absolut ke file wheel yang disimpan dalam volume Unity Catalog, misalnya: "/Volumes/my_catalog/my_schema/my_volume/packages/custom_package-1.0.0.whl"
- URL HTTPS ke file roda di penyimpanan eksternal, misalnya: "https://my-bucket.s3.amazonaws.com/packages/special_package-2.0.0.whl?Expires=..."
Untuk dependensi yang disimpan dalam volume Unity Catalog, pembuat fungsi harus memiliki
READ VOLUMEpada volume sumber. Kebutuhan penelepon tergantung pada versi lingkungan. Lihat Izin untuk dependensi dalam volume Unity Catalog.java_dependencies
Berlaku untuk:
pemeriksaan Databricks SQL
Databricks Runtime 18.2 ke atasArray string JSON yang menentukan file JAR yang berisi kode yang dikompilasi untuk fungsi
LANGUAGE SCALAatauLANGUAGE JAVA. Setiap entri adalah jalur absolut ke file JAR yang disimpan dalam volume Katalog Unity, misalnya: "/Volumes/my_catalog/my_schema/my_volume/packages/my-udf-assembly-0.1.0.jar". Kemas kode sebagai JAR lemak yang mencakup semua dependensi pihak ketiga yang digunakan oleh UDF.environment_version
Sebuah string yang menentukan versi lingkungan.
Untuk
LANGUAGE PYTHON, nilai yang didukung adalah versi lingkungan dari 3 atau lebih, seperti'6', atau'None'. Nilai'None'tersebut memilih lingkungan Python default. Pada komputasi klasik, pengaturanenvironment_versionke nilai selain'None'memerlukan Databricks Runtime 18.2 atau lebih tinggi. Pada Databricks Runtime 16.2 hingga 18.1, hanya'None'yang didukung. Ketika versi lingkungan tetap didukung, pilih secara eksplisit salah satu untuk perilaku yang dapat diprediksi.Pada komputasi serverless dan pada gudang SQL pro maupun serverless, beberapa fitur memerlukan versi lingkungan eksplisit. Atur
environment_versionke versi yang diperlukan atau lebih tinggi dalam setiap definisi UDF. Menghilangkan klausa atau pengaturanenvironment_version = 'None'tidak mengaktifkan fitur-fitur tersebut. Lihat persyaratan fitur Python UDF.Untuk kompatibilitas versi komputasi klasik, lihat Versi lingkungan pada komputasi klasik. Untuk daftar versi yang tersedia, lihat Versi Lingkungan.
Untuk
LANGUAGE SCALAdanLANGUAGE JAVA, nilainya harus'4'atau lebih tinggi. Versi lingkungan 4 menentukan Scala 2.13.16 dan JDK 17. Lihat versi Lingkungan.
Pustaka yang Didukung di UDF Python
Untuk menggunakan dependensi apa pun, gunakan import <package> dalam isi fungsi. Misalnya, lihat yang berikut ini:
CREATE FUNCTION […]
AS $$
import json
[... (rest of function definition)]
$$
Secara default, dependensi terbatas pada pustaka Python standar dan pustaka berikut:
| Paket | Versi |
|---|---|
| pemutih | 4.0.0 |
| chardet | 4.0.0 |
| charset-normalizer | 2.0.4 |
| defusedxml | 0.7.1 |
| googleapis-common-protos | 1.56.4 |
| grpcio | 1.47.0 |
| grpcio-status | 1.47.0 |
| jmespath | 0.10.0 |
| joblib | 1.1.0 |
| numpy (perpustakaan Python untuk operasi numerik) | 1.20.3 |
| kemasan | 21.3 |
| Panda | 1.3.4 |
| kambing hitam | 0.5.2 |
| protobuf | 4.21.5 |
| pyarrow | 7.0.0 |
| pyparsing | 3.0.9 |
| python-dateutil | 2.8.2 |
| pytz | 2021.3 |
| scikit-learn | 0.24.2” |
| scipy (perpustakaan Python untuk komputasi ilmiah) | 1.7.1” |
| setuptools | 65.2.0 |
| Enam | 1.16.0 |
| threadpoolctl | 3.1.0 |
| webencodings=0.5.1 | 0.5.1 |
| agen pengguna | 2.2.0 |
| kriptografi | 38.0.4 |
Dependensi kustom dalam UDF Python
Untuk menggunakan dependensi tambahan di luar pustaka standar dan paket bawaan yang didukung, tentukan dalam ENVIRONMENT klausa.
Contoh
- Membuat dan menggunakan fungsi skalar SQL
- Membuat dan menggunakan fungsi yang menggunakan DEFAULT
- Membuat fungsi tabel SQL
- Mengganti fungsi SQL
- Menjelaskan fungsi SQL
- Membuat fungsi Python
- Menentukan dependensi kustom dalam fungsi Python
- Membuat fungsi Scala dan Java
Membuat dan menggunakan fungsi skalar SQL
> CREATE VIEW t(c1, c2) AS VALUES (0, 1), (1, 2);
-- Create a temporary function with no parameter.
> CREATE TEMPORARY FUNCTION hello() RETURNS STRING
RETURN 'Hello World!';
> SELECT hello();
Hello World!
-- Create a permanent function with parameters.
> CREATE FUNCTION area(x DOUBLE, y DOUBLE) RETURNS DOUBLE RETURN x * y;
-- Use a SQL function in the SELECT clause of a query.
> SELECT area(c1, c2) AS area FROM t;
0.0
2.0
-- Use a SQL function in the WHERE clause of a query.
> SELECT * FROM t WHERE area(c1, c2) > 0;
1 2
-- Compose SQL functions.
> CREATE FUNCTION square(x DOUBLE) RETURNS DOUBLE RETURN area(x, x);
> SELECT c1, square(c1) AS square FROM t;
0 0.0
1 1.0
-- Create a non-deterministic function
> CREATE FUNCTION roll_dice()
RETURNS INT
NOT DETERMINISTIC
CONTAINS SQL
COMMENT 'Roll a single 6 sided die'
RETURN (rand() * 6)::INT + 1;
-- Roll a single 6-sided die
> SELECT roll_dice();
3
Membuat dan menggunakan fungsi yang menggunakan nilai bawaan
-- Extend the function to support variable number of sides and dice.
-- Use defaults to support a variable number of arguments
> DROP FUNCTION roll_dice;
> CREATE FUNCTION roll_dice(num_dice INT DEFAULT 1 COMMENT 'number of dice to roll (Default: 1)',
num_sides INT DEFAULT 6 COMMENT 'number of sides per die (Default: 6)')
RETURNS INT
NOT DETERMINISTIC
CONTAINS SQL
COMMENT 'Roll a number of n-sided dice'
RETURN aggregate(sequence(1, roll_dice.num_dice, 1),
0,
(acc, x) -> (rand() * roll_dice.num_sides)::int,
acc -> acc + roll_dice.num_dice);
-- Roll a single 6-sided die still works
> SELECT roll_dice();
3
-- Roll 3 6-sided dice
> SELECT roll_dice(3);
15
-- Roll 3 10-sided dice
> SELECT roll_dice(3, 10)
21
-- Roll 3 10-sided dice using named parameter invocation
> SELECT roll_dice(10 => num_sides, num_dice => 3)
17
-- Create a SQL function with a scalar subquery.
> CREATE VIEW scores(player, score) AS VALUES (0, 1), (0, 2), (1, 2), (1, 5);
> CREATE FUNCTION avg_score(p INT) RETURNS FLOAT
COMMENT 'get an average score of the player'
RETURN SELECT AVG(score) FROM scores WHERE player = p;
> SELECT c1, avg_score(c1) FROM t;
0 1.5
1 3.5
Membuat fungsi tabel SQL
-- Produce all weekdays between two dates
> CREATE FUNCTION weekdays(start DATE, end DATE)
RETURNS TABLE(day_of_week STRING, day DATE)
RETURN SELECT extract(DAYOFWEEK_ISO FROM day), day
FROM (SELECT sequence(weekdays.start, weekdays.end)) AS T(days)
LATERAL VIEW explode(days) AS day
WHERE extract(DAYOFWEEK_ISO FROM day) BETWEEN 1 AND 5;
-- Return all weekdays
> SELECT weekdays.day_of_week, day
FROM weekdays(DATE'2022-01-01', DATE'2022-01-14');
1 2022-01-03
2 2022-01-04
3 2022-01-05
4 2022-01-06
5 2022-01-07
1 2022-01-10
2 2022-01-11
3 2022-01-12
4 2022-01-13
5 2022-01-14
-- Return weekdays for date ranges originating from a LATERAL correlation
> SELECT weekdays.*
FROM VALUES (DATE'2020-01-01'),
(DATE'2021-01-01'),
(DATE'2022-01-01') AS starts(start),
LATERAL weekdays(start, start + INTERVAL '7' DAYS);
3 2020-01-01
4 2020-01-02
5 2020-01-03
1 2020-01-06
2 2020-01-07
3 2020-01-08
5 2021-01-01
1 2021-01-04
2 2021-01-05
3 2021-01-06
4 2021-01-07
5 2021-01-08
1 2022-01-03
2 2022-01-04
3 2022-01-05
4 2022-01-06
5 2022-01-07
Mengganti fungsi SQL
-- Replace a SQL scalar function.
> CREATE OR REPLACE FUNCTION square(x DOUBLE) RETURNS DOUBLE RETURN x * x;
-- Replace a SQL table function.
> CREATE OR REPLACE FUNCTION getemps(deptno INT)
RETURNS TABLE (name STRING)
RETURN SELECT name FROM employee e WHERE e.deptno = getemps.deptno;
-- Describe a SQL table function.
> DESCRIBE FUNCTION getemps;
Function: default.getemps
Type: TABLE
Input: deptno INT
Returns: id INT
name STRING
Menjelaskan fungsi SQL
> DESCRIBE FUNCTION hello;
Function: hello
Type: SCALAR
Input: ()
Returns: STRING
> DESCRIBE FUNCTION area;
Function: default.area
Type: SCALAR
Input: x DOUBLE
y DOUBLE
Returns: DOUBLE
> DESCRIBE FUNCTION roll_dice;
Function: default.roll_dice
Type: SCALAR
Input: num_dice INT
num_sides INT
Returns: INT
> DESCRIBE FUNCTION EXTENDED roll_dice;
Function: default.roll_dice
Type: SCALAR
Input: num_dice INT DEFAULT 1 'number of dice to roll (Default: 1)'
num_sides INT DEFAULT 6 'number of sides per dice (Default: 6)'
Returns: INT
Comment: Roll a number of m-sided dice
Deterministic: false
Data Access: CONTAINS SQL
Configs: ...
Owner: the.house@always.wins
Create Time: Sat Feb 12 09:29:02 PST 2022
Body: aggregate(sequence(1, roll_dice.num_dice, 1),
0,
(acc, x) -> (rand() * roll_dice.num_sides)::int,
acc -> acc + roll_dice.num_dice)
Membuat fungsi Python
-- Hello World-like functionality using Python UDFs
> CREATE FUNCTION main.default.greet(s STRING)
RETURNS STRING
LANGUAGE PYTHON
AS $$
def greet(name):
return "Hello " + name + "!"
return greet(s) if s else None
$$
-- Can import functions from std library and environment
> CREATE FUNCTION main.default.isleapyear(year INT)
RETURNS BOOLEAN
LANGUAGE PYTHON
AS $$
import calendar
return calendar.isleap(year) if year else None
$$
-- Return values should match the declared data type.
> CREATE FUNCTION main.default.a_number()
RETURNS INTEGER
LANGUAGE PYTHON
AS $$
return 10
$$
-- Deal with exceptions.
> CREATE FUNCTION main.default.custom_divide(n1 INT, n2 INT)
RETURNS FLOAT
LANGUAGE PYTHON
AS $$
try:
return n1/n2
except ZeroDivisionException:
# in case of 0, we can return NULL.
return None
$$
Menentukan dependensi kustom dalam fungsi Python
-- Create a Python function with additional dependencies using the ENVIRONMENT clause.
> CREATE FUNCTION main.default.dump_json(data STRING)
RETURNS STRING
LANGUAGE PYTHON
ENVIRONMENT (
dependencies = '["simplejson==3.19.3", "/Volumes/my_catalog/my_schema/my_volume/packages/custom_package-1.0.0.whl", "https://my-bucket.s3.amazonaws.com/packages/special_package-2.0.0.whl?Expires=2043167927&Signature=abcd"]',
environment_version = '6'
)
AS $$
import simplejson as json
import custom_package
return json.dumps(custom_package.process(data))
$$;
-- Use the Python function in a query.
> SELECT dump_json('{"foo": "bar"}');
Membuat fungsi Scala dan Java
Contoh berikut mendaftarkan UDF dari kode JVM yang dikompilasi yang dikemas sebagai JAR dalam volume Katalog Unity. Klausa HANDLER mereferensikan metode dalam JAR, dan java_dependencies poin kunci ke JAR. Untuk alur kerja lengkap, termasuk cara membangun JAR, lihat Scala dan Java fungsi yang ditentukan pengguna (UDF) di Unity Catalog.
-- Register a Scala UDF from a JAR in a Unity Catalog volume.
> CREATE OR REPLACE FUNCTION my_catalog.my_schema.add_one_scala(x INT)
RETURNS INT
LANGUAGE SCALA
DETERMINISTIC
ENVIRONMENT (
java_dependencies = '["/Volumes/my_catalog/my_schema/udf_jars/my-udf-assembly-0.1.0.jar"]',
environment_version = '4'
)
HANDLER 'com.example.ScalaUDF.addOne';
-- Register a Java UDF from a JAR in a Unity Catalog volume.
> CREATE OR REPLACE FUNCTION my_catalog.my_schema.add_one_java(x INT)
RETURNS INT
LANGUAGE JAVA
DETERMINISTIC
ENVIRONMENT (
java_dependencies = '["/Volumes/my_catalog/my_schema/udf_jars/my-udf-1.0.jar"]',
environment_version = '4'
)
HANDLER 'com.example.JavaUDF.addOne';
-- Use the functions in a query.
> SELECT my_catalog.my_schema.add_one_scala(5);
6
> SELECT my_catalog.my_schema.add_one_java(5);
6