함수
함수 (Functions)
DuckDB의 함수는 점(dot) 연산자를 통한 함수 체이닝을 지원해요. 덕분에 fn(arg1, arg2, ...) 호출을 arg1.fn(arg2, ...)처럼 다시 쓸 수 있답니다. 함께 살펴볼까요?
출처: 문서
본문
함수 구문 (Function Syntax)
점 연산자를 통한 함수 체이닝 (Function Chaining via the Dot Operator)
DuckDB는 함수 체이닝을 위한 점 구문을 지원해요. 이는 함수 호출 fn(arg1, arg2, arg3, ...)을 arg1.fn(arg2, arg3, ...)으로 다시 쓸 수 있게 해줘요. 예를 들어 [replace 함수]({% link docs/current/sql/functions/text.md %}#replacestring-source-target)의 다음 사용을 보세요:
SELECT replace(goose_name, 'goose', 'duck') AS duck_name
FROM unnest(['African goose', 'Faroese goose', 'Hungarian goose', 'Pomeranian goose']) breed(goose_name);
이것은 다음과 같이 다시 쓸 수 있어요:
SELECT goose_name.replace('goose', 'duck') AS duck_name
FROM unnest(['African goose', 'Faroese goose', 'Hungarian goose', 'Pomeranian goose']) breed(goose_name);
리터럴과 배열과 함께 사용 (Using with Literals and Arrays)
리터럴과 그 뒤의 배열 접근 연산에 함수 체이닝을 적용하려면, 인자를 괄호로 감싸야 해요, 예를 들어:
SELECT ('hello world').replace(' ', '_');
SELECT (2).sqrt();
SELECT (m[1]).map_entries()
FROM (VALUES ([MAP {'hello': 42}, MAP {'world': 42}])) t(m);
이 괄호가 없으면 DuckDB는 함수 호출에 대해 Parser Error를 반환해요:
Parser Error:
syntax error at or near "("
제한 사항 (Limitations)
점 연산자를 통한 함수 체이닝은 스칼라 함수로 제한되고 테이블 함수에서는 지원되지 않아요.
예를 들어 다음 호출은 Parser Error를 반환해요:
SELECT * FROM ('my_file.parquet').read_parquet(); -- does not work
추가로, coalesce와 ifnull 함수는 당분간 함수 체이닝과 함께 사용할 수 없어요:
SELECT (2).coalesce(0); -- does not work
SELECT (2).ifnull(0); -- does not work
쿼리 함수 (Query Functions)
duckdb_functions() 테이블 함수는 현재 시스템에 내장된 함수 목록을 보여줘요.
SELECT DISTINCT ON(function_name)
function_name,
function_type,
return_type,
parameters,
parameter_types,
description
FROM duckdb_functions()
WHERE function_type = 'scalar'
AND function_name LIKE 'b%'
ORDER BY function_name;
| function_name | function_type | return_type | parameters | parameter_types | description |
|---|---|---|---|---|---|
| bar | scalar | VARCHAR | [x, min, max, width] | [DOUBLE, DOUBLE, DOUBLE, DOUBLE] | Draws a band whose width is proportional to (x - min) and equal to width characters when x = max. width defaults to 80 |
| base64 | scalar | VARCHAR | [blob] | [BLOB] | Convert a blob to a base64 encoded string |
| bin | scalar | VARCHAR | [value] | [VARCHAR] | Converts the value to binary representation |
| bit_count | scalar | TINYINT | [x] | [TINYINT] | Returns the number of bits that are set |
| bit_length | scalar | BIGINT | [col0] | [VARCHAR] | Number of bits in a string |
| bit_position | scalar | INTEGER | [substring, bitstring] | [BIT, BIT] | Returns first starting index of the specified substring within bits, or zero if it is not present. The first (leftmost) bit is indexed 1 |
| bitstring | scalar | BIT | [bitstring, length] | [VARCHAR, INTEGER] | Pads the bitstring until the specified length |