BUAT FUNGSI (Eksternal)
Berlaku untuk: Databricks Runtime
Membuat fungsi eksternal sementara atau permanen. Fungsi sementara dicakup pada tingkat sesi di mana fungsi permanen dibuat dalam katalog persisten dan tersedia untuk semua sesi.
Sumber daya yang ditentukan dalam USING
klausul tersedia untuk semua pelaksana ketika dieksekusi untuk pertama kalinya.
Selain antarmuka SQL, Spark memungkinkan Anda membuat fungsi skalar dan agregat yang ditentukan pengguna ubah suaian menggunakan API Scala, Python, dan Java. Lihat Fungsi skalar eksternal yang ditentukan pengguna (UDF) dan Fungsi agregat yang ditentukan pengguna (UDAF) untuk informasi selengkapnya.
Sintaks
CREATE [ OR REPLACE ] [ TEMPORARY ] FUNCTION [ IF NOT EXISTS ]
function_name AS class_name [ resource_locations ]
Parameter
OR REPLACE
Jika ditentukan, sumber daya untuk fungsi dimuat ulang. Ini terutama berguna untuk mengambil setiap perubahan yang dibuat pada implementasi fungsi. Parameter ini saling eksklusif dengan
IF NOT EXISTS
dan tidak dapat ditentukan bersama.SEMENTARA
Menunjukkan 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 untuk fungsi semacam ini.IF NOT EXISTS
Jika ditentukan, buat fungsi hanya jika tidak ada. Pembuatan fungsi berhasil (tidak ada kesalahan yang dilemparkan) jika fungsi yang ditentukan sudah ada dalam sistem. Parameter ini saling eksklusif dengan
OR REPLACE
dan tidak dapat ditentukan bersama.-
Nama untuk fungsi. Nama fungsi mungkin secara opsional memenuhi syarat dengan nama skema.
Fungsi yang dibuat hanya
hive_metastore
dapat berisi karakter dan garis bawah ASCII alfanumerik. class_name
Nama kelas yang menyediakan implementasi untuk fungsi yang akan dibuat. Kelas pelaksana harus memperluas salah satu kelas dasar sebagai berikut:
- Harus memperpanjang
UDF
atauUDAF
dalamorg.apache.hadoop.hive.ql.exec
paket. - Harus memperpanjang
AbstractGenericUDAFResolver
,GenericUDF
, atauGenericUDTF
dalamorg.apache.hadoop.hive.ql.udf.generic
paket. - Harus memperpanjang
UserDefinedAggregateFunction
dalamorg.apache.spark.sql.expressions
paket.
- Harus memperpanjang
resource_locations
Daftar sumber daya yang berisi implementasi fungsi bersama dengan dependensinya.
Sintaks:
USING { { (JAR | FILE | ARCHIVE) resource_uri } , ... }
Contoh
-- 1. Create a simple UDF `SimpleUdf` that increments the supplied integral value by 10.
-- import org.apache.hadoop.hive.ql.exec.UDF;
-- public class SimpleUdf extends UDF {
-- public int evaluate(int value) {
-- return value + 10;
-- }
-- }
-- 2. Compile and place it in a JAR file called `SimpleUdf.jar` in /tmp.
-- Create a table called `test` and insert two rows.
> CREATE TABLE test(c1 INT);
> INSERT INTO test VALUES (1), (2);
-- Create a permanent function called `simple_udf`.
> CREATE FUNCTION simple_udf AS 'SimpleUdf'
USING JAR '/tmp/SimpleUdf.jar';
-- Verify that the function is in the registry.
> SHOW USER FUNCTIONS;
function
------------------
default.simple_udf
-- Invoke the function. Every selected value should be incremented by 10.
> SELECT simple_udf(c1) AS function_return_value FROM t1;
function_return_value
---------------------
11
12
-- Created a temporary function.
> CREATE TEMPORARY FUNCTION simple_temp_udf AS 'SimpleUdf'
USING JAR '/tmp/SimpleUdf.jar';
-- Verify that the newly created temporary function is in the registry.
-- The temporary function does not have a qualified
-- schema associated with it.
> SHOW USER FUNCTIONS;
function
------------------
default.simple_udf
simple_temp_udf
-- 1. Modify `SimpleUdf`'s implementation to add supplied integral value by 20.
-- import org.apache.hadoop.hive.ql.exec.UDF;
-- public class SimpleUdfR extends UDF {
-- public int evaluate(int value) {
-- return value + 20;
-- }
-- }
-- 2. Compile and place it in a jar file called `SimpleUdfR.jar` in /tmp.
-- Replace the implementation of `simple_udf`
> CREATE OR REPLACE FUNCTION simple_udf AS 'SimpleUdfR'
USING JAR '/tmp/SimpleUdfR.jar';
-- Invoke the function. Every selected value should be incremented by 20.
> SELECT simple_udf(c1) AS function_return_value FROM t1;
function_return_value
---------------------
21
22