Introduzione alle tabelle di oggetti

Questo documento descrive le tabelle di oggetti, che sono di sola lettura su oggetti di dati non strutturati che risiedono in Cloud Storage.

Le tabelle degli oggetti consentono di analizzare i dati non strutturati in Cloud Storage. Puoi eseguire l'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 per le tabelle BigLake, le tabelle di oggetti utilizzano la delega di accesso, che disaccoppia l'accesso alla tabella degli oggetti dall'accesso agli oggetti Cloud Storage. Una connessione esterna associata a un account di servizio viene utilizzata per connettersi a Cloud Storage, quindi devi concedere agli utenti solo 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 di 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 pseudo-colonna data che rappresenta i contenuti del file in byte non elaborati, che viene compilata automaticamente al momento della creazione della tabella degli oggetti. Questa pseudo-colonna viene utilizzata dalla funzione ML.DECODE_IMAGE quando esegui l'inferenza sui dati dell'immagine. Non puoi includere la pseudo-colonna data nelle query e non viene visualizzata come parte dello schema della tabella degli oggetti.

La seguente tabella 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 dell'oggetto, che identifica la versione dell'oggetto.
content_type STRING NULLABLE Il valore Content-Type dei dati dell'oggetto, che identifica il tipo di contenuto multimediale. Se un oggetto viene archiviato senza un valore Content-Type, viene pubblicato come flusso di applicazione/ottetto.
size INTEGER NULLABLE Il valore Content-Length dei dati in byte.
md5_hash STRING NULLABLE L'hash MD5 dei dati, codificato utilizzando base64. Per maggiori informazioni sull'utilizzo dell'hash MD5, consulta Hash ed ETag di 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 parte dei metadati è rappresentata come coppia chiave-valore nei campi secondari (metadata.)name e (metadata.)value del campo metadata.
(metadata.)name STRING NULLABLE Chiave di una singola voce di metadati.
(metadata.)value STRING NULLABLE Valore in una singola voce di metadati.

Le righe di una tabella di oggetti sono simili alle seguenti:

------------------------------------------------------------------------------------------------------------------------------------------------
|  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 in una tabella di oggetti come faresti su qualsiasi altra tabella BigQuery. Tuttavia, il caso d'uso principale delle tabelle di oggetti è rendere i dati non strutturati accessibili per l'analisi. Puoi utilizzare BigQuery ML per eseguire l'inferenza sulle tabelle di oggetti immagine con i modelli TensorFlow, TensorFlow Lite e PyTorch. Puoi anche utilizzare le funzioni remote per analizzare i dati non strutturati praticamente in tutti i modi che preferisci. Ad esempio, puoi creare una funzione remota che consenta di analizzare le immagini utilizzando Cloud Vision oppure una che ti consenta di estrarre i metadati da documenti PDF utilizzando Apache Tika.

La seguente tabella descrive i punti di integrazione che puoi utilizzare per eseguire il machine learning sui dati della tabella 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 . Stai utilizzando modelli open source o personalizzati che rientrano nelle limitazioni supportate. Tutorial: esegui l'inferenza su una tabella di oggetti utilizzando un modello di vettore di caratteristiche
Cloud Functions Utilizzare Cloud Functions per chiamare servizi o modelli ospitati. Questa è l'integrazione più generica. Stai ospitando autonomamente i tuoi modelli su Compute Engine, Google Kubernetes Engine o un'altra infrastruttura di proprietà del cliente. Tutorial: analizzare una tabella di oggetti utilizzando una funzione remota
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. Annota le immagini con la funzione ML.ANNOTATE_IMAGE
La funzione ML.PROCESS_DOCUMENT Utilizza l'API Document AI per estrarre insight dai documenti. Vuoi utilizzare processori di documenti preaddestrati o personalizzati Document AI. Elaborare documenti con la funzione ML.PROCESS_DOCUMENT
La funzione ML.TRANSCRIBE Usa l'API Speech-to-Text per trascrivere i file audio. Vuoi utilizzare riconoscimenti vocali preaddestrati o personalizzati di Speech-to-Text. Trascrivere i file audio con la funzione ML.TRANSCRIBE

Puoi creare una visualizzazione o una tabella dai risultati dell'analisi se vuoi unirli ad altri dati strutturati. Ad esempio, la seguente istruzione crea una tabella basata sui risultati di 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
);

Dopo aver creato la tabella, puoi unirla ad altre tabelle in base ai 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 potenziare le ricerche nei risultati dell'analisi. Ad esempio, la seguente istruzione 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 in questi risultati:

SELECT * FROM pdf_text_extract WHERE SEARCH(pdf_text, 'Google');

