Introduzione alle tabelle degli oggetti

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

Le tabelle degli oggetti consentono di analizzare dati non strutturati in Cloud Storage. Puoi eseguire analisi con funzioni remote o eseguire l'inferenza utilizzando BigQuery ML e poi unire i risultati di queste operazioni al resto dei dati strutturati in BigQuery.

Come le tabelle BigLake, le tabelle degli 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, mentre le colonne della tabella corrispondono ai metadati degli oggetti generati da Cloud Storage, inclusi eventuali metadati personalizzati.

Una tabella di oggetti contiene anche una pseudo-colonna data che rappresenta il contenuto del file in byte non elaborati, che viene compilata automaticamente quando viene creata la 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 tabella seguente descrive lo schema fisso utilizzato dalle tabelle di oggetti:

Nome campo Tipo Modalità Description
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 supporto. 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 maggiori informazioni sull'utilizzo dell'hash MD5, consulta Hash ed ETag di Cloud Storage.
updated TIMESTAMP NULLABLE L'ultima volta che i metadati dell'oggetto sono stati modificati.
metadata RECORD RIPETUTO Metadati personalizzati per l'oggetto. Ogni porzione di metadati è rappresentata come una coppia chiave-valore nei campi secondari (metadata.)name e (metadata.)value del campo metadata.
(metadata.)name STRING NULLABLE Chiave in una singola voce di metadati.
(metadata.)value STRING NULLABLE Valore in una singola voce di metadati.

Le righe in una tabella degli 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 nello stesso modo in cui eseguiresti la 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 degli oggetti immagine con i modelli TensorFlow, TensorFlow Lite e PyTorch. Puoi anche utilizzare funzioni remote per analizzare i dati non strutturati quasi come 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 metadati dai documenti PDF utilizzando Apache Tika.

La seguente tabella descrive i punti di integrazione che puoi utilizzare per eseguire il machine learning con i dati della tabella degli oggetti:

Integrazione Description 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: eseguire l'inferenza su una tabella degli oggetti utilizzando un modello di vettore delle caratteristiche
Cloud Functions Utilizzare Cloud Functions per chiamare servizi o modelli ospitati. Questa è l'integrazione più generica. Stai ospitando in autonomia 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. Annotare le immagini con la funzione ML.ANNOTATE_IMAGE
La funzione ML.PROCESS_DOCUMENT Utilizza l'API Document AI per estrarre insight sui documenti. Vuoi utilizzare Processori di documenti preaddestrati o personalizzati di Document AI. Elaborare documenti con la funzione ML.PROCESS_DOCUMENT
La funzione ML.TRANSCRIBE Utilizza l'API Speech-to-Text per trascrivere i file audio. Vuoi utilizzare riconoscimento vocale preaddestrati o personalizzati di Speech-to-Text. Trascrivere i file audio con la funzione ML.TRANSCRIBE

Puoi creare una vista o una tabella dai risultati dell'analisi se vuoi unire i risultati 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 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 potenziare le ricerche sui 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 nei risultati:

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

Vantaggi

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

  • Riduce lo sforzo manuale consentendoti di automatizzare i passaggi 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.
  • Consente di risparmiare sui costi utilizzando gli slot BigQuery esistenti invece di dover eseguire il provisioning di nuove forme di computing.

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 trasmettere gli URL firmati alle funzioni remote per consentire loro di utilizzare i dati della tabella 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']);

Vengono restituiti risultati simili ai seguenti:

---------------------------------------------------------------------------------------------------
|  uri                 | signed_url                                                               |
—--------------------------------------------------------------------------------------------------
| gs://mybucket/a.docx | https://storage.googleapis.com/mybucket/a.docx?X-Goog-SignedHeaders=abcd |
—-------------------------------------------------------------------------------------------------
| gs://mybucket/b.pdf  | https://storage.googleapis.com/mybucket/b.pdf?X-Goog-SignedHeaders=wxyz  |
—--------------------------------------------------------------------------------------------------

Gli URL firmati generati dalle tabelle degli oggetti consentono a qualsiasi utente o procedura che li possiede di leggere gli oggetti corrispondenti. Gli URL firmati generati scadono dopo 6 ore. Per maggiori informazioni, consulta la pagina relativa agli URL firmati di Cloud Storage.

Controllo dell'accesso

Le tabelle degli oggetti sono create su BigLake e 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 di accesso. Devi concedere all'account di servizio le autorizzazioni per accedere a dati e metadati dagli oggetti e visualizzarli nella tabella. Concedi agli utenti le autorizzazioni solo nella tabella, dove 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 tabelle che utilizzano la delega di accesso, in quanto l'accesso a una riga di una tabella degli oggetti consente di accedere ai contenuti dei file sottostanti. Anche se un utente non può accedere direttamente all'oggetto, può generare un URL firmato che gli consenta di vedere 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 è l'immagine di una margherita.

L'impostazione di un criterio di accesso a livello di riga su una tabella degli 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 consente all'utente Alice di accedere 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, i seguenti risultati sono veri per Alice:

  • L'esecuzione della query SELECT * FROM my_dataset.my_object_table; restituisce solo le righe che hanno un valore updated prima del 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 solo URL per gli oggetti che hanno un valore updated prima del 25 giugno 2022.

