---
title: SQL 매크로
description: 공유 매크로 라이브러리로 SQL 표현식을 재사용하고 매크로가 삽입되는 시점을 이해합니다.
species: guide
---
# SQL 매크로

공유 매크로는 다른 SQL 함수처럼 호출합니다. Supernova는 쿼리에서 해당 이름을 참조할 때만 매크로 정의를 삽입하므로 관련 없는 쿼리는 바뀌지 않습니다.

```sql
select
  id,
  initcap(lower(property_company)) as company_name
from titan.hubspot.contacts
where not _deleted
```

## 공유 라이브러리

공유 매크로는 `src/queries/macros/`에 있습니다. 파일 이름이 호출할 이름입니다. 현재 `initcap` 매크로는 텍스트를 단어로 나누고 각 단어의 첫 글자를 대문자로, 나머지를 소문자로 바꾼 뒤 다시 합칩니다.

정의는 일반적인 SQL 방언 구문을 사용합니다.

```sql
create macro initcap(text) as
  list_reduce(
    list_transform(
      regexp_extract_all(text, '(\w+\W*)'),
      word -> upper(word[1]) || lower(word[2:])
    ),
    (left_value, right_value) -> left_value || right_value,
    ''
  );
```

## 이름 확인

매크로는 쿼리 실행 전에 감지합니다. `initcap(` 참조가 있으면 해당 세션에 정의를 불러옵니다. 매크로 이름은 레이크 테이블이 되지 않으며 정의에서 다른 조직에 접근할 수 없습니다.

호출자에게 매개변수와 반환값 계약이 필요하면 [타입 지정 함수](/docs/typesql/macros-and-functions)를 사용하세요. SQL 매크로는 기존의 타입 없는 도우미와 DuckDB 구문 호환성에 여전히 유용합니다.
