Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Importante
Questa funzionalità è in anteprima privata. Per provarlo, contattare il contatto di Azure Databricks.
Usa questo riferimento per implementare un event producer o scrivere query su eventi App Analytics. Definisce lo schema versione 1, la codifica del suo OpenTelemetry Protocol (OTLP) e i passaggi di elaborazione necessari prima dell'aggregazione.
Per un esempio di primo evento, vedi Inizia con App Analytics. Per la dashboard e i suoi dati aggiuntivi di accesso alle app, vedi Cos'è App Analytics?.
Schema eventi
Ogni evento è un registro di registro OpenTelemetry memorizzato nella tabella dell'app otel_logs nel Unity Catalog. Usa il nome della tabella configurata, incluso qualsiasi prefisso. La tabella contiene anche altri record di log, quindi seleziona gli eventi di analisi in base alla versione dello schema e al tipo di evento.
Esempi di payload
Seleziona un tipo di evento per vedere il suo payload. Ogni esempio è un registro OTLP, inserito resourceLogs[].scopeLogs[].logRecords[] al momento dell'esportazione. Il quickstart mostra quell'involucro delle richieste.
I documenti e l'ora di riferimento qui sotto sono esemplari. Genera un ID unico per ogni nuovo evento e usa il suo tempo effettivo di verificazione. Gli esempi omettono l'opzionale session_id.
Action
Registra un'esportazione del report completato. La proprietà opzionale format descrive l'esportazione senza cambiare il nome dell'evento.
{
"timeUnixNano": "1790164800000000000",
"eventName": "report_exported",
"attributes": [
{ "key": "databricks.app.analytics.schema.version", "value": { "intValue": "1" } },
{ "key": "databricks.app.analytics.event.id", "value": { "stringValue": "d6c34165-7f4a-467c-b671-50ae495bcb14" } },
{ "key": "databricks.app.analytics.event.type", "value": { "stringValue": "action" } },
{ "key": "databricks.app.analytics.event.name", "value": { "stringValue": "report_exported" } },
{ "key": "databricks.app.analytics.properties.format", "value": { "stringValue": "csv" } }
]
}
visualizzazione pagina
Registra una visita a /reports. Il tipo e il nome dell'evento sono entrambi page_view.
{
"timeUnixNano": "1790164800000000000",
"eventName": "page_view",
"attributes": [
{ "key": "databricks.app.analytics.schema.version", "value": { "intValue": "1" } },
{ "key": "databricks.app.analytics.event.id", "value": { "stringValue": "caafc8e3-5f19-4f22-934b-09d1f8bf8e63" } },
{ "key": "databricks.app.analytics.event.type", "value": { "stringValue": "page_view" } },
{ "key": "databricks.app.analytics.event.name", "value": { "stringValue": "page_view" } },
{ "key": "databricks.app.analytics.page.path", "value": { "stringValue": "/reports" } }
]
}
Web Vital
Registra una misura di Largest Contentful Paint (LCP) di 1.800 millisecondi. Questo valore ha una good classificazione.
{
"timeUnixNano": "1790164800000000000",
"eventName": "lcp",
"attributes": [
{ "key": "databricks.app.analytics.schema.version", "value": { "intValue": "1" } },
{ "key": "databricks.app.analytics.event.id", "value": { "stringValue": "a23eecb7-b6c1-47c8-92ab-e2856f6ac804" } },
{ "key": "databricks.app.analytics.event.type", "value": { "stringValue": "web_vital" } },
{ "key": "databricks.app.analytics.event.name", "value": { "stringValue": "lcp" } },
{ "key": "databricks.app.analytics.page.path", "value": { "stringValue": "/reports" } },
{ "key": "databricks.app.analytics.web_vital.value", "value": { "doubleValue": 1800 } },
{ "key": "databricks.app.analytics.web_vital.unit", "value": { "stringValue": "ms" } },
{ "key": "databricks.app.analytics.web_vital.delta", "value": { "doubleValue": 1800 } },
{
"key": "databricks.app.analytics.web_vital.sample_id",
"value": { "stringValue": "30990ea0-3ec1-4a93-98b9-7c9abfe0e2d8" }
},
{ "key": "databricks.app.analytics.web_vital.rating", "value": { "stringValue": "good" } }
]
}
I rapporti per la stessa misura condividono un web_vital.sample_id. Ogni nuovo rapporto ha i propri event.id. Vedi le regole Web Vital.
Campi comuni
I seguenti campi logici si applicano a tutti i tipi di eventi. I nomi degli attributi OTLP compaiono negli esempi sopra.
| Campo | Tipo | Requisito | Description |
|---|---|---|---|
schema_version |
INT |
Required | Versione contrattuale importante. Utilizzare il 1. |
event_id |
STRING |
Required | Identificatore unico a livello globale, opaco. Conservalo quando riprovi un evento. |
event_type |
STRING |
Required |
action, page_view o web_vital. |
event_name |
STRING |
Required | Un nome a bassa cardinalità all'interno del tipo di evento. |
occurred_at |
TIMESTAMP |
Required | Quando l'evento è avvenuto, non quando è stato ingerito. |
session_id |
STRING |
Optional | Un identificatore opaco per una finestra di attività di analytics. Non identifica una persona. |
page_path |
STRING |
Optional | Un percorso di app in cemento sanitizzato, come /orders/42. |
properties |
oggetto | Optional | Proprietà scalari definite dall'applicazione. |
session_id è opzionale nello schema degli eventi. Le metriche basate su sessioni utilizzano i record che le forniscono in regola. Non inventare un'identità né usare una stringa vuota per rappresentare una sessione assente.
Le stringhe richieste devono essere non vuote e non devono contenere spazi bianchi, credenziali o dati personali. Quando è presente un campo opzionale, deve conformarsi alle regole del campo. Un attributo opzionale assente si legge come nullo nello schema logico.
Tipi di evento
| Tipo di evento | Nome evento | Campi aggiuntivi |
|---|---|---|
action |
Un nome definito dall'applicazione, come report_exported. |
Le proprietà opzionali descrivono l'azione. |
page_view |
page_view |
Un'opzione page_path identifica il percorso visitato. |
web_vital |
lcp, inp, cls, fcp o ttfb |
I campi Web Vital definiti nelle regole Web Vital. |
Un'azione catturata descrive ciò che il produttore ha registrato. Ad esempio, un clic può registrare l'intento senza dimostrare che l'operazione abbia avuto successo.
Codifica OTLP e campi di tabella
Gli attributi Analytics utilizzano il databricks.app.analytics. namespace. La tabella seguente mappa i campi logici a OTLP e alla tabella di telemetria:
| Campo logico | Fonte OTLP |
otel_logs Fonte |
|---|---|---|
occurred_at |
timeUnixNano |
time |
schema_version |
databricks.app.analytics.schema.version |
attributes:["databricks.app.analytics.schema.version"] |
event_id |
databricks.app.analytics.event.id |
attributes:["databricks.app.analytics.event.id"] |
event_type |
databricks.app.analytics.event.type |
attributes:["databricks.app.analytics.event.type"] |
event_name |
databricks.app.analytics.event.name |
attributes:["databricks.app.analytics.event.name"] |
session_id |
databricks.app.analytics.session.id |
attributes:["databricks.app.analytics.session.id"] |
page_path |
databricks.app.analytics.page.path |
attributes:["databricks.app.analytics.page.path"] |
properties.<key> |
databricks.app.analytics.properties.<key> |
La chiave corrispondente in attributes. |
web_vital_<field> |
databricks.app.analytics.web_vital.<field> |
La chiave corrispondente in attributes. |
Usa le seguenti codifiche JSON OTLP:
- Timestamps: una stringa decimale di nanosecondi Unix in
timeUnixNano. - Interi: Una stringa
intValuedecimale , come{ "intValue": "1" }. - Raddoppi: Un numerico
doubleValue, come{ "doubleValue": 1.25 }. - Corde:
stringValue. - Booleani:
boolValue.
Imposta i record eventName dei log allo stesso valore dell'attributo analytics event_name . La strumentazione scope.name identifica il produttore, ma non è un selezionatore per i record di analisi.
La tabella di telemetria può mantenere un wrapper a campo singolo doubleValue per valori numerici, incluso zero. Decodifica quel wrapper prima di validare i campi numerici. Valida il tipo del valore originale prima di lanciarlo, invece di accettare una stringa numerica come numero.
La colonna fisica date è disponibile per la potatura delle partizioni. Non fa parte dello schema degli eventi logici.
Vincoli di campo
Sterilizza i campi prima dell'esportazione. La validazione e la proiezione in una query non rimuovono i dati grezzi già memorizzati nella tabella di telemetria.
Nomi e proprietà delle azioni
I nomi delle azioni contengono da 1 a 128 caratteri. Iniziano con una lettera minuscola e usano lettere minuscole, cifre, punti e sottoline. Punti e sottolineamenti separati in segmenti alfanumerici. La grammatica è ^[a-z][a-z0-9]*([._][a-z0-9]+)*$.
Usa nomi di stable invece di inserire ID, indirizzi email o testi inseriti dagli utenti. Inserisci dettagli diversi nelle proprietà. Ad esempio, usa report_exported con una format proprietà invece di un nome di azione diverso per ogni formato.
Le chiavi di proprietà seguono la stessa grammatica. Non usare namespace riservati o segmenti sensibili, inclusi analytics, , telemetrystacktraceipusernamecookiecredentialauthorizationtokensecretapi_keypasswdpasswordprivate_keyselectorsselectorstackdomtextinputsessionuserreferrerurlusersemailhtmlidentity Queste restrizioni si applicano anche ai nomi delle azioni.
Le proprietà possono contenere stringhe scalari, numeri finiti e booleani. Array, oggetti annidati, valori nulli, credenziali e dati personali non sono permessi.
| Limit | Value |
|---|---|
| Proprietà per evento | 50 |
| Lunghezza della chiave di proprietà | 128 caratteri |
| Lunghezza del valore della stringa | 1.024 caratteri |
Le proiezioni delle query omettono proprietà che non soddisfano questi vincoli. I produttori rimangono responsabili del significato dei valori che inviano. I controlli sintattici da soli non possono stabilire che un valore sia non personale.
Percorsi delle pagine
A page_path inizia con / e contiene il percorso di applicazione concreto. Rimuovere stringhe di query e frammenti e sanificare i segmenti di percorso sensibili. Non inviare credenziali, dati personali o testo inserito dall'utente in un percorso.
Un percorso non valido viene omesso dalla proiezione della query. Una visualizzazione di pagina senza percorso rimane valida, ma non contribuisce alle aggregazioni a livello di percorso.
Sessioni
Una sessione di analisi appartiene al contesto di un browser di alto livello. Quando un produttore fornisce un ID di sessione, mantieni la stabilità durante la navigazione lato client e i ricaricamenti, e rinnovala dopo 30 minuti senza un evento di analisi registrato.
Gli ID di sessione devono essere opachi e non devono derivare da identità utente, indirizzi email, indirizzi IP, ID di richiesta, ID di lavoro o token di accesso. Gli eventi backend preservano la sessione di origine quando è disponibile. Gli eventi rigiocati conservano la loro sessione originale e il tempo degli eventi.
Una sessione misura una finestra di attività, non una persona unica. Le metriche di visualizzazione nel prodotto possono utilizzare dati separati per l'accesso all'app.
Regole Web Vital
Gli eventi Web Vital aggiungono i seguenti campi. Codifica valore e delta come attributi OTLP doubleValue , e i campi rimanenti come stringValue attributi. I campi specifici di Web Vital devono essere assenti nelle azioni e nelle visualizzazioni di pagina.
| Campo | Requisito | Description |
|---|---|---|
web_vital_value |
Required | Valore cumulativo finito e non negativo per il campione. |
web_vital_unit |
Required |
ms oppure score, determinato dalla metrica. |
web_vital_delta |
Required | Cambiamento finito e non negativo rispetto al rapporto precedente. |
web_vital_sample_id |
Required | Identificatore globalmente unico condiviso dai report per un campione. |
web_vital_rating |
Required |
good, needs_improvement, o poor, derivato dalle soglie di valore e metrica. |
web_vital_navigation_type |
Optional |
navigate, reload, back_forward, back_forward_cacheprerender, o restore. |
La tabella seguente definisce le unità e le soglie:
| Metrica | Name | Unità | Bene | Scarsa |
|---|---|---|---|---|
lcp |
La vernice più grande con contenuto (LCP) | ms |
≤ 2.500 | > 4,000 |
inp |
Interazione con Next Paint (INP) | ms |
≤ 200 | > 500 |
cls |
Spostamento cumulativo della disposizione (CLS) | score |
≤ 0,1 | > 0.25 |
fcp |
Prima vernice contenente (FCP) | ms |
≤ 1.800 | > 3,000 |
ttfb |
Tempo per il primo byte (TTFB) | ms |
≤ 800 | > 1,800 |
LCP, INP e CLS sono i Core Web Vitals. FCP e TTFB forniscono ulteriori misurazioni di prestazione. Un valore è good a o sotto la soglia del Buono, poor sopra la soglia del Povero e needs_improvement tra di esse. Un'unità o una valutazione discorrispondenti rende il record invalido.
Un campione può produrre più rapporti. I parametri vitali web descrivono la navigazione nei documenti. Un cambiamento di percorso lato client può produrre una visualizzazione pagina senza produrre un nuovo esempio Web Vital. Un server può inoltrare una misurazione del browser, ma i tempi del server non sostituiscono quella misurazione.
Ordine di validazione
Registri di processo nel seguente ordine:
- Seleziona le versioni di schema supportate e i tipi di eventi. Per questo schema, si selezionano versione
1eaction,page_view, oweb_vital. - Decodifica gli attributi tipizzati e richiede valori validi
event_id,event_name, eoccurred_at. - Validare campi, nomi, unità, valutazioni e vincoli di campo per tipo di evento. Escludi i record con campi richiesti non validi e dati opzionali solo per il progetto permessi.
- Rilevare ID di eventi in conflitto e deduplicare consegne identiche.
- Seleziona l'intervallo di analisi e qualsiasi filtro di percorso o eventi.
- Per i parametri vitali web, riduci i report ripetuti a un solo report per campione.
- Aggregare gli eventi o campioni risultanti.
Mantieni la validazione separata dalla diagnostica dell'ingestione. Trovare una riga in otel_logs non stabilisce che sia conforme allo schema degli eventi.
Deduplicazione e riduzione del campione
Consegne identiche di un evento contano come un solo evento. Se un è event_id riutilizzato per contenuti logici diversi di eventi, escludere ogni record in quel set di conflitti e segnalare il conflitto come un problema di qualità dei dati. Non scegliere una consegna arbitraria dal set.
Confronta il contenuto logico normalizzato, inclusi campi e proprietà opzionali. Usa una rappresentazione deterministica delle proprietà in modo che l'ordinamento delle chiavi non crei conflitti false. I metadati di trasporto non fanno parte del contenuto logico degli eventi. I ritentativi conservano il timestamp originale dell'evento.
Controlla l'identità tra le consegne conservate per ogni ID evento candidato prima di applicare l'intervallo temporale di analisi. Filtrare prima le consegne grezze può nascondere contenuti contrastanti al di fuori di quel intervallo.
Dopo la deduplicazione e la selezione dell'intervallo di analisi, conservare il report più recente per web_vital_sample_id. Riferimenti d'ordine da occurred_at, interrompendo i legami con event_id, entrambi in discesa. Calcola i percentili dopo questa riduzione.
Definizioni di metrica
Gli intervalli di tempo includono start_time ed escludono end_time. I compartimenti temporali utilizzano il Tempo Universale Coordinato (UTC).
| Metrica | Definition |
|---|---|
| Visualizzazioni pagina | Numero di eventi deduplicati page_view . |
| Sessioni | Numero di valori distinti, non nulli session_id , tra gli eventi analitici selezionati. |
| Azioni tracciate | Numero di eventi deduplicati action . |
| Pagine per sessione | Visualizzazioni di pagina divise per sessioni. Nessun valore quando il numero di sessioni è zero. |
| Azioni principali | Azioni raggruppate per event_name. |
| Pagine principali | Visualizzazioni di pagina raggruppate per page_path, escludendo i percorsi mancanti. |
| Web Vital p75 | Posizione più vicina al 75° percentile dopo la deduplicazione e la riduzione del campione dell'evento. |
| Web Dimensione del campione Vital | Numero di campioni distinti dopo la riduzione. |
| Ultimo evento | Il migliore occurred_at tra gli eventi analytics selezionati. |
Per N i campioni ordinati, il rango più vicino p75 usa il valore in posizione ceil(0.75 × N), con indicizzazione basata su uno. Considera meno di 30 campioni di Web Vital come prova indicativa piuttosto che conclusiva di una tendenza.
Questo schema non definisce l'identità dell'utente, il dispositivo, il browser o le dimensioni geografiche. Le superfici di prodotto possono mostrare metriche aggiuntive provenienti da altre fonti. In particolare, i visualizzatori unici della dashboard non vengono calcolati contando le sessioni di analisi.
Esempio: calcolare Web Vital p75 da eventi validati
La seguente query dimostra l'esclusione delle collisioni, la deduplicazione, la riduzione del campione e il calcolo esatto del percentile. Consuma un dataset normalizzato, non la tabella grezza otel_logs .
Prepara l'input
Crea una vista di input nella tua pipeline di elaborazione che applichi i passaggi da 1 a 3 dell'ordine di validazione. La vista deve contenere i seguenti dati:
- Una riga per ogni consegna che supera la validazione, prima della deduplicazione o del filtraggio per intervallo temporale.
- I campi logici tipati, inclusi
event_id,occurred_at,event_type,event_name,web_vital_value, eweb_vital_sample_id. - Una stringa non nulla
logical_contentcontenente una rappresentazione deterministica di tutti i campi e proprietà di eventi normalizzati. Rappresentare i campi opzionali assenti in modo coerente e preservare il tempo originale dell'evento.
Analizza l'input dell'app che stai analizzando. Includere le consegne conservate di tutti i tipi di eventi supportati in modo che venga rilevato il riutilizzo di un ID evento tra i tipi. L'input deve far rispettare tutti i campi richiesti, i tipi numerici e gli intervalli, le unità, le valutazioni e i vincoli di tipo di evento descritti sopra.
Importante
Questa visuale di input non viene creata abilitando la telemetria dell'app. È un prerequisito fornito dalla tua pipeline di lavorazione. Lanciare alcuni attributi grezzi non sostituisce questo passaggio di validazione.
Aggrega l'input validato
Sostituisci <catalog>.<schema>.<validated-events-view> con la tua vista di input. Imposta :start_time e :end_time come timestamp parametri nell'editor SQL.
WITH event_id_quality AS (
SELECT event_id, COUNT(DISTINCT logical_content) AS content_count
FROM <catalog>.<schema>.<validated-events-view>
GROUP BY event_id
),
deduplicated AS (
SELECT events.*
FROM <catalog>.<schema>.<validated-events-view> AS events
JOIN event_id_quality AS quality USING (event_id)
WHERE quality.content_count = 1
QUALIFY ROW_NUMBER() OVER (
PARTITION BY event_id ORDER BY occurred_at
) = 1
),
samples AS (
SELECT *
FROM deduplicated
WHERE event_type = 'web_vital'
AND occurred_at >= :start_time
AND occurred_at < :end_time
QUALIFY ROW_NUMBER() OVER (
PARTITION BY web_vital_sample_id ORDER BY occurred_at DESC, event_id DESC
) = 1
)
SELECT
event_name,
COUNT(*) AS sample_size,
PERCENTILE_DISC(0.75) WITHIN GROUP (ORDER BY web_vital_value) AS p75
FROM samples
GROUP BY event_name
ORDER BY event_name;
PERCENTILE_DISC restituisce il valore osservato al rango richiesto invece di un'approssimazione. La query esclude gli ID degli eventi in conflitto prima di selezionare l'intervallo temporale. Monitorare gli ID che content_count superano uno separatamente come errori di qualità dei dati.
Ad esempio, tre campioni LCP ridotti con valori di 100, 200 e 300 millisecondi producono sample_size = 3 e p75 = 300. Riconsegne identiche non aumentano quel numero di campioni. Un ID evento con contenuti normalizzati in conflitto non contribuisce a nessun record.
Versioning
schema_version identifica la versione principale sotto contratto indipendentemente dalle versioni del produttore del pacchetto.
Aggiungere campi opzionali o nomi di azioni definiti dall'applicazione è retrocompatibile. Rimuovere i campi richiesti o modificare i loro tipi, significati, ambito dell'identificatore o semantica della sessione richiede una modifica importante della versione. Anche le modifiche alla deduplicazione, alla riduzione del campione o alla semantica dei tipi di evento richiedono una nuova versione principale.
I consumatori ignorano versioni e tipi di eventi non supportati invece di interpretarli come azioni.