LoginSignup
2
3

More than 5 years have passed since last update.

BigQueryで重複行を除くQuery

Last updated at Posted at 2015-03-01

BigQueryは、SELECT DISTINCTがない。

最後にloadした行だけを取得する

前処理

BigQuery読み込み用のCSVファイルへ書き出すときに、

  • TIMESTAMP値を_insertに入れておく。 CSVファイル1行ごとにTIMESTAMP値を取ると遅そうだしぶつかりそうなので、CSVファイルごとに1つでいい。
  • CSVファイルの何行目か(CSVファイルreaderのline num値とか)を_line_numに入れておく。
  • App EngineのTask Queueで、並列度1な直列化キューを作り、そこで処理する。

としておく。

  • cp932なCSVをUTF-8に変換するときなどに、ついでにやっておく。

Query

  SELECT key1 [, key2, ...]
        ,FIRST(field1) AS field1 [, FIRST(field2) AS field2, ...]
    FROM (  SELECT *
              FROM table1[, table2, ...]
          ORDER BY _insert DESC, _line_num DESC)
GROUP BY key1 [, key2, ...]
  • サブクエリで、対象テーブルを全部UNIONする。
  • key1 [, key2, ...]は、主keyまたは複合主key。
  • GROUP BYで、keyフィールドにグループ化する。
  • keyフィールド以外は、FIRSTで取り出す。
  • 集計フィールドは、AS field1としないと自動的にf0__...のようになる。
  • ORDER BY ... DESCしてからFIRSTで取り出したほうが速そうなイメージであるが、本当のところは測っていない。

BigQueryの仕様

  • table unionは1,000まで。
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