スケジュールされたクエリで、各テーブルのレコード件数を自動取集する
週次でテーブルのレコード件数の推移とテーブルの増減を調べたく
ストアド プロシージャの勉強も兼ねて
スケジュールされたSQLで、定期的に収集できるようにしました。
レコードを登録するテーブル名一覧を一時表に登録して
LOOPでメタ情報を順次登録しています。
DECLARE dataset STRING; DECLARE current_row int64 DEFAULT 0; DECLARE loc STRING; SET loc = 'US'; CREATE temp table dataset_list AS ( SELECT catalog_name || '.' || schema_name || '.__TABLES__' AS dataset_name, ROW_NUMBER() OVER (ORDER BY schema_name) AS row_num FROM INFORMATION_SCHEMA.SCHEMATA WHERE location = loc); LOOP SET current_row = current_row + 1; SET dataset = ( SELECT dataset_name FROM dataset_list WHERE row_num = current_row); IF dataset IS NULL THEN LEAVE; END IF; EXECUTE IMMEDIATE FORMAT("INSERT INTO ds.table_metas SELECT *, CURRENT_TIMESTAMP() AS check_timestamp FROM %s", dataset); END LOOP; -- データセット、テーブル登録件数を保持 INSERT INTO ds.records SELECT DATE_TRUNC(CURRENT_DATE(), week(sunday)) AS recorded_on, COUNT(DISTINCT dataset_id) AS dataset_record, COUNT(DISTINCT dataset_id||table_id) AS table_record, SUM(row_count) AS total_record, SUM(size_bytes) AS total_size, FROM ds.table_metas WHERE TIMESTAMP_TRUNC(check_timestamp, week(sunday)) = TIMESTAMP_TRUNC(CURRENT_TIMESTAMP(), week(sunday)) ;
参考にしたブログはこれ以外にもあったのですが。。 qiita.com
いろいろ探してみたけど
そのブログを見つけられなかった。。
どんなキーワードで検索して そのブログへ辿り着けたかも忘れてしまった。 多分、名の知れた方だったかな
もうちょい、ここを熟読しないとな