다음을 통해 공유


Unity 카탈로그의 UDF(사용자 정의 함수)

Important

이 기능은 공개 미리 보기 상태입니다.

Azure Databricks는 Unity 카탈로그가 관리하는 스키마에 사용자 지정 함수를 등록하는 SQL 네이티브 구문을 제공합니다. Unity 카탈로그에 함수로 등록된 Python UDF는 범위가 다르며 Notebook 또는 SparkSession으로 범위가 지정된 PySpark UDF의 지원도 다릅니다. 사용자 정의 스칼라 함수 - Python을 참조하세요.

전체 SQL 언어 참조는 CREATE FUNCTION(SQL 및 Python)을 참조하세요.

Unity 카탈로그가 함수에 대한 사용 권한을 관리하는 방법에 대한 자세한 내용은 CREATE FUNCTION을 참조하세요.

요구 사항

  • Databricks Runtime 13.3 LTS 이상.
  • Unity 카탈로그에 등록된 UDF에서 Python 코드를 사용하려면 서버리스 또는 pro SQL 웨어하우스 또는 Databricks Runtime 13.3 LTS 이상을 실행하는 클러스터를 사용해야 합니다.
  • Unity 카탈로그에 등록된 UDF를 사용하여 만든 보기를 확인하려면 서버리스 또는 프로 SQL 웨어하우스를 사용해야 합니다.

Unity 카탈로그의 사용자 지정 SQL 함수

Unity 카탈로그에 대해 구성된 컴퓨팅을 사용하여 SQL 함수를 만들 때 함수는 기본적으로 현재 활성 스키마에 등록됩니다. 다음 예제에서는 새 함수에 대한 대상 카탈로그 및 스키마를 선언하는 데 사용할 수 있는 구문을 보여 줍니다.

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

참고 항목

UDF를 사용하여 LANGUAGE SQL 테이블 또는 스칼라 값을 반환할 수 있습니다.

Unity 카탈로그에 Python UDF 등록

Databricks Runtime 13.3 LTS 이상에서는 SQL CREATE FUNCTION 문을 사용하여 스칼라 Python UDF를 Unity 카탈로그에 등록할 수 있습니다.

Important

Pro 및 서버리스 SQL 웨어하우스만 Unity 카탈로그용 Python UDF를 지원합니다.

Python UDF는 SQL 함수 내에서 직접 Python의 전체 표현을 제공하도록 설계되어 고급 변환, 데이터 마스킹 및 해시와 같은 사용자 지정 작업을 수행할 수 있습니다.

Python UDF는 안전하고 격리된 환경에서 실행되며 파일 시스템 또는 내부 서비스에 액세스할 수 없습니다.

서버리스 컴퓨팅 또는 공유 액세스 모드에서 실행되는 Python UDF는 포트 80, 443 및 53을 통한 TCP/UDP 네트워크 트래픽을 허용합니다.

가장 효율적인 UDF를 확인하세요.

참고 항목

Unity 카탈로그의 Python UDF에 대한 구문 및 의미 체계는 SparkSession에 등록된 Python UDF와 다릅니다. 사용자 정의 스칼라 함수 - Python을 참조하세요.

다음 코드 예제와 같이 Unity 카탈로그용 Python UDF 사용 문은 이중 달러 기호($$)로 설정됩니다.

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

다음 예제에서는 이 함수를 사용하여 테이블 students열에 저장된 모든 이름에 first_name 대한 인사말 문을 반환하는 방법을 보여 줍니다.

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

Python UDF 내에서 원하는 수의 Python 함수를 정의할 수 있지만 스칼라 값을 반환해야 합니다.

Python 함수는 값을 독립적으로 처리 NULL 해야 하며 모든 형식 매핑은 Azure Databricks SQL 언어 매핑을 따라야 합니다.

Azure Databricks에 포함된 표준 Python 라이브러리를 가져올 수 있지만 사용자 지정 라이브러리 또는 외부 종속성은 포함할 수 없습니다.

카탈로그 또는 스키마를 지정하지 않으면 Python UDF가 현재 활성 스키마에 등록됩니다.

다음 예제에서는 라이브러리를 가져오고 Python UDF 내에서 여러 함수를 사용합니다.

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