2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

よく使うBigQueryのSQLクエリ集

Posted at

個人用ですが、BigQueryでデータを触る時に、
よく使うものをピックアップしました。
コピペすることで効率化したいと思います。

1. データ抽出・集計

重複除外

特定のカラムで重複を除外したデータを取得します。

SELECT DISTINCT column FROM dataset.table;

集計

特定のカラムをグループ化してデータを集計(カウント)します。

SELECT column, COUNT(*) FROM dataset.table GROUP BY column;
  • COUNT以外の集約関数
    • SUM(column): 数値の総和
    • AVG(column): 数値の平均値
    • MIN(column): 最小値
    • MAX(column): 最大値
    • COUNT(DISTINCT column): 重複を除外した値の数

2. データの追加・挿入

新しいレコードの追加(重複除外)

既存のデータと重複しない新しいレコードを追加します。

INSERT INTO dataset.target_table
SELECT *
FROM dataset.source_table AS src
WHERE NOT EXISTS (
  SELECT 1
  FROM dataset.target_table AS dest
  WHERE dest.column = src.column
);

3. データの結合

全カラムを結合

データセット内の複数のテーブルを全カラムで結合し、新しいテーブルを作成します。

CREATE OR REPLACE TABLE dataset.target_table AS
SELECT * FROM (
  SELECT * FROM dataset.table1
  UNION ALL
  SELECT * FROM dataset.table2
  UNION ALL
  SELECT * FROM dataset.table3  -- 必要に応じて追加
);

注意: この方法は、結合する全てのテーブルが同じカラム構造を持っている場合に有効です。

指定カラムを結合

特定のカラムのみを結合する場合のクエリです。

CREATE OR REPLACE TABLE dataset.target_table AS
SELECT column1, column2
FROM (
  SELECT column1, column2 FROM dataset.table1
  UNION ALL
  SELECT column1, column2 FROM dataset.table2
  UNION ALL
  SELECT column1, column2 FROM dataset.table3  -- 必要に応じて追加
);

注意点: この方法では、結合に含めるカラムを特定する必要があるため、カラム名が異なるテーブルを結合することが可能です。

4. データの削除

これらの操作により、テーブル内のデータが削除されます。
一度削除すると基本的に元に戻せないため、十分注意して操作を行ってください。

レコードの全件削除

テーブル内のすべてのデータを削除します。

DELETE FROM dataset.table WHERE TRUE;

レコードの条件付き削除

特定の条件を満たすデータを削除します。

DELETE FROM dataset.table
WHERE column = 'value';

テーブル自体の削除

レコードだけでなく、テーブル自体も削除します。

DROP TABLE dataset.table;

5. 特定の条件に基づく新しいカラムの追加

データの日時情報を元に、新しいカラムとして曜日を追加するクエリの例です。
曜日は日本語で表現され、BIなどで昇順・降順ができるよう、
数字の接頭詞が付加されています。

CREATE OR REPLACE TABLE dataset.new_table AS
SELECT
  id,
  CAST(date_time AS DATE) AS record_date,
  column1,
  column2,
  CASE
    WHEN EXTRACT(DAYOFWEEK FROM date_time) = 1 THEN '0.日曜'
    WHEN EXTRACT(DAYOFWEEK FROM date_time) = 2 THEN '1.月曜'
    WHEN EXTRACT(DAYOFWEEK FROM date_time) = 3 THEN '2.火曜'
    WHEN EXTRACT(DAYOFWEEK FROM date_time) = 4 THEN '3.水曜'
    WHEN EXTRACT(DAYOFWEEK FROM date_time) = 5 THEN '4.木曜'
    WHEN EXTRACT(DAYOFWEEK FROM date_time) = 6 THEN '5.金曜'
    WHEN EXTRACT(DAYOFWEEK FROM date_time) = 7 THEN '6.土曜'
  END AS weekday_label
FROM
  `project.dataset.source_table`;

date_time カラムから DAYOFWEEK 関数を用いて曜日を取得します。
CASE 文で数値の曜日インデックスを日本語の曜日名に変換し、新しいカラム weekday_label に追加します。
このクエリは、元データを元に新しいテーブル new_table を作成します。

注意点

バッククォートの利用

BigQueryでは、テーブル名や列名に特殊文字が含まれている場合、
バッククオート(`)で囲む必要があります。

例:

SELECT DISTINCT column FROM `project.dataset.table-name`;

スケジュールの注意点

BigQueryでスケジュールに設定したクエリは、
登録時のクエリがそのまま使用されるため、
修正が必要になった場合は、元のスケジュール設定を削除し、
新しくスケジュールを設定する必要があります。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?