إنشاء دالة (خارجية)

ينطبق على:وضع علامة Databricks Runtime

إنشاء دالة خارجية مؤقتة أو دائمة. يتم تحديد نطاق الوظائف المؤقتة على مستوى جلسة العمل حيث يتم إنشاء وظائف دائمة في الكتالوج المستمر وإتاحتها لجميع الجلسات. يتم توفير الموارد المحددة في USING عبارة لجميع المنفذين عند تنفيذها للمرة الأولى.

بالإضافة إلى واجهة SQL، يسمح لك Spark بإنشاء وظائف عددية وتجميعية مخصصة معرفة من قبل المستخدم باستخدام Scala وPython وJava APIs. راجع الدالات العددية الخارجية المعرفة من قبل المستخدم (UDFs) والدالات التجميعية المعرفة من قبل المستخدم (UDAFs) لمزيد من المعلومات.

بناء الجملة

CREATE [ OR REPLACE ] [ TEMPORARY ] FUNCTION [ IF NOT EXISTS ]
    function_name AS class_name [ resource_locations ]

المعلمات

  • أو استبدال

    إذا تم تحديدها، يتم إعادة تحميل موارد الدالة. وهذا مفيد بشكل رئيسي لالتقاط أي تغييرات تم إجراؤها على تنفيذ الوظيفة. هذه المعلمة حصرية بشكل متبادل إلى IF NOT EXISTS ولا يمكن تحديدها معا.

  • المؤقته

    يشير إلى نطاق الدالة التي يتم إنشاؤها. عندما TEMPORARY يتم تحديد، تكون الدالة التي تم إنشاؤها صالحة ومرئية في جلسة العمل الحالية. لا يتم إجراء إدخال مستمر في الكتالوج لهذا النوع من الدالات.

  • إذا لم يكن موجودا

    إذا تم تحديدها، يتم إنشاء الدالة فقط عندما لا تكون موجودة. ينجح إنشاء الدالة (لا يتم طرح أي خطأ) إذا كانت الدالة المحددة موجودة بالفعل في النظام. هذه المعلمة حصرية بشكل متبادل إلى OR REPLACE ولا يمكن تحديدها معا.

  • function_name

    اسم للدالة. قد يكون اسم الدالة مؤهلا اختياريا باسم مخطط.

    يمكن أن تحتوي الدالات التي تم إنشاؤها في hive_metastore فقط على أحرف ASCII أبجدية رقمية وتسطير أسفل السطر.

  • class_name

    اسم الفئة التي توفر التنفيذ للدالة التي سيتم إنشاؤها. يجب أن توسع فئة التنفيذ إحدى الفئات الأساسية كما يلي:

    • يجب توسيع UDF أو UDAF في org.apache.hadoop.hive.ql.exec الحزمة.
    • يجب توسيع AbstractGenericUDAFResolverأو GenericUDFأو GenericUDTF في org.apache.hadoop.hive.ql.udf.generic الحزمة.
    • يجب توسيع UserDefinedAggregateFunction في org.apache.spark.sql.expressions الحزمة.
  • resource_locations

    قائمة الموارد التي تحتوي على تنفيذ الدالة جنبا إلى جنب مع تبعياتها.

    بناء الجملة:USING { { (JAR | FILE | ARCHIVE) resource_uri } , ... }

الأمثلة

-- 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