---
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
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 構文との互換性を保つ用途に適しています。
