Ροή δεδομένων
Η Ροή δεδομένων προωθεί συμβάντα από το Joryio σε εξωτερικούς προορισμούς σχεδόν σε πραγματικό χρόνο. Κάθε stream συνδέει έναν προορισμό με ένα σύνολο συμβάντων και το Joryio παραδίδει τα συμβάντα που ταιριάζουν σε παρτίδες στον προορισμό.
Μεταβείτε στο Data → Data Streaming για να διαχειριστείτε τα streams σας.
Προορισμοί
| Προορισμός | Τύπος | Τι κάνει |
|---|---|---|
| Webhook | HTTP endpoint | POST κάθε συμβάν ως JSON σε οποιοδήποτε HTTPS URL |
| Snowflake | Data warehouse | Συνεχής φόρτωση συμβάντων σε πίνακα Snowflake |
| BigQuery | Data warehouse | Ροή συμβάντων σε dataset BigQuery |
| Amazon Redshift | Data warehouse | Φόρτωση συμβάντων σε cluster Amazon Redshift |
| Amazon S3 | Object storage | Εγγραφή ομαδοποιημένων αρχείων JSON / NDJSON σε bucket |
| Kafka | Event stream | Παραγωγή συμβάντων σε topic Kafka |
| Mixpanel | Product analytics | Προώθηση συμβάντων σε έργο Mixpanel |
| Amplitude | Product analytics | Προώθηση συμβάντων σε έργο Amplitude |
Πεδία σύνδεσης
Κάθε προορισμός ζητά τα δικά του στοιχεία σύνδεσης. Τα μυστικά (κωδικοί, κλειδιά, tokens, service-account JSON, τιμές headers του webhook) κρυπτογραφούνται σε κατάσταση ηρεμίας και δεν εμφανίζονται ποτέ ξανά - δείτε Διαπιστευτήρια ελάχιστων δικαιωμάτων.
- Webhook - URL, signing Secret (προαιρετικό), πρόσθετα Headers (προαιρετικά, ένα αντικείμενο JSON όπως
{"Authorization": "Bearer <token>"}· οι τιμές αντιμετωπίζονται ως μυστικά) - Snowflake - Account, Username, Password, Role (προαιρετικό - ο ρόλος με τον οποίο εκτελούνται οι εντολές· κενό σημαίνει τον προεπιλεγμένο ρόλο του χρήστη), Warehouse, Database, Schema, Table
- BigQuery - Project ID, Dataset ID, Table ID, Service Account JSON
- Amazon Redshift - Host, Port, Database, User, Password, Schema, Table
- Amazon S3 - Bucket, Prefix, Region, Endpoint (προαιρετικό, για S3-compatible storage), Access Key ID, Secret Access Key
- Kafka - Brokers, Topic, SASL Username/Password, SSL
- Mixpanel - Project Token, Region (US / EU / India)
- Amplitude - API Key, Region (US / EU)
Διαπιστευτήρια ελάχιστων δικαιωμάτων
Δώστε σε κάθε stream το δικό του διαπιστευτήριο, που μπορεί να κάνει μόνο ένα πράγμα: να γράφει στον έναν πίνακα, στη μία διαδρομή bucket ή στο ένα topic όπου παραδίδει το stream. Αν το διαπιστευτήριο διαρρεύσει ποτέ, αυτό είναι το μόνο που μπορεί να κάνει - δεν μπορεί να διαβάσει τα δεδομένα σας ούτε να αγγίξει τίποτε άλλο. Τα παραδείγματα παρακάτω χρησιμοποιούν ενδεικτικά ονόματα (example-bucket, analytics.joryio_events, joryio-events)· αντικαταστήστε τα με τα δικά σας.
Πώς το Joryio χειρίζεται τα αποθηκευμένα διαπιστευτήρια
- Κρυπτογραφημένα. Κωδικοί, κλειδιά, tokens, service-account JSON και τιμές headers του webhook κρυπτογραφούνται πριν αποθηκευτούν.
- Δεν εμφανίζονται ποτέ ξανά. Ο επεξεργαστής και το API δείχνουν ένα αποθηκευμένο μυστικό ως
********. Κανείς - ούτε εσείς ούτε το προσωπικό του Joryio - δεν μπορεί να το διαβάσει ξανά στο dashboard ή στο API. - Διατηρούνται όταν επεξεργάζεστε άλλα πεδία. Ένα πεδίο μυστικού που αφήνετε κενό (ή ως
********) κρατά την αποθηκευμένη τιμή· μόνο μια τιμή που πληκτρολογείτε την αντικαθιστά. Η μετονομασία ενός stream ή η αλλαγή των συμβάντων του δεν αγγίζει ποτέ τα διαπιστευτήριά του. - Διαγράφονται μαζί με το stream. Η διαγραφή ενός stream διαγράφει τα αποθηκευμένα διαπιστευτήριά του. Όταν διαγράφεται ο λογαριασμός, διαγράφονται οριστικά μαζί με τα υπόλοιπα δεδομένα του λογαριασμού.
Όταν διαγράφετε ένα stream, ανακαλέστε ή αλλάξτε επίσης το διαπιστευτήριό του στον προορισμό: το Joryio δεν το έχει πλέον, αλλά το ίδιο το κλειδί παραμένει έγκυρο μέχρι να το ανακαλέσετε.
Και τα headers του webhook είναι μυστικά. Εισαγάγετέ τα ως αντικείμενο JSON, για παράδειγμα {"Authorization": "Bearer <token>"}. Τα ονόματα των headers παραμένουν ορατά· κάθε τιμή κρυπτογραφείται και εμφανίζεται ως ********. Όταν επεξεργάζεστε το stream, αφήστε το ******** για να κρατήσετε μια τιμή, πληκτρολογήστε νέα τιμή για να την αντικαταστήσετε ή αφαιρέστε ένα header για να το διαγράψετε. Χρησιμοποιήστε ένα token που εκδόθηκε μόνο για το Joryio, ώστε να μπορείτε να το ανακαλέσετε χωρίς να επηρεάσετε τίποτε άλλο.
Amazon S3
Δημιουργήστε έναν χρήστη IAM (ή ρόλο) για το Joryio με μόνη άδεια το s3:PutObject στο bucket και στο prefix του stream και χρησιμοποιήστε το access key του στο stream. Το Joryio γράφει αντικείμενα κάτω από το <prefix>/<date>/, οπότε με prefix joryio-events:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "JoryioWriteEvents",
"Effect": "Allow",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::example-bucket/joryio-events/*"
}
]
}
Το Test connection ελέγχει ότι το bucket υπάρχει, κάτι που το AWS επιτρέπει μόνο με s3:ListBucket στο bucket. Αυτή η άδεια επιτρέπει στο κλειδί να βλέπει τα ονόματα των αντικειμένων στο bucket, οπότε είναι προαιρετική: χωρίς αυτήν η παράδοση λειτουργεί και μόνο ο έλεγχος αναφέρει αποτυχία. Για να επιτρέψετε τον έλεγχο, προσθέστε αυτή τη δήλωση:
{
"Sid": "JoryioTestConnection",
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::example-bucket"
}
Για S3-compatible storage, δημιουργήστε ένα token περιορισμένο στο ένα bucket με δικαίωμα μόνο εγγραφής αντικειμένων.
Amazon Redshift
Δημιουργήστε έναν αποκλειστικό χρήστη βάσης δεδομένων που μπορεί μόνο να εισάγει γραμμές στον πίνακα του stream:
CREATE USER joryio_loader PASSWORD '<strong-password>';
GRANT USAGE ON SCHEMA analytics TO joryio_loader;
GRANT INSERT ON TABLE analytics.joryio_events TO joryio_loader;
Εισαγάγετε joryio_loader στο πεδίο User του stream.
Snowflake
Δημιουργήστε έναν ρόλο που μπορεί μόνο να εισάγει γραμμές στον πίνακα του stream (συν το USAGE που χρειάζεται το Snowflake για να φτάσει σε αυτόν) και έναν χρήστη με αυτόν τον ρόλο:
CREATE ROLE JORYIO_WRITER;
GRANT USAGE ON WAREHOUSE LOAD_WH TO ROLE JORYIO_WRITER;
GRANT USAGE ON DATABASE ANALYTICS TO ROLE JORYIO_WRITER;
GRANT USAGE ON SCHEMA ANALYTICS.EVENTS TO ROLE JORYIO_WRITER;
GRANT INSERT ON TABLE ANALYTICS.EVENTS.JORYIO_EVENTS TO ROLE JORYIO_WRITER;
CREATE USER JORYIO_LOADER PASSWORD = '<strong-password>'
DEFAULT_ROLE = JORYIO_WRITER DEFAULT_WAREHOUSE = LOAD_WH;
GRANT ROLE JORYIO_WRITER TO USER JORYIO_LOADER;
Εισαγάγετε JORYIO_LOADER στο Username και JORYIO_WRITER στο Role. Το Role είναι προαιρετικό: όταν έχει τιμή, το Joryio εκτελεί κάθε εντολή με αυτόν τον ρόλο· όταν είναι κενό, ισχύει ο προεπιλεγμένος ρόλος του χρήστη.
BigQuery
Δημιουργήστε ένα service account για το Joryio και δώστε του BigQuery Data Editor (roles/bigquery.dataEditor) μόνο στο dataset του stream - στις ρυθμίσεις κοινής χρήσης του dataset, όχι στο project. Στη συνέχεια δημιουργήστε ένα κλειδί JSON και επικολλήστε το στο Service Account JSON.
Το Joryio στέλνει γραμμές με το insert API του BigQuery και διαβάζει τα μεταδεδομένα του πίνακα για τον έλεγχο σύνδεσης· κανένα από τα δύο δεν εκτελεί query job, οπότε το BigQuery Job User δεν χρειάζεται. Το Data Editor σε ένα dataset μπορεί να αλλάξει και άλλους πίνακες σε αυτό, οπότε κρατήστε τον πίνακα του stream σε δικό του dataset ή δώστε έναν προσαρμοσμένο ρόλο μόνο με bigquery.tables.get και bigquery.tables.updateData στον πίνακα.
Kafka
Δημιουργήστε έναν χρήστη SASL για το Joryio (το Joryio πιστοποιείται με SASL/PLAIN) και επιτρέψτε του μόνο WRITE και DESCRIBE στο topic του stream. Δημιουργήστε το topic εσείς εκ των προτέρων - το Joryio δεν χρειάζεται άδεια δημιουργίας topics.
kafka-acls --bootstrap-server <broker:port> --command-config admin.properties \
--add --allow-principal User:joryio \
--operation Write --operation Describe \
--topic joryio-events
Mixpanel, Amplitude και webhooks
- Mixpanel - το Project Token μπορεί μόνο να στέλνει συμβάντα στο project του· δεν μπορεί να διαβάσει δεδομένα. Χρησιμοποιήστε το token του project που πρέπει να τροφοδοτεί το stream.
- Amplitude - το API Key είναι το κλειδί εισαγωγής ενός project. Χρησιμοποιήστε το project που πρέπει να τροφοδοτεί το stream.
- Webhook - χρησιμοποιήστε signing secret και token
Authorizationπου εκδόθηκαν μόνο για το Joryio και δεχτείτε μόνο ό,τι στέλνει το stream.
Δημιουργία Stream
- Μεταβείτε στο Data → Data Streaming και επιλέξτε Create Stream.
- Δώστε όνομα στο stream (εμφανίζεται στη λίστα streams) και επιλέξτε προορισμό.
- Συμπληρώστε τα πεδία σύνδεσης του προορισμού.
- Επιλέξτε τη μορφή payload - JSON (ένα αντικείμενο ανά συμβάν) ή NDJSON (μία γραμμή, ένα συμβάν ανά γραμμή).
- Επιλέξτε ποια συμβάντα θα μεταδίδονται (δείτε παρακάτω).
- Ελέγξτε τη γραμμή σύνοψης και επιλέξτε Create Stream.
Επιλογή συμβάντων
Ελέγχετε ακριβώς ποια συμβάντα λαμβάνει ένα stream:
- All events - ενεργοποιήστε το για να μεταδίδεται κάθε τρέχον και μελλοντικό συμβάν. Απενεργοποιήστε το για να επιλέξετε συγκεκριμένα συμβάντα.
- Μηνύματα, ανά κανάλι - τα συμβάντα μηνυμάτων επιλέγονται ανά κανάλι (βλ. Επιλογή ανά κανάλι).
- Άλλες ομάδες - In-App, Journeys, Campaigns, Wallet Passes, E-Commerce και Identity. Επιλέξτε μια ολόκληρη ομάδα ή μεμονωμένα συμβάντα.
- Προσαρμοσμένα συμβάντα - στο Custom Event, αναζητήστε ή πληκτρολογήστε δικά σας συμβάντα (αυτά που στέλνετε με
track(), όπωςpurchaseήpage_view). Η λίστα δείχνει τα συμβάντα που έχει πράγματι καταγράψει ο χώρος εργασίας σας· μπορείτε επίσης να πληκτρολογήσετε ένα συμβάν που δεν έχει καταγραφεί ακόμη και να πατήσετε Add.
Επιλογή ανά κανάλι
Ο επεξεργαστής δείχνει μια ενότητα για κάθε κανάλι - Email, SMS, WhatsApp, Push, Viber και Webhook - με μόνο τα συμβάντα που υπάρχουν σε αυτό το κανάλι (δεν υπάρχει "άνοιγμα SMS"). Μέσα σε κάθε ενότητα τα συμβάντα ομαδοποιούνται:
| Ομάδα | Επιλογές |
|---|---|
| Αλληλεπίδραση | Αποστολή, Παράδοση, Άνοιγμα (email), Ανάγνωση (WhatsApp), Κλικ |
| Προβλήματα | Επιστροφή, Σήμανση ως spam, Αποτυχία, Δεν στάλθηκε, Αναβολή, Αυτόματη απάντηση (email) |
| Συναίνεση | Διαγραφή, Εγγραφή |
| Εισερχόμενα | Εισερχόμενο (SMS, WhatsApp, Viber) |
Κάθε ενότητα έχει το δικό της πλαίσιο επιλογής όλων, και το Επιλογή όλων σε κάθε κανάλι επιλέγει τα πάντα με μία κίνηση. Δίπλα σε κάθε επιλογή εμφανίζεται ο εκτιμώμενος μηνιαίος όγκος - πόσα τέτοια συμβάντα κατέγραψε ο χώρος εργασίας σας τις τελευταίες 30 ημέρες - ώστε να βλέπετε πριν την αποθήκευση τι θα κοστίσει η επιλογή στον προορισμό σας.
Η Αποστολή, η Παράδοση και το Άνοιγμα σημειώνονται ως Υψηλός όγκος: το καθένα είναι μία γραμμή ανά μήνυμα. Ένα νέο stream ξεκινά με όλες τις άλλες επιλογές ενεργές και αυτές τις τρεις να τις προσθέσετε εσείς.
Η μορφή των δεδομένων δεν αλλάζει. Η επιλογή Παράδοση στο SMS μεταδίδει το κανονικό συμβάν message.delivered με ιδιότητα channel ίση με sms - το ίδιο όνομα και τις ίδιες τιμές που χρησιμοποιούν η αποθήκη συμβάντων, το REST API και οι ενσωματώσεις webhook. Τα εισερχόμενα μηνύματα κρατούν τα δικά τους ονόματα: sms.message.received, whatsapp.message.received και viber.message.received.
Ένα stream που δημιουργήθηκε μέσω του API μπορεί ακόμη να επιλέγει συμβάν μηνύματος με το όνομά του ("events": ["message.delivered"], προαιρετικά περιορισμένο με "channels"). Αυτό συνεχίζει να λειτουργεί, και ο επεξεργαστής το δείχνει ως το ίδιο συμβάν επιλεγμένο σε κάθε κανάλι που καλύπτει.
Αλλαγή κατάστασης εγγραφής
Η ενότητα Εγγραφές έχει μία επιλογή, Αλλαγή κατάστασης εγγραφής: κάθε εγγραφή και διαγραφή σε κάθε κανάλι και λίστα. Μεταδίδει τα δύο συμβάντα συναίνεσης που ήδη καταγράφει η Joryio, ώστε τίποτα να μη μετρηθεί δύο φορές:
message.subscribed- ένα άτομο εγγράφηκε σε κανάλι ή λίστα. ΤαstatusκαιpreviousStatusδίνουν την αλλαγή, τοscopeείναιchannelήlist(μεlistId) και τοsourceλέει πώς έγινε (api,dashboard,preference_center,double_opt_in,keyword, εγγραφή από κατάστημα ή φόρμα κ.λπ.).message.unsubscribed- ένα άτομο διαγράφηκε. Τοscopeείναιchannel,listήglobal, τοreasonλέει πώς έφτασε (link,keyword, ...) και τοunsubscribeSourceονομάζει τον ακριβή δρόμο (το κουμπί διαγραφής της εφαρμογής email, το κουμπί της σελίδας, το κέντρο προτιμήσεων, μια απάντηση STOP).
Οι επιστροφές και οι αναφορές spam είναι ξεχωριστά συμβάντα (message.bounced, message.spamreport). Οι εισαγωγές επαφών, οι συγχρονισμοί από αποθήκη δεδομένων και οι αρχικοί συγχρονισμοί καταστημάτων γράφουν τη συναίνεση μαζικά και δεν παράγουν αυτά τα συμβάντα.
Αναφορές παράδοσης
Οι αναφορές παράδοσης, οι επιστροφές, οι αναφορές spam, οι διαγραφές και τα μηνύματα που η Joryio δεν έστειλε είναι αναφορές παράδοσης (receipts). Τις επιλέγετε όπως κάθε άλλο συμβάν μηνύματος και φτάνουν ως τα εξής συμβάντα:
| Συμβάν | Κανάλια | Βασικές ιδιότητες |
|---|---|---|
message.delivered | Email, SMS, Viber, Push, WhatsApp | messageId, campaignId, canvasId |
message.bounced | bounceType (hard ή soft), bounceSubType, dsnStatus, reason | |
message.spamreport | messageId, campaignId | |
message.failed | Όλα τα κανάλια | errorCode, errorReason |
message.skipped | Όλα τα κανάλια | reason - γιατί η Joryio δεν το έστειλε (αποκλεισμός, όριο συχνότητας, συναίνεση, ώρες ησυχίας) |
message.deferred | ο πάροχος ξαναδοκιμάζει μετά από προσωρινή αποτυχία | |
message.auto_replied | αυτόματη απάντηση απουσίας - το email παραδόθηκε | |
message.unsubscribed | Όλα τα κανάλια | βλ. Αλλαγή κατάστασης εγγραφής |
message.opened (κανάλι whatsapp) | η επιβεβαίωση ανάγνωσης | |
sms.message.received, whatsapp.message.received, viber.message.received | SMS, WhatsApp, Viber | εισερχόμενη απάντηση· σε SMS και Viber, το keyword είναι stop, start ή help όταν η απάντηση ήταν λέξη-κλειδί συμμόρφωσης |
Οι αναφορές παράδοσης φτάνουν μόνο στη Ροή δεδομένων. Δεν ξεκινούν ποτέ journey ούτε ενεργοποιούν καμπάνια, ακριβώς όπως πριν.
Ένα stream που αποθηκεύτηκε πριν υπάρξουν οι αναφορές παράδοσης μπορεί ήδη να επιλέγει κάποιες (π.χ. message.bounced). Αυτές δεν έφτασαν ποτέ και δεν αρχίζουν να φτάνουν από μόνες τους: το stream δείχνει Οι αναφορές παράδοσης είναι πλέον διαθέσιμες, και αρχίζουν να ρέουν μόλις αποθηκεύσετε ξανά το stream. Τα νέα streams λαμβάνουν αναφορές από την αρχή.
Τι περιέχει ένα συμβάν μηνύματος
- Κάθε συμβάν φέρει το αναγνωριστικό Joryio της επαφής (
userId), και τα συμβάντα μηνυμάτων φέρουν επίσης τοexternalIdτης επαφής όταν υπάρχει. - Οι διευθύνσεις email και οι αριθμοί τηλεφώνου περιλαμβάνονται μόνο όταν όποιος αποθήκευσε τελευταίος το stream έχει την άδεια
pii:view(οι admins και owners την έχουν πάντα). Διαφορετικά αφαιρούνται. Η νέα αποθήκευση εφαρμόζει τον κανόνα για όποιον αποθηκεύει. - Το περιεχόμενο του μηνύματος (σώμα, τίτλος, HTML) δεν περιλαμβάνεται ποτέ σε αναφορά παράδοσης.
- Τα ανοίγματα και κλικ που μοιάζουν αυτοματοποιημένα (σαρωτές ασφαλείας, διακομιστές ιδιωτικότητας email) δεν απορρίπτονται· φέρουν
$is_bot: true, ώστε να αποφασίζετε εσείς.
Άλλες ομάδες συμβάντων
| Ομάδα | Συμβάντα |
|---|---|
| In-App | in_app.displayed, in_app.clicked, in_app.dismissed, in_app.converted |
| Journeys | canvas.experiment.entered, canvas.ai_decision.entered, canvas.step.entered, canvas.step.left |
| Campaigns | campaign.sent, campaign.abtest.winner_declared, campaign.ai_decision.entered |
| Wallet Passes | pass.issued, pass.installed, pass.updated, pass.update_pushed, pass.removed, pass.voided, pass.expired, pass.scanned |
| E-Commerce | Order Completed, Order Refunded, Order Cancelled |
| Identity | $identify, $alias |
Μπορείτε επίσης να μεταδώσετε οποιοδήποτε προσαρμοσμένο συμβάν στέλνετε με track().
Ομαδοποίηση
Τα συμβάντα αποθηκεύονται προσωρινά και παραδίδονται σε παρτίδες. Ορίζετε:
- Μέγεθος παρτίδας - πόσα συμβάντα συσσωρεύονται πριν από αποστολή.
- Διάστημα αποστολής - τον μέγιστο χρόνο αναμονής πριν από την αποστολή μερικής παρτίδας.
Μια παρτίδα παραδίδεται όταν φτάσει το μέγεθος παρτίδας ή λήξει το διάστημα αποστολής, όποιο συμβεί πρώτο.
Πώς λειτουργεί
Τα συμβάντα παραδίδονται σε streams μέσω ενός ανθεκτικού fan-out bus που είναι αποσυνδεδεμένο από την αποθήκευση analytics. Κάθε stream βλέπει την πλήρη ροή συμβάντων σε όλα τα κανάλια, επομένως ένας προορισμός συνεχίζει να λαμβάνει συμβάντα ανεξάρτητα από τον τρόπο εγγραφής των analytics.
Όταν ένα συμβάν ταιριάζει με την επιλογή συμβάντων ενός stream, μπαίνει σε ουρά και παραδίδεται στον προορισμό στην επόμενη παρτίδα. Κάθε παράδοση περιλαμβάνει το όνομα συμβάντος, τις ιδιότητες, timestamp και αναγνωριστικό χρήστη - και, για συμβάντα messaging, το κανάλι προέλευσης channel. Οι προορισμοί warehouse και storage φορτώνουν την παρτίδα ως γραμμές/αρχεία· οι προορισμοί product analytics προωθούν κάθε συμβάν μέσω του ingestion API τους· τα webhooks λαμβάνουν σώμα JSON (ή NDJSON).
Κάθε stream ομαδοποιεί (με βάση μέγεθος παρτίδας και διάστημα αποστολής) και επαναλαμβάνει την προσπάθεια σε αποτυχία. Αν ένας προορισμός δεν είναι προσβάσιμος, τα μη παραδοθέντα συμβάντα επανεισάγονται στην ουρά και παραδίδονται ξανά μόλις ανακάμψει, ώστε μια διακοπή να μην χάνει τα δεδομένα σας.
Εγγυήσεις παράδοσης και διπλότυπα
Η παράδοση είναι τουλάχιστον μία φορά (at-least-once). Σε σπάνιες περιπτώσεις - μια επανάληψη μετά από σφάλμα δικτύου, ή επανεκκίνηση εργάτη στη μέση μιας παρτίδας - το ίδιο συμβάν μπορεί να παραδοθεί στον προορισμό σας περισσότερες από μία φορές.
Αυτό είναι σκόπιμο και είναι η ίδια εγγύηση που προσφέρει κάθε πλατφόρμα streaming. Η εναλλακτική, το πολύ μία φορά, θα σήμαινε σιωπηλή απώλεια ενός συμβάντος όταν το αποτέλεσμα της παράδοσης είναι άγνωστο· προτιμούμε να το στείλουμε δύο φορές παρά να το χάσουμε.
Κάθε συμβάν φέρει σταθερό eventId. Είναι η ίδια τιμή σε κάθε παράδοση του συμβάντος, οπότε μπορείτε να τη χρησιμοποιήσετε για απαλοιφή διπλότυπων:
| Προορισμός | Τι κάνουμε |
|---|---|
| Amplitude | στέλνεται ως insert_id - το Amplitude απαλείφει διπλότυπα αυτόματα |
| Mixpanel | στέλνεται ως $insert_id - το Mixpanel απαλείφει διπλότυπα αυτόματα |
| S3 | μια παρτίδα που ξαναπαραδίδεται γράφεται στο ίδιο κλειδί αντικειμένου, αντικαθιστώντας αντί να προσθέτει δεύτερο αρχείο |
| BigQuery, Snowflake, Redshift | απαλείψτε διπλότυπα με βάση το eventId κατά τη φόρτωση, π.χ. ROW_NUMBER() OVER (PARTITION BY eventId) |
| Webhook | αγνοήστε ένα eventId που έχετε ήδη επεξεργαστεί |
Για αποθήκες δεδομένων και αποθήκευση, τα διπλότυπα είναι ακίνδυνα εφόσον τα απαλείφετε κατά τη φόρτωση. Για webhooks που εκτελούν ενέργεια σε κάθε συμβάν - δημιουργία αιτήματος, χρέωση - ελέγξτε το eventId πριν ενεργήσετε.
Παρακολούθηση
Η λίστα streams εμφανίζει KPI και κατάσταση ανά stream:
- Active - κανονική παράδοση
- Paused - προσωρινά διακοπεί (μπορείτε να συνεχίσετε οποιαδήποτε στιγμή)
- Error - οι πρόσφατες παραδόσεις αποτυγχάνουν (ελέγξτε τη σύνδεση)
Μπορείτε επίσης να δείτε το σύνολο παραδόσεων, το σύνολο αποτυχιών, το ποσοστό παράδοσης και την ώρα τελευταίας παράδοσης. Ανοίξτε ένα stream για να δείτε τη σελίδα λεπτομερειών του, να το επεξεργαστείτε, να το θέσετε σε παύση/συνέχιση ή να το διαγράψετε.