LoginSignup
7
5

More than 3 years have passed since last update.

BigQueryを利用したデータ基盤の利用度のモニタリング

Posted at

背景

データ基盤は意思決定に使われて初めて価値を発揮する。データ基盤が適切に開発/運用されているかどうかをモニタリングしたい場合は、データ基盤が組織の意思決定にどの程度貢献したかを測定したい。が、それを測定するのは困難。

なので、今回はBigQueryを利用したデータ基盤において、それがどの程度利用されているかをモニタリングできるようにし、意思決定への貢献度の雰囲気とか空気感くらいはわかるようにしたい。

メタデータテーブルの永続化の必要

BigQueryの利用度をモニタリングする上で重要なのが、メタデータの永続化。
例えば、クエリジョブに関するメタデータを保存するビュー INFORMATION_SCHEMA.JOBS_BY_* は180日しか保存されない。長期スパンでのモニタリングを行うためにはこの辺りを永続化しておく必要がある。デイリーで、前日分のログを貯めておくなど。

モニタリング

1.コストのモニタリング

コストのモニタリングは、GCPのお支払いレポートで十分だと思う。プロダクト毎のコストの推移や、デイリーのコストの推移も見れる。

スクリーンショット 2020-12-24 10.07.23.png

2. ダッシュボード数 & ダッシュボードPV

データ基盤の活用が組織に広まると、活用される機会が多くなるダッシュボード。
定期的に参照されているダッシュボードが何個あって、どの程度PVがあるかを棚卸ししておくと活用度の推移が見えやすい。
TableauにはPV機能があるのでそれを利用。 Data Portalの場合はGAが埋め込めるのでそれを利用する。

レポートの利用状況を測定する

3. クエリ実行UU

クエリを実行したアカウントのユニーク数をカウント。毎月何人くらいがBigQueryを参照しているか。

SELECT
  DATE_TRUNC(DATE(creation_time, "Asia/Tokyo"), MONTH),
  COUNT(distinct(user_email)) as uu,
FROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE job_type = "QUERY"
AND state = "DONE"
GROUP BY 1
ORDER BY 1 ASC

4. クエリ量の推移

1ヶ月でどの程度スキャンされたか。別にこれが多いからいいとか、少ないからダメってわけではない。推移を見ながら利用がどう広がっているかは把握できる。

WITH base_tables as (
SELECT
  job_id,
  creation_time,
  total_bytes_processed,
FROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT 
WHERE job_type = "QUERY" 
AND state = "DONE" 
)

SELECT
  DATE_TRUNC(DATE(creation_time, 'Asia/Tokyo'), MONTH),
  COUNT(*)
FROM base_tables
GROUP BY 1
ORDER BY 1 asc

5. スキャン量の推移

1ヶ月でどの程度スキャンされたか。別にこれが多いからいいとか、少ないからダメってわけではない。推移を見ながら利用がどう広がっているかは把握できる。

WITH base_tables as (
SELECT
  job_id,
  creation_time,
  total_bytes_processed,
FROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT 
WHERE job_type = "QUERY" 
AND state = "DONE" 
)

SELECT
  DATE_TRUNC(DATE(creation_time, 'Asia/Tokyo'), MONTH),
  SUM(total_bytes_processed)
FROM base_tables
GROUP BY 1
ORDER BY 1 asc

6. データ量

点でしか取れない。デイリーで保存して推移を見たい。

SELECT
  table_id,
  SUM(size_bytes) / 1000000000 as size_GB
FROM (
  SELECT * FROM `datasource1.__TABLES__`
  UNION ALL
  SELECT * FROM `datasource2.__TABLES__`
  UNION ALL
  SELECT * FROM `datasource3.__TABLES__`
)
GROUP BY 1
ORDER BY 2 desc

7. レコード数

点でしか取れない。デイリーで保存して推移を見たい。

SELECT
  SUM(row_count)
FROM (
  SELECT * FROM `datasource1.__TABLES__`
  UNION ALL
  SELECT * FROM `datasource2.__TABLES__`
  UNION ALL
  SELECT * FROM `datasource3.__TABLES__`
)
--GROUP BY 1
ORDER BY 1 desc
7
5
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
7
5