コンテンツにスキップ

データベース(インポート・調査メタキャッシュ)

候補者インポートの履歴と、アンケート調査のメタデータキャッシュを扱う 2 テーブル。

回答本体は Postgres に持たない

アンケートの回答データは Databricks の Unity Catalog(cs.cs_dm.dm_answers_<survey_id>)から直接読む。Postgres に持つのは調査一覧の表示に使う databricks_surveys だけ。詳細は Databricks 連携 を参照。

メタキャッシュはアプリのテーブルと繋がっていない

databricks_surveys は外部データのキャッシュであり、projects などとの外部キーを持たない。紐付けは projects.survey_id に格納された文字列を通じた論理的なものだけ。


import_logs

概要

TSV / アンケートインポートの実行履歴。件数の内訳とエラー明細を保持する。

テーブル定義

論理名 物理名 カラム名 データ型 主キー リレーション ユニーク NULL許可 デフォルト値 備考
インポートログ import_logs id integer ◯ auto-increment
project_id integer projects:id (cascade)
import_type import_type manual_tsv / manual_survey / auto_survey
survey_id varchar(50) ◯ アンケートインポート時の対象調査
status import_status 'pending' pending / processing / completed / partial / failed
imported_count integer 0 取り込み成功件数
skipped_count integer 0 フィルタ等でスキップした件数
error_count integer 0 エラー件数
duplicate_count integer 0 重複により登録しなかった件数
error_details json ◯ ImportError[] 型
payload json ◯ 実行時のリクエスト内容(マッピング・フィルタ)
source_file_timestamp timestamp ◯ S3 の CSV を参照していた頃の名残。現在は使われていない
started_at timestamp ◯ 処理開始
completed_at timestamp ◯ 処理完了
created_at timestamp now() レコード作成

リレーション

  • project_id → projects.id(onDelete: cascade)

インデックス

  • 主キー (id)
  • INDEX: idx_il_project_id (project_id)

注記

  • インポートは非同期。API はレコードを pending / processing で作成して即座に返し、進捗は GET /projects/{id}/candidates/import/{importId}/status で確認する
  • 実処理は ECS Fargate タスク(src/batch/import.ts)で走る
  • 一部だけ成功した場合は partial
  • payload に実行時のマッピングとフィルタを丸ごと残すため、後から同じ条件を再現できる
  • import_type の値は S3 連携時代に manual_s3 / auto_s3 だったものを改名した。既存行は ALTER TYPE ... RENAME VALUE で移行済み

databricks_surveys

概要

調査メタデータのキャッシュ。src/batch/databricks-meta-sync.ts が Databricks の cs.cs_dwh を集計して日次で更新する。

集計は約 6,800 万行の回答をスキャンして 15 秒前後かかるため、リクエストごとには実行せずこのテーブルに載せている。調査一覧・詳細画面はここだけを読む。

テーブル定義

論理名 物理名 カラム名 データ型 主キー リレーション ユニーク NULL許可 デフォルト値 備考
調査メタ databricks_surveys id integer ◯ auto-increment
survey_id varchar(50) ◯ 外部アンケート ID
survey_name varchar(500) アンケート名
collector_name varchar(500) ◯ コレクター名
total_respondents integer 0 回答者総数
completed_respondents integer 0 完了回答者数
question_count integer 0 設問数
earliest_response_at timestamp ◯ 最初の回答日時
latest_response_at timestamp ◯ 最後の回答日時
synced_at timestamp 更新日時

インデックス

  • 主キー (id)
  • UNIQUE: survey_id
  • INDEX: idx_dbs_synced_at (synced_at)

注記

  • projects.survey_id はこの survey_id を指すが、外部キー制約はない
  • 統計値(total_respondents など)は更新時点のスナップショット
  • 更新は 追加型(upsert)。Databricks 側から消えた調査の行は残る
  • 調査別 API(/api/v1/surveys/{surveyId} 配下)はこのテーブルに行があることを 404 判定に使う。未知の ID で Databricks のテーブル未存在エラー(502)になるのを避けるため
  • このテーブルは S3 連携時代の s3_surveys を改名したもの。カラム構成は変わっていない

削除されたテーブル

S3 の CSV を Postgres にキャッシュしていた時代の 3 テーブルは削除済み。

旧テーブル 経緯
s3_answers 回答本体のキャッシュ。Databricks の dm_answers_<survey_id> を直接読むようになったため不要
s3_panels 回答者情報のキャッシュ。Databricks 側で回答と結合済みのため不要
s3_sync_logs 同期バッチの実行履歴。同期そのものが無くなったため不要

関連する enum s3_sync_status / s3_sync_type も削除した。