매크로 공유하기
매크로 공유하기 (Sharing Macros)
자주 쓰는 로직을 매크로로 만들어 두면 재사용이 편하죠. 그런데 그 매크로를 다른 사람이나 다른 환경에서도 쓸 수 있도록 공유하고 싶다면 어떻게 해야 할까요? DuckDB의 매크로 메커니즘을 HTTPS 엔드포인트에 올리면 누구나 쓸 수 있어요. 이번 페이지에서 그 방법을 살펴볼게요.
출처: 공식문서
스칼라 매크로 공유 (Sharing a Scalar Macro)
먼저, 반올림 없이 0 이상의 정수를 천·백만·십억 단위로 짧게 표시해 주는(pretty-print) 스칼라 매크로를 정의해 볼게요.
duckdb pretty_print_integer_macro.duckdb
CREATE MACRO pretty_print_integer(n) AS
CASE
WHEN n >= 1_000_000_000 THEN printf('%dB', n // 1_000_000_000)
WHEN n >= 1_000_000 THEN printf('%dM', n // 1_000_000)
WHEN n >= 1_000 THEN printf('%dk', n // 1_000)
ELSE printf('%d', n)
END;
SELECT pretty_print_integer(25_500_000) AS x;
┌─────────┐
│ x │
│ varchar │
├─────────┤
│ 25M │
└─────────┘
예상대로 매크로는 데이터베이스에 영구 저장됩니다. 그런데 이 사실은 다른 의미도 있어요. 바로 이 매크로를 HTTPS 엔드포인트에 호스팅해서 누구와도 공유할 수 있다는 것이죠! 우리는 이 매크로를 blobs.duckdb.org에 게시해 두었습니다.
DuckDB에서 직접 시도해 볼게요.
duckdb
httpfs 확장이 설치되어 있는지 먼저 확인합니다.
INSTALL httpfs;
이제 원격 엔드포인트에 attach하고 매크로를 사용할 수 있어요.
ATTACH 'https://blobs.duckdb.org/data/pretty_print_integer_macro.duckdb'
AS pretty_print_macro_db;
SELECT pretty_print_macro_db.pretty_print_integer(42_123) AS x;
┌─────────┐
│ x │
│ varchar │
├─────────┤
│ 42k │
└─────────┘
이렇게 원격 DuckDB 파일을 ATTACH로 붙이면, 그 안에 저장된 매크로를 현재 세션에서 바로 호출할 수 있어요.
테이블 매크로 공유 (Sharing a Table Macro)
테이블 매크로도 공유할 수 있습니다. 예를 들어 우리는 checksum 테이블 매크로(duckdb-tricks part 2 블로그 포스트에서 만든 것)를 다음과 같이 만들었어요.
duckdb compute_table_checksum.duckdb
CREATE MACRO checksum(table_name) AS TABLE
SELECT bit_xor(md5_number(COLUMNS(*)::VARCHAR))
FROM query_table(table_name);
이 매크로를 쓰려면 httpfs 확장이 설치되어 있어야 합니다.
INSTALL httpfs;
원격 엔드포인트에 attach한 뒤 매크로를 사용해 볼게요.
ATTACH 'https://blobs.duckdb.org/data/compute_table_checksum.duckdb'
AS compute_table_checksum_db;
CREATE TABLE stations AS
FROM 'https://blobs.duckdb.org/stations.parquet';
.mode line
FROM compute_table_checksum_db.checksum('stations');
id = -132780776949939723506211681506129908318
code = 126327004005066229305810236187733612209
uic = -145623335062491121476006068124745817380
name_short = -114540917565721687000878144381189869683
name_medium = -568264780518431562127359918655305384
name_long = 126079956280724674884063510870679874110
slug = -53458800462031706622213217090663245511
country = 143068442936912051858689770843609587944
type = 5665662315470785456147400604088879751
geo_lat = 160608116135251821259126521573759502306
geo_lng = -138297281072655463682926723171691547732
이 예시처럼 열 단위로 체크섬 값을 계산해 주는 테이블 매크로도, 원격에 올려서 임의의 테이블에 적용할 수 있어요.
더 알아보기 (Learn more)
- 매크로 정의 문법 전체는 CREATE MACRO 문서를 참고하세요.
- 원격 파일 attach에 대한 자세한 내용은 여러 파일 읽기 문서에서 다룹니다.