매크로 공유하기

매크로 공유하기 (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에 대한 자세한 내용은 여러 파일 읽기 문서에서 다룹니다.