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.
Questa pagina contiene materiale di riferimento per il connettore Gmail in Databricks Lakeflow Connect.
Importante
Questa funzionalità è in versione beta. Gli amministratori dell'area di lavoro possono controllare l'accesso a questa funzionalità dalla pagina Anteprime . Vedere Gestire le anteprime di Azure Databricks.
Comportamento generale del connettore
- Il connettore è di sola lettura. Parla solo con
https://gmail.googleapis.come usa ilhttps://www.googleapis.com/auth/gmail.readonlytelescopio di default. Non modifica mai la casella di sorgente. - Ogni connessione assume una singola cassetta postale. Il connettore timbra il valore della cassetta postale come
mailboxcolonna su ogni riga. Per ingerire più di una cassetta postale, crea una connessione e una pipeline separate per ogni cassetta postale. - Lo schema sorgente è
default. - Le
messagestabelle emessage_labelssi sincronizzano in modo incrementale usando l'API Cronologia di Gmail. Leprofiletabelle ,labels,labels_details,drafts, efilterssono solo a aggiornamento completo. - Gli allegati dei messaggi sono contenuti nella
messagespayloadcolonna (payload.parts[].body.attachmentId). Non esiste una tabella di accessori separata.
Tabelle supportate
Il connettore assume le seguenti tabelle dallo default schema sorgente.
| Tabella | Chiave primaria | Modalità di sincronizzazione |
|---|---|---|
profile |
emailAddress |
Aggiornamento completo |
labels |
mailbox, id |
Aggiornamento completo |
labels_details |
mailbox, id |
Aggiornamento completo |
drafts |
id |
Aggiornamento completo |
filters |
id |
Aggiornamento completo |
messages |
id |
Incrementale (API Storia Gmail, historyId) |
message_labels |
message_id |
Incrementale (API Storia Gmail, historyId) |
Schema di destinazione
Le sezioni seguenti descrivono le colonne in ciascuna tabella di destinazione.
profile
| Column | Type |
|---|---|
emailAddress |
string (chiave primaria) |
messagesTotal |
long |
threadsTotal |
long |
historyId |
string |
mailbox |
string |
labels
| Column | Type |
|---|---|
mailbox |
string (chiave primaria) |
id |
string (chiave primaria) |
name |
string |
messageListVisibility |
string |
labelListVisibility |
string |
type |
string |
messagesTotal |
long |
messagesUnread |
long |
threadsTotal |
long |
threadsUnread |
long |
color |
struct{textColor: string, backgroundColor: string} |
labels_details
La labels_details tabella ha le stesse colonne di labels (mailbox, id, name, type, i campi di visibilità, i conteggi di messaggi e thread, e color). Ogni etichetta è arricchita con la risposta dell'API labels.get .
Bozze
| Column | Type |
|---|---|
id |
string (chiave primaria) |
message |
struct{id: string, threadId: string} |
mailbox |
string |
filters
| Column | Type |
|---|---|
id |
string (chiave primaria) |
criteria |
struct{from: string, to: string, subject: string, query: string, negatedQuery: string, hasAttachment: boolean, excludeChats: boolean, size: long, sizeComparison: string} |
action |
struct{addLabelIds: array<string>, removeLabelIds: array<string>, forward: string} |
mailbox |
string |
messages
| Column | Type |
|---|---|
id |
string (chiave primaria) |
threadId |
string |
snippet |
string |
historyId |
string |
internalDate |
string |
payload |
struct (vedi struttura del carico utile) |
sizeEstimate |
long |
mailbox |
string |
_ingestion_timestamp |
timestamp |
_row_deleted |
boolean |
_row_truncated |
boolean |
Struttura del carico utile
La payload colonna materializza l'albero MIME del messaggio fino a 8 livelli di annidamento. Ogni livello ha la seguente struttura:
struct{
partId: string,
mimeType: string,
filename: string,
headers: array<struct{name: string, value: string}>,
body: struct{attachmentId: string, size: long, data: string},
parts: array<payload>
}
Gli allegamenti sono contenuti all'interno payload.parts[].body.attachmentIddi . Le parti annidate a più di 8 livelli di profondità non vengono espanse in colonne di struttura.
message_labels
| Column | Type |
|---|---|
message_id |
string (chiave primaria) |
threadId |
string |
labelIds |
array<string> |
mailbox |
string |
_ingestion_timestamp |
timestamp |
_row_deleted |
boolean |
_row_truncated |
boolean |
Sincronizzazione incrementale
Le messages tabelle e message_labels si sincronizzano in modo incrementale:
- La prima prova effettua un bootstrap crawl completo della cassetta postale.
- Le run successive richiedono
users.history.list, inserito sulhistoryIdcursore preso dallaprofilerisorsa, per recuperare solo i cambiamenti dalla run precedente. - Le cancellazioni vengono emesse come
_row_deletedlapidi. - Se Gmail scade la memoria
historyIdmemorizzata (l'API Storia restituisce un 404 perché il cursore è più vecchio della finestra di conservazione di Gmail), il connettore torna automaticamente a un aggiornamento completo della tabella interessata.
Importante
Gmail conserva la cronologia per una finestra limitata, tipicamente di circa sette giorni. Programma la pipeline per farla funzionare almeno una volta ogni sette giorni in modo che lo stoccaggio historyId rimanga entro quella finestra. Se il cursore scade, la successiva esecuzione effettua un aggiornamento completo di messages e message_labels.
Le messages tabelle e message_labels non supportano il tracciamento della cronologia SCD Tipo 2; configurare SCD Tipo 2 per queste tabelle causa il guasto della validazione della pipeline.
Limitazione del tasso
Quando Gmail restituisce una risposta HTTP 403, il connettore legge l'intestazione Retry-After (con un minimo di 1 secondo di ritardo) e ritenta automaticamente la richiesta.