루틴 소개
이 문서에서는 BigQuery에서 함수 또는 저장 프로시저를 만드는 데 사용하는 리소스 유형인 루틴을 선택하는 방법을 설명합니다.
지원되는 루틴
BigQuery는 다음 루틴을 지원합니다.
- 사용자 정의 함수 (UDF)
- 사용자 정의 집계 함수 (UDAF)
- 테이블 함수
- 원격 함수
- 저장 프로시져
루틴을 선택하는 방법
이 섹션에서는 루틴을 선택할 때 고려해야 할 요소를 설명하고 태스크별로 루틴을 비교합니다.
고려해야 할 요소
루틴을 선택하려면 각 루틴 유형의 섹션에 설명된 다음 요소를 고려하세요.
- 구현할 작업 유형입니다.
- 사용할 프로그래밍 언어입니다.
- 루틴에 구현할 지속성 유형입니다(임시 또는 영구).
- 루틴에 필요한 재사용 유형: 단일 또는 여러 쿼리에서.
- 성능 고려사항
- 외부 서비스 액세스
- 사용자와 루틴을 공유합니다.
할 일별 루틴 비교
다음 표에는 각 루틴 유형에 대해 실행할 수 있는 작업 유형이 나와 있습니다.
태스크 |
루틴 리소스 유형 |
---|---|
BigQuery에서 범용 작업을 실행하는 함수를 만듭니다. |
SQL 또는 JavaScript UDF SQL 또는 JavaScript UDAF |
BigQuery에서 범용 작업을 실행하고 Cloud 리소스 연결을 사용하여 외부 시스템과 통신하는 함수를 만듭니다. Google Cloud |
Python UDF |
데이터를 집계하는 함수를 만듭니다. |
UDAF |
매개변수를 사용하여 테이블을 만듭니다. |
테이블 함수 |
BigQuery에서 지원되지 않는 언어, 라이브러리 또는 서비스를 사용하는 함수를 만듭니다. 이러한 함수는 Cloud Run 함수 및 Cloud Run과 직접 통합됩니다. |
원격 함수 |
절차적 언어를 사용하여 단일 쿼리에서 여러 문을 멀티 문 쿼리로 실행합니다. 멀티 문 쿼리를 사용하여 다음을 수행할 수 있습니다.
BigQuery에서 Apache Spark의 저장 프로시저를 만들고 호출합니다. |
저장 프로시저 |
사용자 정의 함수(UDF)
UDF를 사용하면 SQL 표현식, JavaScript 코드 또는 Python 코드를 사용하여 함수를 만들 수 있습니다. UDF는 입력으로 구성된 열을 받아 입력을 기반으로 작업을 수행하고 작업의 결과를 값으로 반환합니다.
UDF를 영구 UDF 또는 임시 UDF로 정의할 수 있습니다. 영구 UDF는 여러 쿼리에서 재사용할 수 있지만 임시 UDF는 단일 쿼리 범위에만 있습니다.
열에 UDF를 적용한 후 열 값을 반환하는 커스텀 마스킹 루틴에서 사용할 UDF를 만들 수 있습니다. 커스텀 마스킹 루틴을 만든 후에는 데이터 정책 만들기에서 마스킹 규칙으로 사용할 수 있습니다.
UDF에 대한 자세한 내용은 다음 리소스를 참고하세요.
언어 기반 UDF
- SQL 기반 UDF는 UDF가 호출될 때 두 개 이상의 인수 유형과 일치할 수 있는 템플릿 UDF 매개변수를 지원합니다. SQL UDF는 스칼라 서브 쿼리의 값을 반환할 수도 있습니다.
- JavaScript 기반 UDF를 사용하면 SQL 쿼리에서 JavaScript로 작성된 코드를 호출할 수 있습니다.
- JavaScript UDF는 일반적으로 표준 SQL 쿼리에 비해 더 많은 슬롯 리소스를 사용하므로 작업 성능이 저하됩니다.
- 함수를 SQL로 표현할 수 있는 경우 코드를 표준 SQL 쿼리 작업으로 실행하는 것이 더 최적화된 경우가 많습니다.
- Python 기반 UDF는 BigQuery 관리 리소스에서 빌드되고 실행됩니다. 이러한 UDF를 사용하면 Python에서 함수를 구현하고 SQL 쿼리에서 사용할 수 있습니다.
- Cloud 리소스 연결 서비스 계정을 사용하여 Python UDF에서 Google Cloud 서비스 또는 외부 서비스에 액세스할 수 있습니다.
- Python 패키지 색인 (PyPI)에서 서드 파티 라이브러리를 설치할 수도 있습니다.
커뮤니티에서 제공한 UDF
내가 만든 UDF 외에도 커뮤니티에서 제공하는 UDF는 공개 데이터 세트 bigquery-public-data.persistent_udfs
및 오픈소스 bigquery-utils
GitHub 저장소에서 사용할 수 있습니다.
사용자 정의 집계 함수 (UDAF)
UDAF를 사용하면 SQL 또는 JavaScript 코드가 포함된 표현식을 사용하여 집계 함수를 만들 수 있습니다. UDAF는 입력으로 여러 열을 받아 한 번에 행 그룹을 계산한 다음 해당 계산 결과를 단일 값으로 반환합니다.
UDAF는 데이터를 변형하거나, 외부 시스템과 통신하거나, Google Cloud Observability 또는 유사한 애플리케이션에 로그를 전송할 수 없습니다.
자세한 내용은 다음 리소스를 참조하세요.
SQL UDAF
SQL UDAF는 일반적으로 그룹의 모든 행에서 함수 매개변수를 집계합니다.
하지만 NOT AGGREGATE
키워드를 사용하여 함수 매개변수를 비집계로 지정할 수 있습니다. 비집계 함수 매개변수는 그룹의 모든 행에 대해 상수 값이 있는 스칼라 함수 매개변수입니다. SQL UDAF에는 집계 및 비집계 매개변수가 모두 포함될 수 있습니다.
JavaScript UDAF
JavaScript UDAF는 JavaScript 라이브러리를 포함할 수 있습니다. JavaScript 함수 본문은 JavaScript 전역 변수 및 커스텀 함수와 같은 커스텀 JavaScript 코드를 포함할 수 있습니다.
JavaScript 기반 함수는 일반적으로 더 많은 리소스를 사용하므로 다음 성능 도움말을 참고하는 것이 좋습니다.
JavaScript UDAF에는 몇 가지 제약사항이 있습니다. 특정 유형의 인코딩만 허용되며 직렬화 및 역직렬화에 관한 요구사항이 있습니다.
UDF 및 UDAF 비교
UDAF 대신 UDF를 선택하는 것은 수행하려는 특정 작업에 따라 다릅니다.
- 개별 데이터 값에 대한 계산이나 변환을 실행하려면 UDF를 사용하세요.
- 데이터 값 그룹에 동일한 작업을 실행하려면 UDAF를 사용하세요.
예를 들어 숫자 열의 평균을 계산하려면 UDAF를 사용하세요. 문자열 열을 대문자로 변환하려면 UDF를 사용하세요.
UDF와 UDAF에는 다음과 같은 유사점이 있습니다.
- UDF 및 UDAF는 데이터를 변형하거나, 외부 시스템과 통신하거나, Google Cloud Observability 또는 유사한 애플리케이션에 로그를 전송할 수 없습니다. Cloud 리소스 연결을 사용하여 외부 서비스에 액세스할 수 있는 Python UDF는 예외입니다. 그러나 Python UDF는 VPC 서비스 제어 또는 고객 관리 암호화 키 (CMEK)를 지원하지 않습니다.
- UDAF에는 UDF와 동일한 제한사항과 몇 가지 추가 제한사항이 있습니다.
- UDF와 UDAF에는 동일한 할당량 및 한도가 적용됩니다.
UDF와 UDAF의 차이점은 다음과 같습니다.
속성 |
UDF |
UDAF |
---|---|---|
정의 |
사용자 정의 함수 (UDF)는 입력 열을 받아 입력에 대한 작업을 수행하고 작업의 결과를 값으로 반환합니다. |
사용자 정의 집계 함수 (UDAF)는 입력으로 여러 열을 받아 한 번에 행 그룹을 계산한 다음 해당 계산 결과를 단일 값으로 반환합니다. |
지원 언어 |
SQL, JavaScript, Python |
SQL 및 JavaScript |
지속성 |
|
|
인수 및 데이터 유형 |
UDF는 BigQuery 데이터 유형의 GoogleSQL을 준수하는 매개변수 값을 허용합니다. 일부 SQL 유형은 JavaScript 유형에 직접 매핑되지만 다른 유형에서는 그렇지 않습니다. 지원되는 JavaScript 유형을 참고하세요. SQL UDF의 경우 매개변수 값은 JavaScript UDF에만 쿼리 결과를 캐시할 수 있는지 여부에 관한 힌트를 BigQuery에 제공하는 결정론 지정자가 있습니다. |
SQL 및 JavaScript UDAF는 BigQuery용 GoogleSQL 데이터 유형을 준수하는 매개변수 값을 허용합니다. 함수 매개변수는 집계 또는 비집계일 수 있습니다. |
사용 |
UDF는 일반적으로 데이터 정리, 변환, 유효성 검사에 사용됩니다. |
UDAF는 일반적으로 평균, 합계, 개수와 같은 요약 통계를 계산하는 데 사용됩니다. |
테이블 함수
테이블 함수(테이블 값 함수(TVF)라고도 함)는 테이블을 반환하는 UDF입니다. 테이블을 사용할 수 있는 곳 어디에서나 테이블 함수를 사용할 수 있습니다. 테이블 함수는 뷰와 비슷하게 작동하지만 테이블 함수는 매개변수를 사용할 수 있습니다.
테이블 함수를 사용하여 다음을 수행할 수 있습니다.
- 여러 매개변수를 전달합니다.
- 테이블이 유효한 모든 컨텍스트에서 테이블 함수를 호출합니다.
- 테이블 함수의 출력을 다른 테이블과 조인합니다.
- 서브 쿼리에서 테이블 함수를 사용합니다.
테이블 함수에 관한 자세한 내용은 테이블 함수, 제한사항, 할당량 및 한도를 참고하세요.
원격 함수
원격 함수를 사용하면 SQL 및 JavaScript 이외의 언어로 함수를 구현하거나 BigQuery UDF에서 지원되지 않는 라이브러리 또는 서비스를 사용할 수 있습니다.
BigQuery 원격 함수는 지원되는 언어를 사용하여 Google SQL 함수를 Cloud Run 함수 및 Cloud Run과 통합한 후 Google SQL 쿼리에서 이러한 함수를 호출합니다.
다음 작업은 원격 함수로 할 수 있는 작업의 예입니다.
원격 함수를 만들려면 다음 단계를 따르세요.
- Cloud Run Functions 또는 Cloud Run에서 HTTP 엔드포인트를 만듭니다.
CLOUD_RESOURCE
연결 유형을 사용하여 BigQuery에서 원격 함수를 만듭니다.- BigQuery의 다른 UDF와 마찬가지로 쿼리에서 원격 함수를 사용합니다.
원격 함수에 관한 자세한 내용은 원격 함수, 제한사항, 할당량 및 한도를 참고하세요.
저장 프로시저
SQL 저장 프로시저는 다른 쿼리 또는 다른 저장 프로시저에서 호출할 수 있는 문 모음입니다. BigQuery 데이터 세트에 프로시져의 이름을 지정하고 저장합니다.
저장 프로시저는 변수 정의 및 제어 흐름 구현과 같은 작업을 수행할 수 있는 절차적 언어 문을 지원합니다. 절차적 언어 문에 대한 자세한 내용은 절차적 언어 참조를 참고하세요.
저장 프로시저는 다음을 실행할 수 있습니다.
- 입력 인수를 사용하고 값을 출력으로 반환합니다.
- 여러 사용자가 여러 데이터 세트에서 데이터에 액세스하거나 수정할 수 있습니다.
- 멀티 문 쿼리를 포함합니다.
일부 저장 프로시져는 BigQuery에 내장되어 있으므로 만들 필요가 없습니다. 이를 시스템 프로시져라고 하며, 시스템 프로시져 참조에서 자세히 알아볼 수 있습니다.
BigQuery의 Spark용 저장 프로시저도 지원됩니다. 이러한 절차에는 할당량 및 한도가 있습니다.
저장 프로시저에 대해 자세히 알아보려면 SQL 저장 프로시저를 참고하세요.