Puoi anche limitare l'accesso alle righe della tabella dell'oggetto utilizzando 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

Nella gestione e nell'utilizzo delle tabelle degli oggetti sono generalmente coinvolti i seguenti ruoli organizzativi:

  • Amministratori di data lake. Questi amministratori in genere gestiscono i criteri IAM (Identity and Access Management) sui bucket e sugli oggetti Cloud Storage.
  • Amministratori di data warehouse. Questi amministratori in genere creano, eliminano e aggiornano le tabelle.
  • Analisti di dati. Gli analisti in genere 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 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 qualsiasi tipo e dimensione di file di dati non strutturati, nonché creare funzioni remote per lavorare con qualsiasi tipo di dati non strutturati. Tuttavia, per eseguire l'inferenza con BigQuery ML, una tabella di oggetti può essere sovrapposta a file immagine che soddisfano diversi requisiti di dimensioni e tipo. Per ulteriori informazioni, consulta la sezione Limitazioni.

Memorizzazione nella cache dei metadati per migliorare le prestazioni

Puoi utilizzare i metadati memorizzati nella cache per migliorare le prestazioni dell'inferenza e altri tipi di analisi sulle tabelle degli oggetti. È particolarmente utile nei casi in cui la tabella degli oggetti fa riferimento a un numero elevato di oggetti.

Le tabelle BigLake e di oggetti supportano i metadati di memorizzazione nella cache dei file da origini dati esterne come Cloud Storage e Amazon Simple Storage Service (Amazon S3). I metadati includono nomi dei file, informazioni sul partizionamento e metadati fisici dei file, come il numero di righe. Puoi scegliere se attivare o meno la memorizzazione nella cache dei metadati su una tabella. Le query con un numero elevato di file e con filtri di partizione Hive traggono maggiore vantaggio dalla memorizzazione nella cache dei metadati.

Se non abiliti la memorizzazione nella cache dei metadati, le query nella tabella devono leggere l'origine dati esterna per ottenere i metadati degli oggetti che aumentano la latenza delle query. La creazione di elenchi 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 dell'origine dati esterna e ottenere un'eliminazione più rapida delle partizioni e dei file.

Esistono due proprietà che controllano questa funzionalità:

  • Inattività massima, che controlla quando le query utilizzano i metadati memorizzati nella cache.
  • Modalità cache dei metadati, che controlla il modo in cui i metadati vengono raccolti.

Se la memorizzazione nella cache dei metadati è abilitata, devi specificare l'intervallo massimo di inattività 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'ultima ora. Se i metadati memorizzati nella cache sono precedenti, l'operazione esegue invece 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, di solito tra 30 e 60 minuti. L'aggiornamento automatico della cache è un buon approccio se i file nell'origine dati esterna vengono aggiunti, eliminati o modificati a intervalli casuali. Se hai bisogno di 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, esegui la procedura di sistema 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 contemporanei, solo uno avrà esito positivo.

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

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 di 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 richiede il lato più lungo della solita 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 la sezione Memorizzazione nella cache dei metadati.

Per ulteriori informazioni sull'impostazione delle opzioni di memorizzazione nella cache per una tabella di oggetti, consulta Creare una tabella di oggetti.

Limitazioni

  • Le tabelle degli oggetti sono di sola lettura perché sono mappate a oggetti di dati non strutturati in Cloud Storage. Non puoi modificare una tabella degli oggetti o modificare i dati della tabella degli oggetti.
  • Il supporto della tabella degli oggetti non è disponibile in SQL precedente o in altri ambienti cloud come AWS e Microsoft Azure.
  • Se vuoi eseguire l'inferenza utilizzando BigQuery ML, il modello e la tabella degli oggetti che utilizzi devono soddisfare i requisiti descritti nella sezione 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 degli oggetti e dati degli oggetti tramite URL firmati, solo 10 GB dei 100 TB possono provenire dalle colonne dei metadati.
  • Le tabelle degli oggetti sono soggette alle stesse limitazioni di tutte le altre tabelle BigQuery. Per maggiori informazioni, consulta Quote.
  • Le query sulle tabelle degli oggetti sono soggette alle stesse limitazioni di tutte le altre query di BigQuery. Per maggiori informazioni, consulta Quote.
  • Le funzioni remote che elaborano dati non strutturati delle tabelle degli oggetti sono soggette alle stesse limitazioni di tutte le 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 degli 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 utilizzati gli slot.

La tabella seguente mostra in che modo il modello di determinazione del prezzo influisce sull'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 il tempo della query.

Aggiornamento manuale della cache dei metadati.

Ti vengono fatturati i byte elaborati per aggiornare la cache.

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.

Ti vengono fatturati i byte elaborati per aggiornare la cache.

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

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

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 abbonarsi 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 degli oggetti. Per ulteriori informazioni, consulta la sezione Abbonarsi a una scheda.

Passaggi successivi