Introduzione alle tabelle di oggetti
Questo documento descrive le tabelle di oggetti, ovvero tabelle di sola lettura su oggetti di dati non strutturati che si trovano in Cloud Storage.
Le tabelle di oggetti ti consentono di analizzare i dati non strutturati in Cloud Storage. Puoi eseguire analisi con funzioni remote o eseguire l'inferenza utilizzando BigQuery ML, quindi unire i risultati di queste operazioni con il resto dei dati strutturati in BigQuery.
Come le tabelle BigLake, le tabelle di oggetti utilizzano la delega dell'accesso, che disaccoppia l'accesso alla tabella di oggetti dall'accesso agli oggetti Cloud Storage. Per connettersi a Cloud Storage viene utilizzata una connessione esterna associata a un account di servizio, pertanto devi solo concedere agli utenti l'accesso alla tabella degli oggetti. In questo modo puoi applicare la sicurezza a livello di riga e gestire gli oggetti a cui gli utenti hanno accesso.
Schema della tabella degli oggetti
Una tabella di oggetti fornisce un indice dei metadati sugli oggetti di dati non strutturati in un bucket Cloud Storage specificato. Ogni riga della tabella corrisponde a un oggetto e le colonne della tabella corrispondono ai metadati dell'oggetto generati da Cloud Storage, inclusi eventuali metadati personalizzati.
Una tabella di oggetti contiene anche una pseudocolonna data
che rappresenta i contenuti del file in byte non elaborati, che viene compilata automaticamente quando viene creata la tabella di oggetti.
Questa pseudocolonna viene utilizzata dalla
funzione ML.DECODE_IMAGE
quando esegui l'inferenza sui dati delle immagini. Non puoi includere la pseudocolonna data
nelle query e non viene visualizzata nello schema della tabella degli oggetti.
La tabella seguente descrive lo schema fisso utilizzato dalle tabelle di oggetti:
Nome campo | Tipo | Modalità | Descrizione |
---|---|---|---|
uri |
STRING | NULLABLE | uri : l'URI (Uniform Resource Identifier) dell'oggetto nel formato gs://bucket_name/[folder_name/]object_name . |
generation |
INTEGER | NULLABLE | La generazione di questo oggetto, che identifica la versione dell'oggetto. |
content_type |
STRING | NULLABLE | Il Content-Type dei dati dell'oggetto, che identifica il tipo di media. Se un oggetto viene archiviato senza un Content-Type, viene pubblicato come application/octet-stream. |
size |
INTEGER | NULLABLE | Il valore Content-Length dei dati in byte. |
md5_hash |
STRING | NULLABLE | L'hash MD5 dei dati, codificato utilizzando base64. Per ulteriori informazioni sull'utilizzo dell'hash MD5, consulta Metadati degli oggetti Cloud Storage. |
updated |
TIMESTAMP | NULLABLE | L'ultima volta che sono stati modificati i metadati dell'oggetto. |
metadata |
RECORD | REPEATED | Metadati personalizzati per
l'oggetto. Ogni metadato è rappresentato come una coppia chiave-valore nei campi secondari (metadata.)name e (metadata.)value del campo metadata . |
(metadata.)name |
STRING | NULLABLE | Inserisci una singola voce di metadati. |
(metadata.)value |
STRING | NULLABLE | Valore in una singola voce dei metadati. |
Le righe di una tabella di oggetti hanno il seguente aspetto:
------------------------------------------------------------------------------------------------------------------------------------------------
| uri | generation | content_type | size | md5_hash | updated | metadata...name | metadata...value |
—-----------------------------------------------------------------------------------------------------------------------------------------------
| gs://mybucket/a.jpeg | 165842… | image/jpeg | 26797 | 8c33be10f… | 2022-07-21 17:35:40.148000 UTC | null | null |
—-----------------------------------------------------------------------------------------------------------------------------------------------
| gs://mybucket/b.bmp | 305722… | image/bmp | 57932 | 44eb90cd1… | 2022-05-14 12:09:38.114000 UTC | null | null |
—-----------------------------------------------------------------------------------------------------------------------------------------------
Casi d'uso
Puoi eseguire query sui metadati di una tabella di oggetti nello stesso modo in cui esegui query su qualsiasi altra tabella BigQuery. Tuttavia, il caso d'uso principale per le tabelle degli oggetti è rendere accessibili i dati non strutturati per l'analisi. Puoi utilizzare BigQuery ML per eseguire l'inferenza sulle tabelle di oggetti di immagini con modelli TensorFlow, TensorFlow Lite e PyTorch. Puoi anche utilizzare le funzioni remote per analizzare i dati non strutturati in quasi tutti i modi che preferisci. Ad esempio, puoi creare una funzione remota che ti consenta di analizzare le immagini utilizzando Cloud Vision o una che ti consenta di estrarre i metadati dai documenti PDF utilizzando Apache Tika.
La tabella seguente descrive i punti di integrazione che puoi utilizzare per eseguire il machine learning sui dati delle tabelle degli oggetti:
Integrazione | Descrizione | Caso d'uso | Tutorial |
---|---|---|---|
Modelli BigQuery ML importati | Importa i modelli TensorFlow, TensorFlow Lite o ONNX in BigQuery ML per eseguire l'inferenza locale in BigQuery . | Utilizzi modelli open source o personalizzati che rientrano nelle limitazioni supportate. | Tutorial: eseguire l'inferenza in una tabella di oggetti utilizzando un modello di vettore di funzionalità |
Cloud Run Functions | Utilizza le funzioni Cloud Run per chiamare servizi o modelli ospitati. Si tratta dell'integrazione più generica. | Ospiti i tuoi modelli su Compute Engine, Google Kubernetes Engine o un'altra infrastruttura di proprietà del cliente. | |
La funzione ML.ANNOTATE_IMAGE |
Utilizza l'API Cloud Vision per annotare le immagini. | Vuoi annotare le immagini utilizzando un modello preaddestrato dell'API Vision. | Annotare le immagini con la funzione ML.ANNOTATE_IMAGE |
La funzione ML.PROCESS_DOCUMENT |
Utilizza l'API Document AI per estrarre informazioni dai documenti. | Vuoi utilizzare i processori di documenti personalizzati o preaddestrati di Document AI. | Elaborare i documenti con la funzione ML.PROCESS_DOCUMENT |
La funzione ML.TRANSCRIBE |
Utilizza l'API Speech-to-Text per trascrivere i file audio. | Vuoi utilizzare i riconoscitori vocali personalizzati o preaddestrati di Speech-to-Text. | Trascrivere i file audio con la funzione ML.TRANSCRIBE |
Se vuoi unire i risultati ad altri dati strutturati, puoi creare una visualizzazione o una tabella dai risultati dell'analisi. Ad esempio, la seguente istruzione crea una tabella in base ai risultati dell'inferenza:
CREATE TABLE my_dataset.my_inference_results AS SELECT uri, content_type, vision_feature FROM ML.PREDICT( MODEL my_dataset.vision_model, SELECT ML.DECODE_IMAGE(data) AS vision_input FROM my_dataset.object_table );
Una volta creata la tabella, puoi unire altre tabelle in base a campi di metadati standard o personalizzati, come mostrato di seguito:
SELECT a.vision_feature, a.uri, b.description FROM my_dataset.my_inference_results a JOIN my_dataset.image_description b ON a.uri = b.uri;
Puoi anche creare un indice di ricerca per eseguire ricerche nei risultati dell'analisi. Ad esempio, l'istruzione seguente crea un indice di ricerca sui dati estratti dai file PDF:
CREATE SEARCH INDEX my_index ON pdf_text_extract(ALL COLUMNS);
Puoi quindi utilizzare l'indice per trovare ciò che ti serve nei risultati:
SELECT * FROM pdf_text_extract WHERE SEARCH(pdf_text, 'Google');
Vantaggi
L'analisi dei dati non strutturati in modo nativo in BigQuery offre i seguenti vantaggi:
- Riduce il lavoro manuale consentendoti di automatizzare i passaggi di pre-elaborazione, ad esempio la regolazione delle dimensioni delle immagini in base ai requisiti del modello.
- Ti consente di utilizzare l'interfaccia SQL semplice e familiare per lavorare con i dati non strutturati.
- Ti aiuta a risparmiare sui costi utilizzando gli slot BigQuery esistenti invece di dover eseguire il provisioning di nuove forme di calcolo.
URL firmati
Per accedere ai dati rappresentati da un oggetto, genera un URL firmato. Puoi utilizzare l'URL firmato per visualizzare direttamente i dati dell'oggetto e puoi anche trasmettere gli URL firmati alle funzioni remote per consentire loro di lavorare con i dati delle tabelle degli oggetti.
Utilizza la
funzione EXTERNAL_OBJECT_TRANSFORM
per generare URL firmati, come mostrato nell'esempio seguente:
SELECT uri, signed_url FROM EXTERNAL_OBJECT_TRANSFORM(TABLE `mydataset.myobjecttable`, ['SIGNED_URL']);
Verranno restituiti risultati simili ai seguenti:
---------------------------------------------------------------------------------------------------
| uri | signed_url |
—--------------------------------------------------------------------------------------------------
| gs://mybucket/a.docx | https://storage.googleapis.com/mybucket/a.docx?X-Goog-Signature=abcd&... |
—-------------------------------------------------------------------------------------------------
| gs://mybucket/b.pdf | https://storage.googleapis.com/mybucket/b.pdf?X-Goog-Signature=wxyz&... |
—--------------------------------------------------------------------------------------------------
Gli URL firmati generati dalle tabelle di oggetti consentono a qualsiasi utente o procedura che li possiede di leggere gli oggetti corrispondenti. Gli URL firmati generati scadono dopo 6 ore. Per ulteriori informazioni, consulta URL firmati di Cloud Storage.
Controllo degli accessi
Le tabelle di oggetti sono basate su BigLake, pertanto utilizzano una connessione esterna basata su un account di servizio per accedere ai dati di Cloud Storage. In questo modo, lo scollegamento dell'accesso alla tabella dall'accesso all'object store sottostante avviene tramite la delega dell'accesso. Concedi all'account di servizio le autorizzazioni per accedere ai dati e ai metadati degli oggetti e visualizzarli nella tabella. Puoi concedere agli utenti autorizzazioni solo per la tabella, dove puoi regolamentare l'accesso ai dati utilizzando Identity and Access Management (IAM) e la sicurezza a livello di riga.
Le tabelle di oggetti sono diverse dalle altre tabelle che utilizzano la delega dell'accesso, in quanto l'accesso a una riga di una tabella di oggetti consente di accedere ai contenuti del file sottostante. Sebbene un utente non possa accedere direttamente all'oggetto, può generare un URL firmato che gli consenta di visualizzare i contenuti del file. Ad esempio, se l'utente ha accesso alla riga della tabella degli oggetti che rappresenta il file immagine flower.jpg
, può generare un URL firmato per visualizzare il file e vedere che si tratta di un'immagine di una margherita.
L'impostazione di un criterio di accesso a livello di riga in una tabella di oggetti limita l'accesso di un utente o di un gruppo ai metadati degli oggetti nelle righe selezionate, nonché agli oggetti rappresentati da queste righe. Ad esempio, la seguente istruzione concede all'utente Alice l'accesso solo alle righe che rappresentano gli oggetti creati prima del 25 giugno 2022:
CREATE ROW ACCESS POLICY before_20220625 ON my_dataset.my_object_table GRANT TO ("user:alice@example.com") FILTER USING (updated < TIMESTAMP("2022-06-25"));
Con questo criterio di accesso a livello di riga, per Alice sono veri i seguenti risultati:
- L'esecuzione della query
SELECT * FROM my_dataset.my_object_table;
restituisce solo le righe con un valoreupdated
precedente al 25 giugno 2022. - L'esecuzione dell'inferenza su
my_dataset.my_object_table
restituisce solo le previsioni per gli oggetti che hanno un valoreupdated
precedente al 25 giugno 2022. - La generazione di URL firmati per
my_dataset.my_object_table
crea URL solo per gli oggetti che hanno un valoreupdated
precedente al 25 giugno 2022.
Puoi anche limitare l'accesso alle righe della tabella degli oggetti utilizzando i metadati personalizzati.
Ad esempio, la seguente istruzione limita il gruppo users
ad accedere solo alle righe in cui l'oggetto è stato contrassegnato come non contenente
informazioni che consentono l'identificazione personale:
CREATE ROW ACCESS POLICY no_pii ON my_dataset.my_object_table GRANT TO ("group:users@example.com") FILTER USING (ARRAY_LENGTH(metadata)=1 AND metadata[OFFSET(0)].name="no_pii")
Modello di sicurezza
I seguenti ruoli organizzativi sono in genere coinvolti nella gestione e nell'utilizzo delle tabelle degli oggetti:
- Amministratori del data lake. In genere, questi amministratori gestiscono i criteri IAM (Identity and Access Management) per gli oggetti e i bucket Cloud Storage.
- Amministratori del data warehouse. In genere, questi amministratori creano, eliminano e aggiornano le tabelle.
- Analisti di dati. In genere, gli analisti leggono i dati ed eseguono query.
Gli amministratori del data lake sono responsabili della creazione delle connessioni e della loro condivisione con gli amministratori del data warehouse. A loro volta, gli amministratori del data warehouse creano tabelle, impostano controlli di accesso appropriati e condividono le tabelle con i data analyst.
File di oggetti supportati
Puoi creare una tabella di oggetti su qualsiasi tipo e dimensione di file di dati non strutturati e puoi creare funzioni remote per lavorare con qualsiasi tipo di dati non strutturati. Tuttavia, per eseguire l'inferenza utilizzando BigQuery ML, una tabella di oggetti può essere basata solo su file immagine che soddisfano diversi requisiti di dimensioni e tipo. Per ulteriori informazioni, consulta Limitazioni.
Memorizzazione nella cache dei metadati per le prestazioni
Puoi utilizzare i metadati memorizzati nella cache per migliorare le prestazioni dell'inferenza e di altri tipi di analisi sulle tabelle di oggetti. La memorizzazione nella cache dei metadati è particolarmente utile nei casi in cui la tabella degli oggetti fa riferimento a un numero elevato di oggetti. I metadati includono nomi di file, informazioni sulla partizione e metadati fisici di file come i conteggi delle righe. Puoi scegliere se attivare o meno la memorizzazione nella cache dei metadati in una tabella. Le query con un numero elevato di file e con filtri di partizione Hive traggono il massimo vantaggio dalla memorizzazione nella cache dei metadati.
Se non attivi la memorizzazione nella cache dei metadati, le query sulla tabella devono leggere l'origine dati esterna per recuperare i metadati dell'oggetto. La lettura di questi dati aumenta la latenza delle query. L'elenco di milioni di file dall'origine dati esterna può richiedere diversi minuti. Se attivi la memorizzazione nella cache dei metadati, le query possono evitare di elencare i file dall'origine dati esterna e possono partizionare e potare i file più rapidamente.
Esistono due proprietà che controllano questa funzionalità:
- Anticipo massimo specifica quando le query utilizzano i metadati memorizzati nella cache.
- La modalità della cache dei metadati specifica la modalità di raccolta dei metadati.
Quando la memorizzazione nella cache dei metadati è attivata, specifica l'intervallo massimo di vetustà dei metadati accettabile per le operazioni sulla tabella. Ad esempio, se specifichi un intervallo di 1 ora, le operazioni sulla tabella utilizzano i metadati memorizzati nella cache se sono stati aggiornati nell'ora precedente. Se i metadati memorizzati nella cache sono precedenti a questa data, l'operazione passa al recupero dei metadati da Cloud Storage. Puoi specificare un intervallo di inattività compreso tra 30 minuti e 7 giorni.
Puoi scegliere di aggiornare la cache automaticamente o manualmente:
- Per gli aggiornamenti automatici, la cache viene aggiornata a un intervallo definito dal sistema, in genere tra 30 e 60 minuti. L'aggiornamento automatico della cache è un buon approccio se i file in Cloud Storage vengono aggiunti, eliminati o modificati a intervalli casuali. Se devi controllare la tempistica dell'aggiornamento, ad esempio per attivarlo alla fine di un job di estrazione, trasformazione e caricamento, utilizza l'aggiornamento manuale.
Per gli aggiornamenti manuali, devi eseguire la procedura di sistema di
BQ.REFRESH_EXTERNAL_METADATA_CACHE
per aggiornare la cache dei metadati in base a una pianificazione che soddisfi i tuoi requisiti. L'aggiornamento manuale della cache è un buon approccio se i file in Cloud Storage vengono aggiunti, eliminati o modificati a intervalli noti, ad esempio come output di una pipeline.Se esegui più aggiornamenti manuali simultanei, ne verrà completato solo uno.
La cache dei metadati scade dopo 7 giorni se non viene aggiornata.
Gli aggiornamenti manuali e automatici della cache vengono eseguiti con priorità query INTERACTIVE
.
Se scegli di utilizzare gli aggiornamenti automatici, ti consigliamo di creare una
prenotazione e poi un
assegnazione con un tipo di job BACKGROUND
per il progetto che esegue i job di aggiornamento della cache dei metadati. In questo modo, i job di aggiornamento non competono con le query degli utenti per le risorse e non rischiano di non riuscire se non sono disponibili risorse sufficienti.
Prima di impostarli, devi considerare in che modo interagiranno i valori dell'intervallo di inattività e della modalità di memorizzazione nella cache dei metadati. Considera gli esempi seguenti:
- Se aggiorni manualmente la cache dei metadati di una tabella e imposti l'intervallo di inattività su 2 giorni, devi eseguire la procedura di sistema
BQ.REFRESH_EXTERNAL_METADATA_CACHE
ogni 2 giorni o meno se vuoi che le operazioni sulla tabella utilizzino i metadati memorizzati nella cache. - Se aggiorni automaticamente la cache dei metadati di una tabella e imposti l'intervallo di inattività su 30 minuti, è possibile che alcune delle operazioni sulla tabella vengano lette da Cloud Storage se l'aggiornamento della cache dei metadati richiede più tempo rispetto al consueto intervallo di 30-60 minuti.
Per trovare informazioni sui job di aggiornamento dei metadati, esegui una query sulla visualizzazione INFORMATION_SCHEMA.JOBS
, come mostrato nell'esempio seguente:
SELECT * FROM `region-us.INFORMATION_SCHEMA.JOBS_BY_PROJECT` WHERE job_id LIKE '%metadata_cache_refresh%' AND creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 6 HOUR) ORDER BY start_time DESC LIMIT 10;
Per scoprire di più, consulta la sezione Memorizzazione nella cache dei metadati.
Per saperne di più su come impostare le opzioni di memorizzazione nella cache dei metadati, consulta Creare tabelle di oggetti.
Limitazioni
- Le tabelle di oggetti sono di sola lettura perché vengono mappate agli oggetti di dati non strutturati in Cloud Storage. Non puoi modificare una tabella di oggetti o i dati della tabella di oggetti.
- Il supporto delle tabelle di oggetti non è disponibile in SQL legacy o in altri ambienti cloud come AWS e Microsoft Azure.
- Se vuoi eseguire l'inferenza utilizzando BigQuery ML, il modello e la tabella di oggetti che utilizzi devono soddisfare i requisiti descritti in Limitazioni.
- Le query che includono tabelle di oggetti non possono accedere a più di 10 GB di metadati degli oggetti. Ad esempio, se una query accede a 100 TB da una combinazione di colonne di metadati nelle tabelle di oggetti e dati sugli oggetti tramite URL firmati, solo 10 GB di questi 100 TB possono provenire dalle colonne di metadati.
- Le tabelle di oggetti sono soggette alle stesse limitazioni di tutte le altre tabelle esterne BigQuery. Per ulteriori informazioni, consulta Quote.
- Le query sulle tabelle di oggetti sono soggette alle stesse limitazioni di tutte le altre query BigQuery. Per ulteriori informazioni, consulta Quote.
- Le funzioni remote che elaborano dati non strutturati dalle tabelle di oggetti sono soggette alle stesse limitazioni di tutte le altre funzioni remote.
- Gli URL firmati generati per gli oggetti nelle tabelle degli oggetti scadono dopo 6 ore, ovvero il limite di tempo di esecuzione delle query.
- L'inferenza con BigQuery ML non è supportata con i prezzi on demand o con la versione Standard.
Le seguenti funzioni non sono supportate con i prezzi on demand o con la versione Standard:
Costi
I costi sono associati ai seguenti aspetti delle tabelle degli oggetti:
- Eseguire query sulle tabelle.
- Aggiornare la cache dei metadati.
Se hai prenotazioni di slot, non ti viene addebitato alcun costo per l'esecuzione di query su tabelle esterne. Vengono invece utilizzati slot per queste query.
La tabella seguente mostra in che modo il modello di prezzi influisce sull'applicazione di questi costi:
Prezzi on demand |
Versioni Standard, Enterprise ed Enterprise Plus |
|
---|---|---|
Query |
Ti vengono addebitati i byte elaborati dalle query degli utenti. |
Gli slot nelle assegnazioni delle prenotazioni con un QUERY tipo di job vengono consumati durante il tempo di query. |
Aggiornare manualmente la cache dei metadati. |
Ti viene addebitato il costo dei byte elaborate per aggiornare la cache. |
Slot nelle assegnazioni delle prenotazioni con un QUERY tipo di job vengono utilizzati durante l'aggiornamento della cache. |
Aggiorna automaticamente la cache dei metadati. |
Ti viene addebitato il costo dei byte elaborate per aggiornare la cache. |
Slot nelle assegnazioni delle prenotazioni con un BACKGROUND tipo di job vengono utilizzati durante l'aggiornamento della cache.Se non sono disponibili prenotazioni BACKGROUND per aggiornare la cache dei metadati, BigQuery utilizza automaticamente gli slot nelle prenotazioni QUERY se utilizzi la versione Enterprise o Enterprise Plus. |
Ti vengono addebitati anche i costi di archiviazione e accesso ai dati di Cloud Storage, Amazon S3, e Azure Blob Storage, in base alle linee guida sui prezzi di ciascun prodotto.
Utilizzo delle tabelle di oggetti con Analytics Hub
Le tabelle degli oggetti sono compatibili con Analytics Hub. I set di dati contenenti tabelle di oggetti possono essere pubblicati come schede di Analytics Hub. Gli abbonati ad Analytics Hub possono iscriversi a queste schede, che eseguono il provisioning di un set di dati di sola lettura, chiamato set di dati collegato, nel loro progetto. Gli abbonati possono eseguire query su tutte le tabelle del set di dati collegato, incluse tutte le tabelle di oggetti. Per ulteriori informazioni, consulta la sezione Iscriversi a una scheda.
Passaggi successivi
- Scopri come creare una tabella di oggetti.
- Scopri come eseguire l'inferenza sulle tabelle degli oggetti immagine.
- Scopri come analizzare le tabelle di oggetti utilizzando le funzioni remote.