LoginSignup
2
2

More than 5 years have passed since last update.

BigQueryでUPDATE?? その2

Posted at

データが更新される度にタイムスタンプを追加したデータをBigQueryに貯めておいて、参照したい時に最新のデータだけを取得したいなー。と思って探したら@satoru_magさんの以下の記事をみつけました。

で、やってみた

データ

データは引用元に合わせてこんな感じ。

shohin_name     shohin_code     shohin_price    update_date
shohin_1        1       1000    2015-10-05 20:15:10 UTC
shohin_2        2       1420    2015-10-05 20:15:10 UTC
shohin_3        3       980     2015-10-05 20:15:10 UTC
renamed_shohin_1        1       1000    2015-10-07 12:30:42 UTC
shohin_2        2       1280    2015-10-07 12:30:42 UTC
  • shohin_code:1 のアイテムは名前(shohin_name)をアップデート
  • shohin_code:2 のアイテムは価格(shohin_price)をアップデート
  • shohin_code:3 は変更なし

クエリ実行

引用元にあるクエリを実行してみた結果が以下。

[
  {
    "shohin_name": "shohin_2",
    "shohin_code": "2",
    "shohin_price": "1420",
    "f0_": "2015-10-05 20:15:10 UTC"
  },
  {
    "shohin_name": "shohin_3",
    "shohin_code": "3",
    "shohin_price": "980",
    "f0_": "2015-10-05 20:15:10 UTC"
  },
  {
    "shohin_name": "shohin_1",
    "shohin_code": "1",
    "shohin_price": "1000",
    "f0_": "2015-10-05 20:15:10 UTC"
  },
  {
    "shohin_name": "renamed_shohin_1",
    "shohin_code": "1",
    "shohin_price": "1000",
    "f0_": "2015-10-07 12:30:42 UTC"
  },
  {
    "shohin_name": "shohin_2",
    "shohin_code": "2",
    "shohin_price": "1280",
    "f0_": "2015-10-07 12:30:42 UTC"
  }
]

最新データだけになってない!!!

アップデートされたshohin_nameshohin_priceGROUP EACH BYでまとめてしまってるので期待する結果にはなりませんでした。

別のクエリを考えてみた

クエリ

考えた結果以下の様なクエリにしてみました。

SELECT
 a.shohin_name AS shohin_name,
 a.shohin_code AS shohin_code,
 a.shohin_price AS shohin_price,
 a.update_date AS update_date
FROM
 [hoge.shohin_master] AS a
RIGHT JOIN EACH
(
  SELECT shohin_code, MAX(update_date) AS latest
  FROM [hoge.shohin_master]
  GROUP EACH BY shohin_code
) AS b ON a.shohin_code = b.shohin_code AND a.update_date = b.latest 

実行結果

[
  {
    "shohin_name": "shohin_3",
    "shohin_code": "3",
    "shohin_price": "980",
    "update_date": "2015-10-05 20:15:10 UTC"
  },
  {
    "shohin_name": "renamed_shohin_1",
    "shohin_code": "1",
    "shohin_price": "1000",
    "update_date": "2015-10-07 12:30:42 UTC"
  },
  {
    "shohin_name": "shohin_2",
    "shohin_code": "2",
    "shohin_price": "1280",
    "update_date": "2015-10-07 12:30:42 UTC"
  }
]

これを引用元の記事のようにViewに保存しておけば簡単にアクセスできるかなと。
めでたしめでたし。

2
2
2

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
2