Vantaggi

L'analisi nativa di dati non strutturati in BigQuery offre i seguenti vantaggi:

  • Riduce lo sforzo manuale consentendoti di automatizzare le fasi di pre-elaborazione, come l'ottimizzazione delle dimensioni delle immagini in base ai requisiti del modello.
  • Consente di utilizzare l'interfaccia SQL semplice e familiare per lavorare con dati non strutturati.
  • Risparmia sui costi grazie all'utilizzo degli slot BigQuery esistenti invece di eseguire il provisioning di nuove forme di calcolo.

URL firmati

Per ottenere l'accesso 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 passare URL firmati alle funzioni remote per consentire a queste ultime di utilizzare i dati delle tabelle di 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']);

Vengono 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 da 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 dell'accesso

Le tabelle degli oggetti sono basate su BigLake, quindi utilizzano una connessione esterna basata su un account di servizio per accedere ai dati di Cloud Storage. Questo disaccoppia l'accesso alla tabella dall'accesso all'archivio di oggetti sottostante tramite la delega dell'accesso. Concedi all'account di servizio le autorizzazioni per accedere ai dati e ai metadati dagli oggetti e visualizzarli nella tabella. Puoi concedere agli utenti le autorizzazioni solo nella tabella, in cui puoi gestire l'accesso ai dati utilizzando Identity and Access Management (IAM) e la sicurezza a livello di riga.

Le tabelle degli oggetti sono diverse dalle altre che utilizzano la delega di accesso, in quanto avere accesso a una riga di una tabella di oggetto conferisce l'accesso al contenuto del file sottostante. Anche se un utente non può 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 dell'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 e anche 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 si verificano i seguenti risultati:

  • L'esecuzione della query SELECT * FROM my_dataset.my_object_table; restituisce solo le righe con un valore updated precedente al 25 giugno 2022.
  • L'esecuzione dell'inferenza su my_dataset.my_object_table restituisce solo previsioni per gli oggetti che hanno un valore updated prima del 25 giugno 2022.
  • La generazione di URL firmati per my_dataset.my_object_table crea URL solo per gli oggetti che hanno un valore updated prima del 25 giugno 2022.

Puoi anche limitare l'accesso alle righe della tabella degli oggetti utilizzando metadati personalizzati. Ad esempio, la seguente istruzione limita l'accesso del gruppo users solo alle righe in cui l'oggetto è stato taggato 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 dei data lake. Questi amministratori in genere gestiscono i criteri di Identity and Access Management (IAM) su bucket e oggetti Cloud Storage.
  • Amministratori di data warehouse. Questi amministratori in genere creano, eliminano e aggiornano le tabelle.
  • Analisti di dati. In genere gli analisti leggono i dati ed eseguono query.

Gli amministratori dei data lake sono responsabili della creazione delle connessioni e della loro condivisione con gli amministratori del data warehouse. A loro volta, gli amministratori dei data warehouse creano le tabelle, impostano i controlli di accesso appropriati e condividono le tabelle con gli analisti di dati.

File oggetto supportati

Puoi creare una tabella di oggetti su file di dati non strutturati di qualsiasi tipo e dimensione, e creare funzioni remote da utilizzare con qualsiasi tipo di dati non strutturati. Tuttavia, per eseguire l'inferenza utilizzando BigQuery ML, una tabella di oggetti può trovarsi solo sopra file immagine che soddisfano diversi requisiti di dimensione e tipo. Per maggiori informazioni, vedi Limitazioni.

Memorizzazione nella cache dei metadati per migliorare le prestazioni

Puoi utilizzare i metadati memorizzati nella cache per migliorare le prestazioni di inferenza e altri tipi di analisi nelle tabelle di oggetti. La memorizzazione nella cache dei metadati è particolarmente utile nei casi in cui la tabella degli oggetti fa riferimento a un elevato numero di oggetti. I metadati includono nomi dei file, informazioni di partizionamento e metadati fisici di file, come i conteggi delle righe. Puoi scegliere se abilitare o meno la memorizzazione nella cache dei metadati in una tabella. Le query con un numero elevato di file e con i filtri di partizione Hive traggono maggiore vantaggio dalla memorizzazione nella cache dei metadati.

Se non abiliti la memorizzazione nella cache dei metadati, le query sulla tabella devono leggere l'origine dati esterna per ottenere i metadati degli oggetti. 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 abiliti la memorizzazione nella cache dei metadati, le query possono evitare di elencare i file dall'origine dati esterna e possono partizionare ed eliminare i file più rapidamente.

