【BigQuery基礎】DISTINCTでレコードの重複除外(サンプルクエリ付き)

BigQuery

BigQuery(BQ) でレコードの重複を除外したり、集計する際に特定カラムでユニークなカウントをする際には DISTINCT を使用します。

こちらの記事ではBigQuery初心者向けにDISTINCTの使い方を解説します!

DISTINCTとは

BigQueryで集計をする際に重複したレコードが存在することがあります。集計結果で重複を除外して表示したい場合にDISTINCTを用います。

DISTINCTを用いることで、SELECTで選択して取得したカラムが一致しているレコードを除外することができます。

DISTINCTの使い方

実際のDISTINCTの使い方を解説していきます。

重複を除外してレコードを表示

SELECTに続けてDISTINCTを記載し、続けて重複を除外したいカラムを指定します。指定したカラムがすべて一致するレコードの重複が除外されます。

SELECT DISTINCT カラム1, カラム2 ... FROM table_name 

サンプルクエリ

DISTINCTを使用しないで実行する。

WITH 

data AS (
    SELECT 1 AS id, "田中" AS name 
    UNION ALL
    SELECT 2 AS id, "佐藤" AS name 
    UNION ALL
    SELECT 3 AS id, "鈴木" AS name 
    UNION ALL
    SELECT 3 AS id, "鈴木" AS name 
    UNION ALL
    SELECT 4 AS id, "高橋" AS name 
)

SELECT id, name FROM data

上記のクエリをBigQueryのWebコンソールでコピー&ペーストして実行すると結果が表示されます。

実行結果では重複したレコードが表示されます。

idname
1田中
2佐藤
3鈴木
3鈴木
4高橋

DISTINCTを使用して実行する。

WITH 

data AS (
    SELECT 1 AS id, "田中" AS name 
    UNION ALL
    SELECT 2 AS id, "佐藤" AS name 
    UNION ALL
    SELECT 3 AS id, "鈴木" AS name 
    UNION ALL
    SELECT 3 AS id, "鈴木" AS name 
    UNION ALL
    SELECT 4 AS id, "高橋" AS name 
)

SELECT DISTINCT id, name FROM data

実行結果では重複したレコードは除外されます。

idname
1田中
2佐藤
3鈴木
4高橋

複数カラムを指定するとカラムすべてが重複したレコードが除外されます

特定カラム(列)で重複を除外してユニークにカウントする

COUNTする際に指定するカラムの前にDISTINCTをつけることで、指定したカラムをユニークにカウントすることができます。

WITH 

data AS (
    SELECT 1 AS id, "田中" AS name 
    UNION ALL
    SELECT 2 AS id, "佐藤" AS name 
    UNION ALL
    SELECT 3 AS id, "鈴木" AS name 
    UNION ALL
    SELECT 3 AS id, "鈴木" AS name 
    UNION ALL
    SELECT 4 AS id, "高橋" AS name 
)

SELECT 
    COUNT(id) AS id_count,
    COUNT(DISTINCT id) AS id_distinct_count
FROM 
    data

実行結果を見るとユニークにカウントされていることがわかります。ユニークユーザーなどを集計する際はこちらの記法が便利です。

id_countid_distinct_count
54

重複しているレコードを抽出する

以下のクエリで重複しているレコードを抽出することもできます。

WITH 

data AS (
    SELECT 1 AS id, "田中" AS name 
    UNION ALL
    SELECT 2 AS id, "佐藤" AS name 
    UNION ALL
    SELECT 3 AS id, "鈴木" AS name 
    UNION ALL
    SELECT 3 AS id, "鈴木" AS name 
    UNION ALL
    SELECT 4 AS id, "高橋" AS name 
)

SELECT 
    id,
    name,
    COUNT(1) as cnt
FROM 
    data
GROUP BY 
    1, 2
HAVING
    cnt > 1

実行結果は重複したレコードのみ表示されます。

idnamecnt
3鈴木2

レコードに重複がないかを上記のクエリでチェックできます

まとめ

こちらの記事では、

  • BigQuery における DISTINCT とは
  • DISTINCT の基本的な使い方、サンプルクエリ

について解説しました。

データ分析の集計で頻度高く使用するので是非活用してみてください!

コメント

タイトルとURLをコピーしました