Best Practices
Mit Braze Cloud Data Ingestion können Sie eine direkte Verbindung von Ihrem Data Warehouse oder Dateispeichersystem zu Braze einrichten, um relevante Nutzer- oder Katalogdaten zu synchronisieren. Wenn Sie diese Daten mit Braze synchronisieren, können Sie sie für Anwendungsfälle wie Personalisierung, Triggern oder Segmentierung nutzen.
Änderungen mit UPDATED_AT nachverfolgen

UPDATED_AT ist nur für Data-Warehouse-Integrationen relevant, nicht für Dateispeicher-Synchronisierungen.
Wenn eine Synchronisierung ausgeführt wird, stellt Braze eine direkte Verbindung zu Ihrer Data-Warehouse-Instanz her und verwendet den UPDATED_AT-Zeitstempel jeder Zeile zur Änderungsverfolgung. UPDATED_AT ist ein Pflichtfeld für alle Data-Warehouse-Synchronisierungen.

CDI verfolgt Änderungen ausschließlich auf Basis der UPDATED_AT-Werte, unabhängig davon, ob der Zeileninhalt mit dem übereinstimmt, was derzeit in Braze vorhanden ist. Braze empfiehlt, UPDATED_AT zu verwenden, um nur neue oder aktualisierte Daten zu synchronisieren, um unnötige Datenpunkt-Nutzung zu vermeiden.
Beispiel: Verhalten einer wiederkehrenden Synchronisierung
Um zu veranschaulichen, wie UPDATED_AT in einer CDI-Synchronisierung verwendet wird, betrachten Sie dieses Beispiel einer wiederkehrenden Synchronisierung zur Aktualisierung von Nutzerattributen.
Bei jeder Synchronisierung sucht CDI nach Zeilen, die zuvor noch nicht synchronisiert wurden. CDI prüft dies anhand der UPDATED_AT-Spalte in Ihrer Tabelle oder Ansicht. Braze wählt alle Zeilen aus und importiert sie, deren UPDATED_AT-Wert neuer ist als der zuletzt synchronisierte UPDATED_AT-Wert. Zeilen an der exakten Grenz-Zeitstempel-Grenze können ebenfalls erneut synchronisiert werden, wenn zwischen den Durchläufen neue Zeilen mit demselben Zeitstempel hinzugefügt werden.

