BUAT FUNGSI (Eksternal)

Berlaku untuk:centang ditandai ya 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.

  • function_name

    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 atau UDAF dalam org.apache.hadoop.hive.ql.exec paket.
    • Harus memperpanjang AbstractGenericUDAFResolver, GenericUDF, atau GenericUDTF dalam org.apache.hadoop.hive.ql.udf.generic paket.
    • Harus memperpanjang UserDefinedAggregateFunction dalam org.apache.spark.sql.expressions paket.
  • 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