Unity Kataloğu'nda kullanıcı tanımlı işlevler (UDF)
Önemli
Bu özellik Genel Önizlemededir.
Azure Databricks, Unity Kataloğu tarafından yönetilen şemalara özel işlevleri kaydetmek için SQL'e özel bir söz dizimi sağlar. Unity Kataloğu'nda işlev olarak kaydedilen Python UDF'lerinin kapsamı ve desteği, kapsamı not defteri veya SparkSession olan PySpark UDF'lerinden farklıdır. Bkz . Kullanıcı tanımlı skaler işlevler - Python.
TAM SQL dil başvurusu için bkz . CREATE FUNCTION (SQL ve Python).
Unity Kataloğu'un işlevler üzerindeki izinleri nasıl yönettiği hakkında bilgi için bkz . CREATE FUNCTION.
Gereksinimler
- Databricks Runtime 13.3 LTS veya üzeri.
- Unity Kataloğu'nda kayıtlı UDF'lerde Python kodunu kullanmak için sunucusuz veya profesyonel bir SQL ambarı ya da Databricks Runtime 13.3 LTS veya üzerini çalıştıran bir küme kullanmanız gerekir.
- Unity Kataloğu'na kayıtlı bir UDF kullanılarak oluşturulan görünümleri çözümlemek için sunucusuz veya profesyonel bir SQL ambarı kullanmanız gerekir.
Unity Kataloğu'nda özel SQL işlevleri
Unity Kataloğu için yapılandırılmış işlemi kullanarak bir SQL işlevi oluşturduğunuzda, işlev varsayılan olarak etkin olan şemaya kaydedilir. Aşağıdaki örnek, yeni bir işlev için hedef katalog ve şema bildirmek için kullanabileceğiniz söz dizimini gösterir:
CREATE FUNCTION target_catalog.target_schema.roll_dice()
RETURNS INT
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
COMMENT 'Roll a single 6 sided die'
RETURN (rand() * 6)::INT + 1;
İşlevde yeterli ayrıcalıklara sahip tüm kullanıcılar, aşağıdaki örnekte olduğu gibi Unity Kataloğu için yapılandırılmış işlem ortamlarında işlevini kullanabilir:
SELECT target_catalog.target_schema.roll_dice()
Not
kullanarak UDF'leri LANGUAGE SQL
kullanarak tabloları veya skaler değerleri döndürebilirsiniz.
Python UDF'yi Unity Kataloğu'na kaydetme
Databricks Runtime 13.3 LTS ve üzerinde, skaler Python UDF'lerini Unity Kataloğu'na kaydetmek için SQL CREATE FUNCTION
deyimini kullanabilirsiniz.
Önemli
Unity Kataloğu için Python UDF'lerini yalnızca profesyonel ve sunucusuz SQL ambarları destekler.
Python UDF'leri doğrudan SQL işlevleri içinde Python'ın tam ifadesini sağlayacak şekilde tasarlanmıştır ve gelişmiş dönüştürmeler, veri maskeleme ve karma oluşturma gibi özelleştirilmiş işlemlere olanak sağlar.
Python UDF'leri güvenli, yalıtılmış bir ortamda yürütülür ve dosya sistemlerine veya iç hizmetlere erişimi yoktur.
Sunucusuz işlemde veya paylaşılan erişim modunda çalışan Python UDF'leri 80, 443 ve 53 numaralı bağlantı noktaları üzerinden TCP/UDP ağ trafiğine izin verir.
Bkz . Hangi UDF'ler en verimlidir?.
Not
Unity Kataloğu'nda Python UDF'leri için söz dizimi ve semantik, SparkSession'a kayıtlı Python UDF'lerinden farklıdır. Bkz . Kullanıcı tanımlı skaler işlevler - Python.
Unity Kataloğu için Python UDF'leri, aşağıdaki kod örneğinde olduğu gibi çift dolar işaretleri ()$$
ile ayarlanan deyimleri kullanır:
CREATE FUNCTION target_catalog.target_schema.greet(s STRING)
RETURNS STRING
LANGUAGE PYTHON
AS $$
return f"Hello, {s}"
$$
Aşağıdaki örnekte, adlı students
tablonun sütununda depolanan first_name
tüm adların selamlama deyimlerini döndürmek için bu işlevin kullanılması gösterilmektedir:
SELECT target_catalog.target_schema.greet(first_name)
FROM students;
Python UDF içinde istediğiniz sayıda Python işlevi tanımlayabilirsiniz, ancak skaler değer döndürmeniz gerekir.
Python işlevlerinin değerleri bağımsız olarak işlemesi NULL
ve tüm tür eşlemelerinin Azure Databricks SQL dil eşlemelerini izlemesi gerekir.
Azure Databricks tarafından eklenen standart Python kitaplıklarını içeri aktarabilirsiniz, ancak özel kitaplıklar veya dış bağımlılıklar içeremezsiniz.
Katalog veya şema belirtilmezse, Python UDF'leri geçerli etkin şemaya kaydedilir.
Aşağıdaki örnek bir kitaplığı içeri aktarır ve Python UDF içinde birden çok işlev kullanır:
CREATE FUNCTION roll_dice(num_dice INTEGER, num_sides INTEGER)
RETURNS INTEGER
LANGUAGE PYTHON
AS $$
import numpy as np
def roll_die(num_sides):
return np.random.randint(num_sides) + 1
def sum_dice(num_dice,num_sides):
return sum([roll_die(num_sides) for x in range(num_dice)])
return sum_dice(num_dice, num_sides)
$$
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin