0
0

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でデータの重複チェック!

Posted at

BigQueryデータマートを作成する際やデータの数値検証をする際によく使うSQLのメモ。
BigQUeryでなくてもいけると思う。

たとえば、下記のようなテーブル「sample」があるとする。カラムはanimalとfavoriteである。

animal favorite
dog meat
cat vegetable
dog fish
fish vegetable

様々な処理を施しanimalユニークなテーブルだと想定していたが、上記の表のとおり、animal='dog'のデータが2つある。
このような重複が発生しているデータを取得するSQLは下記である。

WITH
TMP AS
(
    SELECT
        animal
        ,COUNT(*) AS CNT
    FROM
        sample
    GROUP BY
        animal
)

SELECT
    *
FROM
    animal A
WHERE
    EXISTS
        (
            SELECT
                *
            FROM
                TMP B
            WHERE
                A.animal = B.animal
                AND B.CNT >= 2
        )
ORDER BY
    animal
    ,favorite

最後のORDER BYは状況に応じて実装する。
今回でいえば、下記のような結果が出力される。

animal favorite
dog fish
dog meat

ちなみに、複合主キーの場合についても、同様に実装できる。

じゃあ例えば、今回のsampleテーブル(下記、再掲)で、(animal, favorite)の組み合わせが複合主キーだとする。

animal favorite
dog meat
cat vegetable
dog fish
fish vegetable

この場合は下記で重複チェックができる。

WITH
TMP AS
(
    SELECT
        animal
        ,favorite
        ,COUNT(*) AS CNT
    FROM
        sample
    GROUP BY
        animal
        ,favorite
)

SELECT
    *
FROM
    animal A
WHERE
    EXISTS
        (
            SELECT
                *
            FROM
                TMP B
            WHERE
                A.animal = B.animal
                AND A.favorite = B.favorite
                AND B.CNT >= 2
        )
ORDER BY
    animal
    ,favorite

この場合は、重複が存在しないので、BigQueryであれば「表示できるデータがありません」のような表示が出てくる。

お終い。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?