CDI verfolgt die Anzahl der Zeilen mit dem zuletzt synchronisierten UPDATED_AT-Wert. Wenn zwischen den Durchläufen neue Zeilen mit demselben Zeitstempel hinzugefügt werden, wechselt CDI zu einer inklusiven Grenze (>=) und synchronisiert alle Zeilen mit diesem Zeitstempel erneut, einschließlich bereits verarbeiteter Zeilen. Um doppelte Synchronisierungen und unnötige Datenpunkt-Nutzung zu vermeiden, verwenden Sie eindeutige UPDATED_AT-Werte über die Synchronisierungsdurchläufe hinweg. Weitere Informationen finden Sie unter Erneutes Synchronisieren von Zeilen mit doppelten Zeitstempeln vermeiden.
Fügen Sie in Ihrem Data Warehouse die folgenden Nutzer:innen und Attribute zu Ihrer Tabelle hinzu und setzen Sie die UPDATED_AT-Zeit auf den Zeitpunkt, zu dem Sie diese Daten hinzufügen:
| UPDATED_AT | EXTERNAL_ID | PAYLOAD |
|---|---|---|
2022-07-17 08:30:00 |
customer_1234 |
|
2022-07-18 11:59:23 |
customer_3456 |
|
2022-07-19 09:07:23 |
customer_5678 |
|
Bei der nächsten geplanten Synchronisierung synchronisiert Braze alle Zeilen mit einem UPDATED_AT-Zeitstempel, der neuer ist als der zuletzt synchronisierte Zeitstempel. Braze aktualisiert oder ergänzt Felder, sodass Sie nicht jedes Mal das vollständige Nutzerprofil synchronisieren müssen. Nach der Synchronisierung spiegeln die Nutzerprofile die neuen Aktualisierungen wider:
Wiederkehrende Synchronisierung, zweiter Durchlauf am 20. Juli 2022 um 12 Uhr
| UPDATED_AT | EXTERNAL_ID | PAYLOAD |
|---|---|---|
2022-07-17 08:30:00 |
customer_1234 |
|
2022-07-18 11:59:23 |
customer_3456 |
|
2022-07-19 09:07:23 |
customer_5678 |
|
2022-07-16 00:25:30 |
customer_9012 |
|
Eine neue Zeile wurde für customer_9012 hinzugefügt, aber der UPDATED_AT-Wert (2022-07-16 00:25:30) liegt vor dem gespeicherten Zeitstempel (2022-07-19 09:07:23), sodass diese Zeile nicht synchronisiert wird. Die bestehende Zeile für customer_5678 hat jedoch einen UPDATED_AT-Wert, der dem gespeicherten Zeitstempel entspricht, und wird daher aufgrund der inklusiven Grenze erneut synchronisiert. Weitere Details zu diesem Verhalten finden Sie unter Erneutes Synchronisieren von Zeilen mit doppelten Zeitstempeln vermeiden. Der gespeicherte UPDATED_AT-Wert bleibt 2022-07-19 09:07:23.
Wiederkehrende Synchronisierung, dritter Durchlauf am 21. Juli 2022 um 12 Uhr
| UPDATED_AT | EXTERNAL_ID | PAYLOAD |
|---|---|---|
2022-07-17 08:30:00 |
customer_1234 |
|
2022-07-18 11:59:23 |
customer_3456 |
|
2022-07-19 09:07:23 |
customer_5678 |
|
2022-07-16 00:25:30 |
customer_9012 |
|
2022-07-21 08:30:00 |
customer_1234 |
|
In diesem dritten Durchlauf wurde eine weitere neue Zeile für customer_1234 mit einem UPDATED_AT-Wert (2022-07-21 08:30:00) hinzugefügt, der neuer ist als der gespeicherte Zeitstempel. Diese neue Zeile und die bestehende Zeile für customer_5678 (deren UPDATED_AT-Wert dem gespeicherten Zeitstempel entspricht) werden beide synchronisiert. Der gespeicherte UPDATED_AT-Wert wird nun auf 2022-07-21 08:30:00 gesetzt.