Esistono due proprietà che controllano questa funzionalità:

  • Massima inattività: specifica quando le query utilizzano i metadati memorizzati nella cache.
  • La modalità cache dei metadati specifica in che modo vengono raccolti i metadati.

Se hai abilitato la memorizzazione nella cache dei metadati, specifichi l'intervallo massimo di inattività dei metadati accettabile per le operazioni sulla tabella. Ad esempio, se specifichi un intervallo di 1 ora, le operazioni eseguite sulla tabella utilizzano i metadati memorizzati nella cache se sono stati aggiornati nell'ultima ora. Se i metadati memorizzati nella cache sono più vecchi di questo valore, l'operazione utilizza il 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, solitamente compreso 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 attivare l'aggiornamento al termine 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 emetti più aggiornamenti manuali simultanei, solo uno avrà esito positivo.

Se non viene aggiornata, la cache dei metadati scade dopo 7 giorni.

Sia gli aggiornamenti manuali che quelli automatici della cache vengono eseguiti con la priorità delle query INTERACTIVE.

Se scegli di utilizzare gli aggiornamenti automatici, ti consigliamo di creare una prenotazione, quindi creare 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 potrebbero non riuscire se non sono disponibili risorse sufficienti.

Prima di impostarli, devi considerare come interagiranno i valori dell'intervallo di inattività e della modalità di memorizzazione nella cache dei metadati. Considera i seguenti esempi:

  • Se aggiorni manualmente la cache dei metadati per una tabella e imposti l'intervallo di inattività su due giorni, devi eseguire la procedura di sistema BQ.REFRESH_EXTERNAL_METADATA_CACHE ogni due giorni o meno se vuoi che le operazioni sulla tabella utilizzino i metadati memorizzati nella cache.
  • Se aggiorni automaticamente la cache dei metadati per una tabella e imposti l'intervallo di inattività su 30 minuti, è possibile che alcune operazioni sulla tabella vengano lette da Cloud Storage se l'aggiornamento della cache dei metadati dura più a lungo della consueta finestra di 30-60 minuti.

Per trovare informazioni sui job di aggiornamento dei metadati, esegui una query sulla vista 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 Memorizzazione nella cache dei metadati.

Per ulteriori informazioni sull'impostazione delle opzioni di memorizzazione nella cache dei metadati, consulta Creare tabelle di oggetti.

Limitazioni

  • Le tabelle degli oggetti sono di sola lettura, poiché mappano a oggetti di dati non strutturati in Cloud Storage. Non puoi modificare una tabella di oggetti né modificare i dati della tabella degli oggetti.
  • Il supporto delle tabelle degli 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 e dati di oggetti tramite URL firmati, solo 10 GB di quei 100 TB possono provenire dalle colonne di metadati.
  • Le tabelle degli 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 di BigQuery. Per ulteriori informazioni, consulta Quote.
  • Le funzioni remote che elaborano dati non strutturati provenienti dalle tabelle di oggetti sono soggette alle stesse limitazioni delle altre funzioni remote.
  • Gli URL firmati generati per gli oggetti nelle tabelle di un oggetto scadono dopo 6 ore, ovvero il limite di tempo di esecuzione della 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 di oggetti:

Se hai prenotazioni di slot, non ti viene addebitato alcun costo per l'esecuzione di query sulle tabelle esterne. Per queste query vengono invece consumati gli slot.

La seguente tabella mostra in che modo il modello di determinazione del prezzo influisce sulla modalità di applicazione di questi costi:


Prezzi on demand

Versioni Standard, Enterprise ed Enterprise Plus

Query

Ti vengono fatturati i byte elaborati dalle query degli utenti.

Gli slot nelle assegnazioni di prenotazione con un tipo di job QUERY vengono consumati durante la query.

Aggiorna manualmente la cache dei metadati.

Per aggiornare la cache ti vengono fatturati i byte elaborati.

Gli slot nelle assegnazioni di prenotazione con un tipo di job QUERY vengono consumati durante l'aggiornamento della cache.

Aggiornamento automatico della cache dei metadati.

Per aggiornare la cache ti vengono fatturati i byte elaborati.

Gli slot nelle assegnazioni di prenotazione con un tipo di job BACKGROUND vengono consumati durante l'aggiornamento della cache.

Se non sono disponibili prenotazioni BACKGROUND per l'aggiornamento della cache dei metadati, BigQuery utilizza automaticamente gli slot nelle prenotazioni QUERY se utilizzi la versione Enterprise o Enterprise Plus.

Utilizzare le 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 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. I sottoscrittori possono eseguire query su tutte le tabelle nel set di dati collegato, comprese tutte le tabelle di oggetti. Per ulteriori informazioni, vedi Abbonarsi a una scheda.

Passaggi successivi