함수

함수 (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

추가로, coalesceifnull 함수는 당분간 함수 체이닝과 함께 사용할 수 없어요:

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

더 알아보기 (Learn more)