MetabaseでSQLを書くときに最初に覚えたい2つの構文 {{}} と [[ ]]
普通のSQLは書けるけど、Metabase独自の構文がよく分からない…。
私自身、業務でMetabaseを使い始めた頃は、
{{}}や[[ ]]の意味が分からず何度もハマりました。本記事では、MetabaseでSQLを書くならまず覚えておきたい2つの構文について紹介します。
Metabaseとは
Metabaseは、データベースの情報を可視化・分析するためのBIツールです。
主な機能として、
- SQLを書いてデータを取得できる
- SQLを書かなくてもGUIで集計できる
- ダッシュボードの作成
- Slackやメールへの定期通知
などがあります。
今回は、その中でもSQLを書く際に覚えておきたい構文を紹介します。
MetabaseのSQLは普通のSQLと少し違う
Metabaseでは通常のSQLに加えて、ユーザーが画面から条件を指定できるようにするための独自構文があります。
例えば次のSQLです。
普通のMySQLではこのSQLは実行できません。
{{ }} や [[ ]] は、MetabaseがSQLを実行する前に置き換えるための構文です。
{{ }} は変数
最もよく使う構文です。
例えば
SELECT
*
FROM
ORDERS
WHERE
USER_ID = {{user_id}}
と書くと、画面上には入力欄が表示されます。
値を入力すると、
のようなSQLへ変換されて実行されます。
変数には型がある
変数には型を設定できます。
例えば
- テキスト
- 数値
- 日付
- フィールドフィルター
などがあります。
用途によって適切な型を選択します。
[[ ]] は Optional Clause
次に覚えたいのが Optional Clause です。
例えば
SELECT
*
FROM
ORDERS
WHERE
1 = 1
[[AND USER_ID = {{user_id}}]]
値を入力しなかった場合は
WHERE
1 = 1
だけになります。
一方、値を入力すると
WHERE
1 = 1
AND USER_ID = '1'
へ変換されます。
Metabaseでは、クエリプレビューを見ることで、実際にどのSQLが実行されるか確認できます。
これを知っているだけでも、デバッグがかなり楽になります。
WHERE 1 = 1 がよく使われる理由
WHERE 1 = 1 は常に真になる条件です。
Optional Clauseでは条件が追加されたり削除されたりするため、
WHERE
1 = 1
[[AND {{platform}}]]
[[AND {{lang_code}}]]
[[AND {{start_date}}]]
のように書くことで、WHERE の有無を気にせず条件を追加できます。
Metabaseのネイティブクエリでは、Optional Clauseを扱いやすくするために、この書き方がよく利用されます。
この書き方は、MetabaseのネイティブクエリでOptional Clauseを扱いやすくするためのテクニックです。一般的なアプリケーション開発では、SQLを文字列連結で組み立てるのではなく、プレースホルダーやプリペアドステートメントを利用してSQLを組み立てるのが基本です。
まとめ
今回は、MetabaseでSQLを書くなら最初に覚えておきたい2つの構文を紹介しました。
-
{{ }}:変数 -
[[ ]]:Optional Clause
この2つを理解するだけで、MetabaseのSQLはかなり書きやすくなります。
次回予告
次回は、Metabaseで最も便利だと感じた Field Filter を紹介します。
- Text変数との違い
- Field Filterの設定方法
- ドロップダウンや検索ボックス
- 実際に生成されるSQL
- 実務での使いどころ
今回よりも実践的な内容になる予定です。




