Определяемые пользователем функции в каталоге Unity

Внимание

Эта функция предоставляется в режиме общедоступной предварительной версии.

Azure Databricks предоставляет собственный синтаксис SQL для регистрации пользовательских функций в схемах, управляемых каталогом Unity. Определяемые пользователем Функции Python в каталоге Unity отличаются в область и поддержке пользовательских файлов PySpark область в записную книжку или SparkSession. См . раздел "Определяемые пользователем скалярные функции " Python".

Полный справочник по языку SQL см. в статье CREATE FUNCTION (SQL и Python).

Сведения о том, как каталог Unity управляет разрешениями для функций, см. в статье CREATE FUNCTION.

Требования

  • Databricks Runtime 13.3 LTS или более поздней версии.
  • Чтобы использовать код Python в определяемых пользователем файлах, зарегистрированных в каталоге Unity, необходимо использовать бессерверный или профессиональный хранилище SQL или кластер под управлением Databricks Runtime 13.3 LTS или более поздней версии.
  • Чтобы разрешить представления, созданные с помощью UDF, зарегистрированного в каталоге Unity, необходимо использовать бессерверное или pro SQL-хранилище.

Пользовательские функции SQL в каталоге Unity

При создании функции SQL с помощью вычислений, настроенных для каталога Unity, функция регистрируется в текущей активной схеме по умолчанию. В следующем примере показан синтаксис, который можно использовать для объявления целевого каталога и схемы для новой функции:

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;

Затем все пользователи с достаточными привилегиями в функции могут использовать функцию в вычислительных средах, настроенных для каталога Unity, как показано в следующем примере:

SELECT target_catalog.target_schema.roll_dice()

Примечание.

Вы можете использовать определяемые пользователем функции, используя для LANGUAGE SQL возврата таблиц или скалярных значений.

Регистрация UDF Python в каталоге Unity

В Databricks Runtime 13.3 LTS и более поздних версиях можно использовать инструкцию SQL CREATE FUNCTION для регистрации скалярных пользовательских файлов Python в каталоге Unity.

Внимание

Только хранилища pro и бессерверные хранилища SQL поддерживают определяемые пользователем Службы Python для каталога Unity.

Определяемые пользователем функции Python предназначены для обеспечения полной экспрессивности Python непосредственно в функциях SQL, что позволяет выполнять настраиваемые операции, такие как расширенные преобразования, маскирование данных и хэширование.

Определяемые пользователем Функции Python выполняются в защищенной изолированной среде и не имеют доступа к файловыми системам или внутренним службам.

Пользовательские функции Python, работающие на бессерверных вычислениях или в режиме общего доступа, разрешают сетевой трафик TCP/UDP через порты 80, 443 и 53.

Узнайте , какие определяемые пользователем функции являются наиболее эффективными?.

Примечание.

Синтаксис и семантика для определяемых пользователем файлов Python в каталоге Unity отличаются от определяемых пользователем Python пользователей, зарегистрированных в SparkSession. См . раздел "Определяемые пользователем скалярные функции " Python".

Инструкции, заданные двойными знаками доллара ($$), как показано в следующем примере кода, используются инструкции, определяемые пользователем Python для каталога Unity.

CREATE FUNCTION target_catalog.target_schema.greet(s STRING)
RETURNS STRING
LANGUAGE PYTHON
AS $$
  return f"Hello, {s}"
$$

В следующем примере показано использование этой функции для возврата инструкций приветствия для всех имен, хранящихся в first_name столбце таблицы с именем students:

SELECT target_catalog.target_schema.greet(first_name)
FROM students;

Вы можете определить любое количество функций Python в UDF Python, но должно возвращать скалярное значение.

Функции Python должны обрабатывать NULL значения независимо, и все сопоставления типов должны соответствовать сопоставлениям языка SQL Azure Databricks.

Вы можете импортировать стандартные библиотеки Python, включенные в Azure Databricks, но нельзя включать пользовательские библиотеки или внешние зависимости.

Если каталог или схема не указаны, определяемые пользователем Python, регистрируются в текущей активной схеме.

Следующий пример импортирует библиотеку и использует несколько функций в UDF Python:

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