BigQueryのSQLコードが何をしているか、初学者向けに分かりやすく解説します。
このSQLクエリは、**「ある特定のデータ保管場所から、指定した2つの条件に合うデータを絞り込み、日付順に並べ替えて、最大1000件まで表示する」**という命令です。
SQLは、大きく分けて「何を取り出すか(SELECT
)」「どこから取り出すか(FROM
)」「どんな条件で絞り込むか(WHERE
)」「どの順番に並べるか(ORDER BY
)」といった部分で構成されています。
SELECT
句:表示したい列を選ぶSELECT
msg_end_no,
subject,
end_date,
type_master,
type,
item,
total_score,
ここでは、データの中から表示したい列(カラム)を指定しています。msg_end_no
やsubject
など、7つの列のデータを表示するように命令しています。
FROM
句:データの場所を指定するFROM
`l-aaaaa.bbbbb.ccccccc`
FROM
は、どのテーブル(データの保管場所)からデータを取り出すかを指定します。ここでは、l-aaaaa.bbbbb.ccccccc
という名前のテーブルが対象です。
WHERE
句:表示するデータを絞り込むWHERE
subject = 'c816c3c0-a192-11ef-92bb-xxxxxx'
AND
item = 'キッチン'
WHERE
は、表示するデータに条件をつけ、絞り込むための部分です。
subject
列が 'c816c3c0-a192-11ef-92bb-xxxxxx'
であるitem
列が 'キッチン'
であるAND
で繋がれているので、この2つの条件を両方とも満たすデータだけが選ばれます。表示されたデータを見ると、item
がすべて「キッチン」になっているのが分かりますね。
ORDER BY
句:データを並べ替えるORDER BY end_date
ORDER BY
は、取り出したデータを指定した列を基準に並べ替える命令です。ここではend_date
(終了日)を指定しているので、日付が古い順にデータが並べ替えられます。
LIMIT
句:表示する件数を制限するLIMIT
1000
LIMIT
は、表示するデータの最大件数を指定します。条件に合うデータがたとえ1万件あっても、最初の1000件までしか表示しません。
このSQLを日本語に翻訳すると、次のようになります。
「l-aaaaa.bbbbb.ccccccc
というデータ保管場所から、
① subject
が'c816c3c0-...'で、かつ item
が'キッチン'のデータを探して、
② end_date
(終了日)が古い順に並べ替えて、
③ 最初の1000件を、指定した7つの列(msg_end_no
やsubject
など)で表示してください。」
SQLは、このようにデータベースに「何が欲しいか」を伝えるための言語です。一つ一つの命令の意味を理解すると、様々なデータを自由に取り出せるようになりますよ。
LIMIT
句の重要性LIMIT
句は、クエリが返す結果の行数を制限する機能です。BigQueryは検索したデータ量に応じて課金されるため、このLIMIT
句の利用は非常に重要です。
BigQueryでLIMIT
を付けずに巨大なテーブルを検索すると、意図せず大量のデータを処理してしまい、数万円、場合によっては100万円といった高額な料金が瞬時に発生する危険性があります。
予期せぬ高額請求を避けるため、クエリを試す段階ではLIMIT
句を必ず付けるようにしましょう。
クエリの動作確認やデータの構造をざっと見たい時に、全データを取得する必要はありません。LIMIT 10
のように少数の行に制限することで、素早く結果を確認でき、開発効率が上がります。
LIMIT
句 + OFFSET
句でページ送り機能を実装OFFSET
句は、結果の先頭から指定した行数をスキップする機能です。LIMIT
句と組み合わせることで、Webサイトなどで見られる**「ページネーション(ページ送り機能)」**を実装できます。
例えば、1ページあたり10件のデータを表示する場合、以下のように指定します。
LIMIT 10 OFFSET 0
→ 最初の10件を表示 (0件スキップ)LIMIT 10 OFFSET 10
→ 次の10件を表示 (最初の10件をスキップ)LIMIT 10 OFFSET 20
→ さらに次の10件を表示 (最初の20件をスキップ)このようにOFFSET
の値を変えることで、データを少しずつ順番に取得できます。
これにより、膨大なデータの中から、コストを抑えつつ効率的に目的の情報を探していくことができるのです。