HOW TO TD(User Engagement)Treasure Data User Engagement

読みやすいSQLコードの書き方

ホーム » 読みやすいSQLコードの書き方

データマネジメントチームの藤井 温子です。
この記事では、SQLを書く際に知っておくと便利な「後から読み返しやすいインデントの使い方」についてまとめています。

読みやすいコードとは

SQLのクエリは、後から編集したりチームメンバーに共有して読んでもらったり、ということがよくあると思います。後から読み返しやすいコードを意識して書くと、自分も他の人も理解しやすく、メンテナンスもしやすくなります。

コードを読みやすくする上で一番重要なのは、「階層構造や句のカタマリがぱっと見て分かりやすいか」です。具体的にどのように書いていけばよいか、1つずつ見ていきましょう。

以下が、弊社のデータマネジメントチームで推奨されているコーディングスタイルの例です。

WITH campaign_ids AS (
 SELECT
   id
   , SUM(amount) AS total
 FROM
   database02.table02
 GROUP BY
   id
 HAVING
   SUM(amount) >= 10000
)
 
SELECT
 t1.column
 , t2.total
FROM
 database01.table01 AS t1
   INNER JOIN
     campaign_ids AS t2
       ON
         t1.id = t2.id
WHERE
 t1.column_01 LIKE 'xxx%'

書くときのポイント

  1. キーワード(予約語)は大文字で
  2. 句(例:SELECT, FROM, WHERE, GROUP BYなど)や演算子(例:LIKE, AND, OR)、関数(例:COUNT, SUM, CASTなど)は大文字で書くことで、キーワードとキーワード以外の単語と見分けがつきやすくなります

  3. リインデントで階層構造を作る
  4. SELECT, FROM, WHEREなど、文の骨組みとなるような句の後は改行とインデントを下げることによって階層構造を見やすくします。
    また、JOIN句は、FROM句よりもインデントを下げて記載することで、FROM句の中に含まれていることが分かりやすくなります。

  5. 要素を複数並べる場合は改行して同じインデントに
  6. カラム名やWHERE句の条件等が複数並ぶ場合は、改行して同じインデントに複数並べると、並列の項目がいくつあるのかが分かりやすいです。
    また、カラム名の場合は改行後の先頭にカンマ+半角スペースを付けるとより見やすくなります。

  7. サブクエリの代わりにWITH句で書く
  8. サブクエリを使うとクエリの構造が複雑に見えてしまい、可読性が下がってしまいます。そこで、WITH句を使ってサブクエリで作成するテンポラリなテーブルをSELECT文の前に出すことで、読みやすく、理解しやすくなります。

    WITH句を使ってAVGなどの集計値を事前に作成しておいたり、後でJOINするためのテーブルを作成しておいたりすると、読み手側からも分かりやすく、他のクエリに転用する際もやりやすいため、大変便利です。

CDPは自社メンバーや外部パートナーなど複数の方で運用していくものなので、可読性の高いコードを心がけましょう。

藤井 温子

Data Managementチーム

新卒でデジタルマーケティング支援企業に入社し、UXデザインコンサルタントとして大手保険会社、食品メーカー、機器メーカー等に向けたユーザーリサーチ・WebサイトのUX・UI改善等のプロジェクトを担当。その後、同社のデータ分析系SaaSのカスタマーサクセスの立ち上げメンバーとして、トレーニングプログラムの立ち上げやお客様の活用支援に従事。よりテクニカル領域に関わりたいと思い、2020年にトレジャーデータに参画。データマネジメントチームにて、Treasure Data CDPの構築や施策のデータ集計等、データ基盤の設計・開発・運用支援に従事。

得意領域 : データ活用・分析支援、ウェブ解析、ユーザーリサーチ(定性調査)、コンサルティング

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

Back to top button