UPDATED_AT-Werte dürfen auch nach dem Startzeitpunkt eines bestimmten Synchronisierungsdurchlaufs liegen. Dies wird jedoch nicht empfohlen, da der letzte UPDATED_AT-Zeitstempel dadurch „in die Zukunft“ verschoben wird und nachfolgende Synchronisierungen keine früheren Werte synchronisieren werden.
Datentyp-Probleme vermeiden
Wenn Sie CDI verwenden, um Daten aus externen Quellen (wie Databricks oder Snowflake) zu synchronisieren, stellen Sie vor der Synchronisierung sicher, dass Ihre Quellspalten die richtigen Datentypen verwenden. Häufige Probleme sind:
- Zeitstempel als Strings gespeichert: Stellen Sie sicher, dass Ihre Datumsspalten in Ihrer Quelldatenbank einen Timestamp- oder Datetime-Typ verwenden und keinen Varchar- oder String-Typ.
- Zahlen als Strings gespeichert: Wandeln Sie numerische Spalten in Ihrer Quellabfrage vor der Synchronisierung in Integer- oder Float-Typen um.
- Inkonsistente Typen zwischen Synchronisierungen: Wenn sich der Typ einer Spalte zwischen Synchronisierungen ändert, lehnt Braze die neuen Daten möglicherweise ab. Überprüfen Sie, dass Ihr Quellschema konsistent bleibt.
Informationen zum Erzwingen oder Ändern von Datentypen für angepasste Attribute im Braze-Dashboard finden Sie unter Angepasste Daten verwalten.
Sie können Nutzerdaten über externe ID, Nutzer-Alias, Braze-ID, E-Mail oder Telefonnummer aktualisieren. Nutzer:innen können Sie über externe ID, Nutzer-Alias oder Braze-ID löschen.
UTC-Zeitstempel für die Spalte UPDATED_AT verwenden
Die Spalte UPDATED_AT sollte in UTC angegeben sein, um Probleme mit der Sommerzeit zu vermeiden. Verwenden Sie nach Möglichkeit reine UTC-Funktionen, beispielsweise SYSDATE() statt CURRENT_DATE().
Erneutes Synchronisieren von Zeilen mit doppelten Zeitstempeln vermeiden
CDI verfolgt die Anzahl der Zeilen beim zuletzt synchronisierten UPDATED_AT-Zeitstempel. Wenn CDI erkennt, dass seit dem letzten Durchlauf neue Zeilen mit demselben Zeitstempel hinzugefügt wurden, verwendet es eine inklusive Grenze (>=), um alle Zeilen mit diesem Zeitstempel erneut auszuwählen, einschließlich bereits verarbeiteter. Andernfalls verwendet CDI eine exklusive Grenze (>) und wählt nur Zeilen aus, die strikt nach dem zuletzt synchronisierten Wert liegen.
Wenn beispielsweise eine Synchronisierung fünf Zeilen mit UPDATED_AT = 2025-04-01 00:00:00 verarbeitet und später eine sechste Zeile mit demselben Zeitstempel hinzugefügt wird, erkennt die nächste Synchronisierung die Änderung der Anzahl und synchronisiert alle sechs Zeilen erneut. Dies kann zu doppelten Daten und unnötigem Datenpunktverbrauch führen.
Um dies zu vermeiden:
- Wenn Sie eine Synchronisierung gegen eine
VIEWeinrichten, verwenden Sie nichtCURRENT_TIMESTAMPals Standardwert. Dies führt dazu, dass alle Daten bei jedem Synchronisierungslauf synchronisiert werden, da dasUPDATED_AT-Feld zum Zeitpunkt der Abfrageausführung ausgewertet wird. - Wenn Sie lang laufende Pipelines oder Abfragen haben, die Daten in Ihre Quelltabelle schreiben, vermeiden Sie es, diese gleichzeitig mit einer Synchronisierung auszuführen, oder vermeiden Sie es, denselben Zeitstempel für jede eingefügte Zeile zu verwenden.
- Verwenden Sie eine Transaktion, um alle Zeilen zu schreiben, die denselben Zeitstempel haben.
- Verwenden Sie eindeutige, monoton steigende
UPDATED_AT-Werte, um zu verhindern, dass Zeilen nach der Verarbeitung erneut ausgewählt werden.
Beispiel: Verwaltung nachfolgender Updates
Dieses Beispiel zeigt den allgemeinen Prozess für die erstmalige Synchronisierung von Daten und die anschließende Aktualisierung nur der geänderten Daten (Deltas) in den nachfolgenden Updates. Nehmen wir an, wir haben eine Tabelle EXAMPLE_DATA mit einigen Nutzerdaten. Am Tag 1 hat sie die folgenden Werte:
| external_id | attribute_1 | attribute_2 | attribute_3 | attribute_4 |
|---|---|---|---|---|
| 12345 | 823 | blue | 380 | FALSE |
| 23456 | 28 | blue | 823 | TRUE |
| 34567 | 234 | blue | 384 | TRUE |
| 45678 | 245 | red | 349 | TRUE |
| 56789 | 1938 | red | 813 | FALSE |
Um diese Daten in eine PAYLOAD-Spalte zu überführen, könnten Sie die folgende Abfrage ausführen:
SELECT
CURRENT_TIMESTAMP AS UPDATED_AT,
EXTERNAL_ID AS EXTERNAL_ID,
TO_JSON(
OBJECT_CONSTRUCT(
'attribute_1', attribute_1,
'attribute_2', attribute_2,
'attribute_3', attribute_3,
'attribute_4', attribute_4
)
) AS PAYLOAD
FROM EXAMPLE_DATA;
Nichts davon wurde bisher mit Braze synchronisiert, also fügen Sie alles der Quelltabelle für CDI hinzu:
| UPDATED_AT | EXTERNAL_ID | PAYLOAD |
|---|---|---|
| 2023-03-16 15:00:00 | 12345 | { "ATTRIBUTE_1": "823", "ATTRIBUTE_2":"blue", "ATTRIBUTE_3":"380", "ATTRIBUTE_4":"FALSE"} |
| 2023-03-16 15:00:00 | 23456 | { "ATTRIBUTE_1": "28", "ATTRIBUTE_2":"blue", "ATTRIBUTE_3":"823", "ATTRIBUTE_4":"TRUE"} |
| 2023-03-16 15:00:00 | 34567 | { "ATTRIBUTE_1": "234", "ATTRIBUTE_2":"blue", "ATTRIBUTE_3":"384", "ATTRIBUTE_4":"TRUE"} |
| 2023-03-16 15:00:00 | 45678 | { "ATTRIBUTE_1": "245", "ATTRIBUTE_2":"red", "ATTRIBUTE_3":"349", "ATTRIBUTE_4":"TRUE"} |
| 2023-03-16 15:00:00 | 56789 | { "ATTRIBUTE_1": "1938", "ATTRIBUTE_2":"red", "ATTRIBUTE_3":"813", "ATTRIBUTE_4":"FALSE"} |
Eine Synchronisierung wird durchgeführt und Braze hält fest, dass Sie alle verfügbaren Daten bis zum Zeitpunkt „2023-03-16 15:00:00“ synchronisiert haben. Am Morgen des 2. Tages wird dann ein ETL ausgeführt und einige Felder in Ihrer Nutzertabelle werden aktualisiert (mit * gekennzeichnet):
| external_id | attribute_1 | attribute_2 | attribute_3 | attribute_4 |
|---|---|---|---|---|
| 12345 | 145* | red* | 380 | TRUE* |
| 23456 | 15* | blue | 823 | TRUE |
| 34567 | 234 | blue | 495* | FALSE* |
| 45678 | 245 | green* | 349 | TRUE |
| 56789 | 1938 | red | 693* | FALSE |
Jetzt müssen Sie nur noch die geänderten Werte in die CDI-Quelltabelle einfügen. Diese Zeilen können angehängt werden, anstatt die alten Zeilen zu aktualisieren. Die Tabelle sieht nun wie folgt aus:
| UPDATED_AT | EXTERNAL_ID | PAYLOAD |
|---|---|---|
| 2023-03-16 15:00:00 | 12345 | { "ATTRIBUTE_1": "823", "ATTRIBUTE_2":"blue", "ATTRIBUTE_3":"380", "ATTRIBUTE_4":"FALSE"} |
| 2023-03-16 15:00:00 | 23456 | { "ATTRIBUTE_1": "28", "ATTRIBUTE_2":"blue", "ATTRIBUTE_3":"823", "ATTRIBUTE_4":"TRUE"} |
| 2023-03-16 15:00:00 | 34567 | { "ATTRIBUTE_1": "234", "ATTRIBUTE_2":"blue", "ATTRIBUTE_3":"384", "ATTRIBUTE_4":"TRUE"} |
| 2023-03-16 15:00:00 | 45678 | { "ATTRIBUTE_1": "245", "ATTRIBUTE_2":"red", "ATTRIBUTE_3":"349", "ATTRIBUTE_4":"TRUE"} |
| 2023-03-16 15:00:00 | 56789 | { "ATTRIBUTE_1": "1938", "ATTRIBUTE_2":"red", "ATTRIBUTE_3":"813", "ATTRIBUTE_4":"FALSE"} |
| 2023-03-17 09:30:00 | 12345 | { "ATTRIBUTE_1": "145", "ATTRIBUTE_2":"red", "ATTRIBUTE_4":"TRUE"} |
| 2023-03-17 09:30:00 | 23456 | { "ATTRIBUTE_1": "15"} |
| 2023-03-17 09:30:00 | 34567 | { "ATTRIBUTE_3":"495", "ATTRIBUTE_4":"FALSE"} |
| 2023-03-17 09:30:00 | 45678 | { "ATTRIBUTE_2":"green"} |
| 2023-03-17 09:30:00 | 56789 | { "ATTRIBUTE_3":"693"} |
CDI synchronisiert nur die neuen Zeilen. Bei der nächsten Synchronisierung werden also nur die letzten fünf Zeilen synchronisiert.
Zusätzliche Tipps
Nur neue oder aktualisierte Attribute schreiben, um den Verbrauch zu minimieren
Bei jeder Synchronisierung sucht Braze nach Zeilen, die noch nicht synchronisiert wurden. Dazu prüfen wir die Spalte UPDATED_AT in Ihrer Tabelle oder Ansicht. Braze wählt alle Zeilen aus, deren UPDATED_AT nach dem zuletzt synchronisierten UPDATED_AT-Wert liegt, und importiert sie. Dabei spielt es keine Rolle, ob sie mit den aktuellen Werten im Nutzerprofil übereinstimmen. Zeilen mit dem Grenz-Zeitstempel werden unter Umständen erneut synchronisiert, wenn neue Zeilen denselben Zeitstempel haben. Wir empfehlen daher, nur Attribute zu synchronisieren, die Sie hinzufügen oder aktualisieren möchten.
Die Datenpunkt-Nutzung ist bei CDI identisch mit anderen Methoden der Datenaufnahme wie REST APIs oder SDKs. Sie sind also selbst dafür verantwortlich, nur neue oder aktualisierte Attribute in Ihre Quelltabellen zu schreiben.
EXTERNAL_ID von der Spalte PAYLOAD trennen
Das Objekt PAYLOAD sollte keine externe ID und keinen anderen ID-Typ enthalten.
Ein Attribut entfernen
In einer PAYLOAD-Spalte können Sie ein Attribut auf null setzen, wenn Sie es aus dem Profil von Nutzer:innen weglassen möchten. Wenn ein Attribut unverändert bleiben soll, senden Sie es erst an Braze, wenn es aktualisiert wurde. Um ein Attribut vollständig zu entfernen, verwenden Sie TO_JSON(OBJECT_CONSTRUCT_KEEP_NULL(...)).
Inkrementelle Updates durchführen
Aktualisieren Sie Ihre Daten inkrementell, um unbeabsichtigtes Überschreiben bei gleichzeitigen Updates zu vermeiden.

