Python UDF를 사용하면 사용자 지정 로직의 추상화 계층을 구축하여 query 구성을 단순화할 수 있습니다. 하지만 대규모 모델을 실행하거나 테이블의 행 전체에서 효율적으로 패턴을 감지하는 등 복잡한 로직을 적용하고 싶다면 어떻게 해야 할까요?
더 강력한 맞춤형 query 로직을 지원하기 위해 세션 범위 Python UDTF(사용자 정의 테이블 함수) 를 소개해 드렸습니다. UDTF를 사용하면 전체 테이블에 대해 강력하고 상태 저장(stateful) Python 로직을 실행할 수 있어, 순수 SQL만으로는 해결하기 어려운 문제를 쉽게 해결할 수 있습니다.
모든 데이터 세트를 유연하게 처리
선언적 TABLE() 키워드를 사용하면 모든 테이블, 뷰 또는 동적 하위 쿼리를 UDTF에 직접 파이프할 수 있습니다. 이를 통해 함수는 데이터의 모든 슬라이스에 대해 강력하고 재사용 가능한 빌딩 블록이 됩니다. Python 함수 내에서 직접 독립적인 함수 호출로 처리할 행의 하위 집합으로 입력 테이블을 분할하기 위해 PARTITION BY, ORDER BY, WITH SINGLE PARTITION 을 사용할 수도 있습니다.
파티션당 한 번만 과중한 초기화 실행
UDTF를 사용하면 대규모 ML 모델을 로드하거나 큰 참조 파일을 로드하는 등 비용이 많이 드는 설정 코드를 모든 단일 행이 아닌 각 데이터 파티션에 대해 한 번만 실행할 수 있습니다.
행 전반에 걸쳐 컨텍스트 유지
UDTF는 파티션 내에서 한 행에서 다음 행으로 상태를 유지할 수 있습니다. 이 고유한 기능을 통해 시계열 패턴 감지 및 복잡한 실행 계산과 같은 고급 분석이 가능합니다.
더 좋은 점은 UDTF가 Unity Catalog(UC)에 정의되면 적절한 액세스 권한을 가진 모든 사람이 이러한 함수에 액세스하고 검색하고 실행할 수 있다는 것입니다. 요컨대, 한 번만 작성하면 어디서든 실행할 수 있습니다.
Databricks Runtime 17.3 LTS, Databricks SQL 및 Serverless Notebooks and Jobs와 함께 공개 미리 보기로 제공되는 UC Python UDTF를 발표하게 되어 기쁩니다.
이 블로그에서는 UC Python UDTF의 몇 가지 일반적인 사용 사례를 예시와 함께 살펴보고, 데이터 파이프라인에서 이를 활용하는 방법을 설명합니다.
하지만 먼저, 왜 UC와 함께 UDTF를 사용해야 할까요?
순수 Python으로 한 번 구현하면 세션과 Workspace 어디에서든 호출할 수 있습니다.
표준 Python 클래스에 로직을 작성하고 SQL Warehouse(Databricks SQL Pro 및 서버리스 사용), 표준 및 전용 UC 클러스터링, Lakeflow 선언적 파이프라인에서 Python UDTF를 호출하세요.
시스템 테이블 또는 Catalog Explorer를 사용하여 탐색
Python UDTF에 대한 권한 부여 및 취소
일반적인 데이터 엔지니어링 문제로 시작해 보겠습니다. 바로 IP 주소를 네트워크 CIDR 블록 목록과 일치시키는 것입니다(예: 내부 네트워크의 트래픽 식별). 이 작업은 표준 SQL에서는 까다롭습니다. CIDR 로직과 패키지를 위한 기본 내장 함수가 없기 때문입니다.
UC Python UDTF는 이러한 마찰을 제거합니다. Python의 풍부한 라이브러리와 알고리즘을 SQL로 직접 가져올 수 있습니다. 다음을 수행하는 함수를 빌드합니다.
IPv4 및 IPv6 주소를 모두 포함하는 몇 가지 샘플 데이터로 시작합니다.
다음으로 UDTF를 정의하고 등록합니다. Python 클래스 구조를 확인하세요.
이제 ip_cidr_matcher 가 Unity Catalog에 등록되었으므로 TABLE() 구문을 사용하여 SQL에서 직접 호출할 수 있습니다. 일반 테이블을 쿼리하는 것만큼 간단합니다.
출력은 다음과 같습니다.
| log_id | ip_address | 네트워크 | ip_version |
|---|---|---|---|
| log1 | 192.168.1.100 | 192.168.0.0/16 | 4 |
| log2 | 10.0.0.5 | 10.0.0.0/8 | 4 |
| log3 | 172.16.0.10 | 172.16.0.0/12 | 4 |
| log4 | 8.8.8.8 | null | 4 |
| log5 | 2001:db8::1 | 2001:db8::/32 | 6 |
| log6 | 2001:db8:85a3::8a2e:370:7334 | 2001:db8::/32 | 6 |
| log7 | fe80::1 | fe80::/10 | 6 |
| log8 | ::1 | ::1/128 | 6 |
| log9 | 2001:db8:1234:5678::1 | 2001:db8::/32 | 6 |
이 예제에서는 Databricks 비전 모델 서빙 Endpoint를 사용하여 배치 이미지 캡셔닝을 위한 UC Python UDTF의 설정 및 사용법을 단계별로 살펴봅니다. 먼저 Wikimedia Commons의 공개 이미지 URL이 포함된 테이블을 만듭니다.
이 테이블에는 자연 산책로, 개미 매크로 사진, 고양이, 은하계의 4가지 샘플 이미지가 포함되어 있습니다.
그런 다음 이미지 캡션을 생성하기 위해 UC Python UDTF를 만듭니다.
<workspace-url> 을 실제 Databricks workspace URL(예: https://your-workspace.cloud.databricks.com)로 바꾸세요.
배치 이미지 캡션 UDTF를 사용하려면 샘플 이미지 테이블로 호출하기만 하면 됩니다. your_secret_scope 및 api_token 을 Databricks API 토큰의 실제 secret scope 및 키 이름으로 바꾸세요.
출력은 다음과 같습니다.
| 캡션 |
| 푸른 하늘 아래 생생한 습지 풀 사이를 가로지르는 나무 판자 산책로 |
| 질감이 있는 표면에 서 있는 검은 개미의 상세한 매크로 사진 |
| 흰 벽을 배경으로 흰 선반 위에 편안하게 누워 있는 태비 고양이 |
| 우주의 검은 공허를 배경으로 밝은 중심 핵과 길게 뻗은 청백색 나선팔을 가진 멋진 나선 은하. |
카테고리별로 이미지 캡션을 생성할 수도 있습니다.
출력은 다음과 같습니다.
| 캡션 |
| 질감이 있는 표면에 서 있는 검은 개미의 상세한 매크로 사진 |
| 검은 우주를 배경으로 밝은 중심부와 푸른빛을 띤 채 넓게 뻗은 나선팔을 가진 멋진 나선 은하. |
| 흰색 벽을 배경으로 흰색 선반 위에 편안하게 누워 있는 태비 고양이 |
| 푸른 하늘 아래 무성한 습지 풀을 가로지르는 나무 보드워크 |
저희는 다음과 같이 더욱 강력하고 성능이 뛰어난 기능으로 Python UDTF를 확장하기 위해 적극적으로 노력하고 있습니다.
(이 글은 AI의 도움을 받아 번역되었습니다. 원문이 궁금하시다면 여기를 클릭해 주세요)
