データベース(インポート・調査メタキャッシュ)
候補者インポートの履歴と、アンケート調査のメタデータキャッシュを扱う 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 も削除した。