- Updates verschiedener Attribute: In den allermeisten Fällen haben zwei Updates, die nicht dieselben Attribute eines Nutzers oder einer Nutzerin betreffen, völlig unabhängige Ergebnisse. Wenn Sie zum Beispiel das Attribut
Colorund separat das AttributSizeaktualisieren, sollten beide Updates korrekt angewendet werden, selbst wenn sie innerhalb weniger Sekunden erfolgen. - Updates desselben Attributs: Race-Conditions können auftreten, wenn mehrere Updates innerhalb eines einzigen Synchronisierungslaufs dasselbe Attribut betreffen. In diesen seltenen Fällen kann ein Update ein anderes überschreiben. Am besten verhindern Sie dieses Verhalten, indem Sie sicherstellen, dass die Quelldaten Ihrer CDI-Synchronisierung nur den neuesten Stand jedes Nutzers bzw. jeder Nutzerin widerspiegeln oder dass alle Updates für eine bestimmte Nutzer:in oder eine Kombination aus Nutzer:in und Attribut in einer einzigen Zeile enthalten sind.
- Objekt-Array-Operatoren: Die einzigen Ausnahmen von unabhängigen Updates sind die Operatoren
$add,$removeund$updatefür Objekt-Arrays, bei denen sich Updates desselben Arrays gegenseitig beeinflussen können. - Events: Race-Conditions wirken sich nicht auf Events aus, da jedes Event eindeutig ist und einen zugehörigen Zeitstempel hat.
Am besten verhindern Sie dieses Verhalten, indem Sie sicherstellen, dass die Quelldaten Ihrer CDI-Synchronisierung nur den neuesten Stand jedes Nutzers bzw. jeder Nutzerin widerspiegeln oder dass alle Updates für eine bestimmte Nutzer:in oder eine Kombination aus Nutzer:in und Attribut in einer einzigen Zeile enthalten sind.
Einen JSON-String aus einer anderen Tabelle erstellen
Wenn Sie eine PAYLOAD-Spalte verwenden und jedes Attribut intern in einer eigenen Spalte speichern, konvertieren Sie diese Spalten in einen JSON-String, um PAYLOAD zu befüllen. Um separate Spalten ohne JSON-String zu synchronisieren, verwenden Sie stattdessen die Option Visual oder SQL. Weitere Informationen finden Sie unter Option für die Datendefinition auswählen.
Jede Quellseite enthält ein ausgearbeitetes Beispiel im SQL-Dialekt des jeweiligen Data Warehouse:
Zum Beispiel in Snowflake:
CREATE TABLE "EXAMPLE_USER_DATA"
(attribute_1 string,
attribute_2 string,
attribute_3 number,
my_user_id string);
SELECT
CURRENT_TIMESTAMP as UPDATED_AT,
my_user_id as EXTERNAL_ID,
TO_JSON(
OBJECT_CONSTRUCT (
'attribute_1',
attribute_1,
'attribute_2',
attribute_2,
'yet_another_attribute',
attribute_3)
)as PAYLOAD FROM "EXAMPLE_USER_DATA";
Den Zeitstempel UPDATED_AT verwenden
Braze verwendet den Zeitstempel UPDATED_AT, um nachzuverfolgen, welche Daten erfolgreich synchronisiert wurden. CDI erfasst außerdem die Anzahl der Zeilen beim zuletzt synchronisierten Zeitstempel. Werden zwischen zwei Läufen neue Zeilen mit demselben Zeitstempel hinzugefügt, synchronisiert CDI alle Zeilen mit diesem Zeitstempel erneut, was zu doppelten Daten führen kann. Weitere Details und Tipps finden Sie unter Erneute Synchronisierung von Zeilen mit doppelten Zeitstempeln vermeiden.
Tabellenkonfiguration
Wir haben ein öffentliches GitHub-Repository, in dem Kund:innen Best Practices oder Code-Snippets teilen können. Um eigene Snippets beizutragen, erstellen Sie einen Pull-Request!
Datenformatierung
Die Anforderungen an die Tabelleneinrichtung und an die Payload-Formatierung für Cloud Data Ingestion sind unter Tabelleneinrichtung für Cloud Data Ingestion dokumentiert.
Auf dieser Seite können Sie folgende Punkte unterscheiden:
- Anforderungen an die Quelltabelle (erforderliche Spalten, Bezeichner-Spalten und Verhalten von
UPDATED_AT) - Anforderungen an die Payload (welche Felder für jeden Datentyp dem Objektformat von
/users/trackentsprechen müssen)
Timeouts bei Data-Warehouse-Abfragen vermeiden
Wir empfehlen, dass Abfragen innerhalb einer Stunde abgeschlossen werden, um eine optimale Performance zu erzielen und mögliche Fehler zu vermeiden. Wenn Abfragen diesen Zeitrahmen überschreiten, sollten Sie die Konfiguration Ihres Data Warehouse überprüfen. Eine Optimierung der Ressourcen, die Ihrem Warehouse zugewiesen sind, kann die Ausführungsgeschwindigkeit von Abfragen verbessern.
Produktbeschränkungen
| Beschränkung | Beschreibung |
|---|---|
| Anzahl der Integrationen | Die Anzahl der Integrationen, die Sie einrichten können, ist unbegrenzt. |
| Anzahl der Zeilen | Standardmäßig kann jeder Lauf bis zu 500 Millionen Zeilen synchronisieren. Braze stoppt alle Synchronisierungen mit mehr als 500 Millionen neuen Zeilen. Wenn Sie ein höheres Limit benötigen, wenden Sie sich an Ihre:n Braze Customer-Success-Manager:in oder den Braze-Support. |
| Attribute pro Zeile | Bei Synchronisierungen mit einer PAYLOAD-Spalte sollte jede Zeile eine einzelne Nutzer-ID und ein JSON-Objekt mit bis zu 250 Attributen enthalten. Jeder Schlüssel im JSON-Objekt zählt als ein Attribut (das heißt, ein Array zählt als ein Attribut). |
| Payload-Größe | Bei Synchronisierungen mit einer PAYLOAD-Spalte kann jede Zeile eine Payload von bis zu 1 MB enthalten. Braze lehnt Payloads ab, die größer als 1 MB sind, und protokolliert den Fehler „Payload was greater than 1MB“ zusammen mit der zugehörigen externen ID und der gekürzten Payload im Synchronisierungsprotokoll. |
| Datentyp | Über Cloud Data Ingestion können Sie Nutzerattribute, angepasste Events, Kauf-Events, Katalogartikel, Anfragen zur Löschung von Nutzer:innen und Canvas-Trigger synchronisieren. |
| Braze-Region | Dieses Produkt ist in allen Braze-Regionen verfügbar. Jede Braze-Region kann sich mit jeder Region der Quelldaten verbinden. |
| Quellregion | Braze verbindet sich mit Ihrem Data Warehouse oder Ihrer Cloud-Umgebung in jeder Region und bei jedem Cloud-Anbieter. |