Googleが提供するDWH(データウェアハウス)であるBigQueryでは、SQL言語を用いてクエリを実行します。
SQL言語はシンプルな構文が特徴で、なおかつ関連する書籍やWebサイト上の情報が多いことから、非エンジニアの方でも扱いやすいメリットがあります。とはいえ、初めてBigQueryを利用するうえで、「スムーズにSQLを扱えるのか不安」といった悩みを抱く方も多いでしょう。
そこで本記事では、BigQueryで使える4種類の基本構文について、具体的な記載方法や活用方法を解説します。BigQueryで実行できるSQLと実行できないSQLも紹介していますので、参考までにご覧ください。
BigQueryで実行できるSQLと実行できないSQL
BigQueryのようなDWHを利用する際は、あらかじめ対応可能な言語を確認することが大切です。ここでは、BigQueryでサポートされているSQLの種類と、非対応の構文について解説します。
BigQueryでサポートされているSQLの種類
BigQueryでサポートされているSQL言語は次の通りです。
種別 | 特徴 | 主な構文 |
DQL(データクエリ言語) | BigQueryで分析するための主要SQL構文 |
|
DDL(データ定義言語) | テーブルをはじめとするデータベースオブジェクトを作成・変更するための構文 |
|
DML(データ操作言語) | テーブルのデータを作成・変更するための構文 |
|
DCL(データ制御言語) | アクセス権などのシステムリソースを制御するための構文 |
|
TCL(トランザクション制御言語) | データ変更時のトランザクション管理にかかわる構文 |
|
その他 | データエクスポートといった追加機能が含まれる |
|
BigQueryでサポートされていないSQLの種類
サービス開始当初は利用できるSQL言語の種類が少なかったBigQueryですが、繰り返しアップデートが行われ、いまでは幅広いSQL言語がサポートされています。2024年1月時点で、基本的なSQL言語には、ほぼすべて対応しています。
そのため、BigQueryは、「クエリを実行したいが特定の構文に対応していない」といったリスクが低いといえるでしょう。
覚えておきたいBigQueryで使えるSQLの基本構文4選
BigQueryで使用する機会が多いSQLの構文は次の4つです。
- SELECT文:特定の情報を取得するための命令
- INSERT文:任意のデータを追加するための命令
- UPDATE文:既存データを更新するための命令
- DELETE文:既存データを削除するための命令
それぞれの文の後には、「句」と呼ばれる構成要素が紐付くケースがあります。例えば、SELECT文の場合、検索条件を指定するWHERE句や、取得する行を選択できるFROM句が代表的です。
そのため、上記4つの構文を覚えた後は、細かい句を把握すると良いでしょう。文と句を柔軟に組み合わせると、要望に応じて細やかにクエリを実行できます。
BigQueryにおけるSQLの書き方(1)テーブルの作成
ここからは、先ほど紹介した4つの基本構文の使い方を解説します。そのためにもまずは、サンプルとなる「顧客リスト」を作成し、それをもとにテスト環境でクエリを実行してみましょう。
最初に次のような形でテーブルを作成してください。
A商事 | 山田 | 男 | 営業 | 1,560 |
B商店 | 田中 | 男 | マーケティング | 310 |
C商会 | 中村 | 女 | 情報システム | 150 |
Dグループ | 佐々木 | 女 | 総務 | 27,800 |
Eシステム | 大久保 | 女 | 営業 | 870 |
F証券 | 佐藤 | 男 | 情報システム | 2,900 |
テーブル名は「Customer_List」と仮定します。項目は左から、「企業名(company)・担当者名(name)・性別(gender)・担当部署(division)・従業員数(employee)」の順に並んでいます。
BigQueryにおけるSQLの書き方(2)SELECT文
作成したテーブルをもとに、SELECT文を使ってクエリを実行してみましょう。
SELECT文とは、データベースから特定の情報を取得するための構文です。基本構文は次の通りです。
- SELECT [取り出したい列] FROM [データセット名]. [テーブル名];
SELECT文では、基本的に一列の情報を取得しますが、命令文次第で複数列や全列も指定できます。
一列の情報を取得
基本構文通りにSELECT文を記述すると、データベースから一列の情報のみを取得できます。
先ほど作成した顧客リストから、「企業名(company)」の列のみを抽出する場合、次の構文を設定します。
- 命令文:
SELECT company FROM Customer_List.Customer_List;
複数列の情報を取得
複数列の情報を取得する場合、「SELECT」の後にカンマで区切って複数の列を指定します。
それでは試しに、顧客リストから「企業名(company)」と「担当者名(name)」を抜き出してみましょう。命令文は次の通りです。
- 命令文:
SELECT company,name FROM Customer_List.Customer_List;
前列の情報を取得
全列、つまりテーブルデータのすべての情報を取得するには、「SELECT」と「FROM」の前に「*(アスタリスク)」を入れます。
- 命令文:
SELECT * FROM Customer_List.Customer_List;
ただし、基本的にBigQueryは、取得したデータ量に応じて課金されるため、全列を指定すると費用が高くなる可能性があります。定額プランを利用していない場合は、情報を取得する列をある程度絞り込むのが良いでしょう。
条件を指定
WHERE句を活用すると条件を指定できるため、取得する情報をより細かく絞り込めるのが特徴です。
命令文は決して複雑ではなく、基本構文の後に「WHERE」と条件文を追加するだけで済みます。条件を追加する際は、「=(等しい)」「~ AND ~(両方の条件と一致)」「BETWEEN ~ AND ~(~から~の範囲)」といった演算子を用います。
例えば、顧客リストから男性担当者のみを抽出する場合は、次のような命令文を設定しましょう。
- 命令文:
SELECT name FROM Customer_List.Customer_List WHERE gender=‘男’;
BigQueryにおけるSQLの書き方(3)INSERT文
INSERT文は、データベースに新たな情報を追加する際に使用します。
例えば、新規顧客と取引が発生した際に、顧客リストに会社名や担当者名といった情報を追加できるのが特徴です。追加する列名を指定する方法と、指定しない方法の二通りがあります。
列名を指定して情報を追加
列名を指定して情報を追加する場合、テーブル名の後に列名を記載します。
- INSERT INTO [データセット名]. [テーブル名](列名1,列名2) VALUES(‘値1′,’値2’);
仮に、顧客リストに次の顧客情報を追加するとします。
- 追加する顧客情報:
企業名/G工業
担当者名/山本
性別/男
担当部署/商品開発
従業員数/120
この場合の命令文は次の通りです。
- 命令文:
INSERT INTO Customer_List.Customer_List(company,name,gender,division,employee) VALUES(‘G工業’,‘山本’,‘男’,‘商品開発’,120);
値が存在しない場合は「NULL」と記載しましょう。例えば、担当部署と従業員数の値を記載しない場合、次のように命令文を記載します。
- 命令文:
INSERT INTO Customer_List.Customer_List(company,name,gender,division,employee) VALUES(‘G工業’,‘山本’,‘男’,NULL,NULL);
列名を指定せずに情報を追加
指定する値がテーブルの列の位置に対応している場合、列名を記載する必要はありません。
- 顧客情報:
企業名/G工業
担当者名/山本
性別/男
担当部署/商品開発
従業員数/120 - 命令文:
INSERT INTO Customer_List.Customer_List VALUES(‘G工業’,‘山本’,‘男’,‘商品開発’,120);
BigQueryにおけるSQLの書き方(4)UPDATE文
いまある情報を最新状態へと更新する場合は、UPDATE文を使用します。
例えば、特定の取引先で担当者と担当部署が変わった場合、次の命令文を記載します。
- 対象となる取引先:
A商事 - 変更箇所:
担当者名/山田→松下
担当部署/営業→情報システム - 命令文:
UPDATECustomer_List.Customer_List SET name = ‘松下’, division = ‘情報システム’
WHERE company = ‘A商事’;
BigQueryにおけるSQLの書き方(5)DELETE文
DELETE文とは、データベースから情報を削除するための構文です。1行ごとにデータを削除できます。ただし、WHERE句で条件を指定しないと、データベースから全情報が削除されてしまうので、注意が必要です。
顧客リストからA商事の情報を削除する場合の命令文は次の通りです。
- 命令文:
DELETE FROM Customer_List.Customer_List WHERE company = ‘A商事’;
SQLを使いこなしてBigQueryを最大限に活かそう
BigQueryは、比較的シンプルな言語であるSQLを用いてクエリを実行できます。非エンジニアの方でも扱いやすいのは大きなメリットだといえます。2024年1月時点において数多くのSQL言語に対応しているBigQueryですが、なかでも特に「SELECT・INSERT・UPDATE・DELETE」の4つの構文はしっかりと押さえておきましょう。
BigQueryのようなDWH(データウェアハウス)は、Google以外にAWSやMicrosoft Azureなどの製品も存在します。そのため、どの製品を選べば良いかわからず、悩んでいる担当者の方も多いのではないでしょうか。
以下の資料で3大クラウドサービスの特徴を詳しく比較していますので、ぜひ参考にしてください。
- カテゴリ:
- Google Cloud(GCP)
- キーワード:
- bigquery sql