---
title: 同期
description: スケジュール、増分読み取りと全件読み取り、スキーマの変更、削除、マージの仕組みを確認します。
species: concept
---
# 同期

同期はソースのレコードを読み取り、整合性のある新しい状態をレイクにコミットします。実行中は、それまでのスナップショットをクエリできます。読み取りが新しいスナップショットに切り替わるのは、コミットが成功した後だけです。

## ライフサイクル

1. Supernova は、ソースの認証情報で参照できるテーブルと列を検出します。
2. 実行は、新規または変更されたソースレコードを読み取ります。ソースが対応している場合は、保存済みの位置から再開します。
3. 行はソースのキーでマージされます。同じキーの新しい値は、それまでの現在値を置き換えます。
4. 削除の検出では、マージと同じコミット内で、行に `_deleted = true` を設定します。
5. コミットされたスナップショットが、新しいクエリから参照可能になります。

新しいソースは、接続時に同期されます。定期実行のデフォルト間隔は 4 時間です。ソースの **同期履歴** タブには、各実行とその結果が表示されます。

## 増分読み取りと全件読み取り

増分読み取りに対応するソースは、更新日時、イベント ID、ページトークンなどのカーソルを提供します。Supernova は、対応するデータが永続化された後にのみ、その位置を保存します。実行が停止した場合、次の実行は最後に永続化された位置から再開します。

全件読み取りは、ソースを再び一覧取得し、レイクと照合します。ソースへのリクエストは増えますが、一部の API では、削除を正確に検出する唯一の方法です。Salesforce は、レイクごとの照合機能が有効になるまで全件読み取りを行います。有効になった後は `SystemModstamp` を優先し、`LastModifiedDate` にフォールバックし、どちらの優先フィールドも提供しないオブジェクトでは、最後に `CreatedDate` を使用します。

## 固定スキーマと検出されるスキーマ

Stripe などの固定スキーマのソースでは、テーブルを Supernova 側で定義します。新しいソース列をその契約に追加するには、コードの変更が必要です。

PostgreSQL、Airtable、Salesforce などのスキーマを検出するソースでは、ソースにメタデータを問い合わせます。接続したアカウントの正確なリファレンスは、**テーブル** タブです。新たに検出された列は、依存するモデルに予期しない影響を及ぼす前に、スキーマ変更のフィードに表示されます。

## 削除

Supernova は、削除されたソース行を保持し、履歴を消す代わりに `_deleted` を設定します。現在の状態を対象とするクエリでは、その条件を明示してください。

```sql
select id, email, _synced_at
from titan.hubspot.contacts
where not _deleted
```

削除の検出方法は、ソースによって異なります。削除イベントを送る API もあれば、すべてのキーの走査が必要な API もあります。制約がある場合は、コネクターのページに記載されています。

## 整合性

1 つのテーブルのコミットはアトミックです。クエリが参照するのは実行前か実行後のどちらかのスナップショットで、両者が混在することはありません。関連するテーブルは異なる時刻に完了する場合があるため、レポートで共通の鮮度の基準が必要な場合は、各テーブルの `_synced_at` の値を使用してください。
