Introduzione alle tabelle di oggetti

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

Le tabelle degli oggetti consentono di analizzare i dati non strutturati in di archiviazione ideale 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 per le tabelle BigLake, le tabelle di oggetti utilizzano la delega di accesso, che disaccoppia l'accesso alla tabella degli oggetti dall'accesso oggetti Cloud Storage. Un connessione esterna associati a un account di servizio vengono utilizzati per la connessione a Cloud Storage, quindi 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 di metadati sugli oggetti di dati non strutturati in di 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 visualizzato 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 formatogs://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 la modalità BigQuery ML per eseguire l'inferenza sull'oggetto immagine tabelle con TensorFlow, modelli TensorFlow Lite e PyTorch. Puoi usare anche il telecomando funzioni per analizzare dati non strutturati praticamente in tutti i modi che vuoi ottenere. Ad esempio, potresti creare una funzione remota che ti consenta di analizzare le immagini con Cloud Vision o un'applicazione che ti consente di estrarre metadati da documenti PDF utilizzando Apache Tika.

La tabella seguente descrive i punti di integrazione che puoi usare per eseguire apprendimento sui dati delle tabelle di 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: esegui l'inferenza su una tabella di oggetti utilizzando un modello di vettore di caratteristiche
Funzioni Cloud Run Utilizzare le funzioni di Cloud Run per chiamare servizi o modelli ospitati. Questa è l'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 processori di documenti preaddestrati o personalizzati 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 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, l'istruzione seguente 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
);

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 eseguire ricerche nei risultati dell'analisi. Ad esempio, l'istruzione seguente crea un indice di ricerca per i 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

Analizzare i dati non strutturati in modo nativo in BigQuery offre i seguenti vantaggi:

  • Riduce lo sforzo manuale consentendo di automatizzare le fasi di pre-elaborazione come delle immagini in base ai requisiti dei modelli.
  • 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 anche passare URL firmati a funzioni remote per consentirne l'uso con 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']);

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. URL firmati generati scadono dopo sei ore. Per ulteriori informazioni, vedi 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, l'accesso alla tabella viene disaccoppiato dall'accesso allo store di oggetti sottostante 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. Tu concedere agli utenti le autorizzazioni solo nella tabella, dove puoi gestire l'accesso ai dati in base a utilizzando Identity and Access Management (IAM) e 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 su un che limita l'accesso di un utente o di un gruppo ai metadati dell'oggetto nelle righe selezionate, nonché agli oggetti rappresentati da tali 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:

  • Esecuzione solo della query SELECT * FROM my_dataset.my_object_table; restituisce 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 con un valore updated 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 valore updated precedente al 25 giugno 2022.

Puoi anche limitare l'accesso alle righe della tabella degli oggetti 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

I seguenti ruoli organizzativi sono generalmente coinvolti nella gestione utilizzando le tabelle di oggetti:

  • Amministratori del data lake. Questi amministratori in genere gestiscono Criteri IAM (Identity and Access Management) sui bucket Cloud Storage e di oggetti strutturati.
  • 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 dei data lake sono responsabili della creazione delle connessioni e della condivisione con gli amministratori del data warehouse. A sua volta, il data warehouse creano tabelle, impostano controlli di accesso appropriati e condividono con analisti di dati.

File oggetto 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 di inferenza e tipi di analisi delle 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. Query con un numero elevato di file e con Hive i filtri di partizione traggono il massimo vantaggio dalla memorizzazione nella cache dei metadati.

Se non abiliti la memorizzazione nella cache dei metadati, le query sulla tabella devono leggere un'origine dati esterna per ottenere 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 attivi la memorizzazione nella cache dei metadati, le query possono evitare di elencare i file dall'origine dati esterna e può eseguire il partizionamento ed eliminare 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 in base a un sistema definito intervallo, solitamente compreso tra 30 e 60 minuti. Aggiornamento di Cache è un buon approccio se i file Cloud Storage vengono aggiunti, eliminati o modificati a caso intervalli. Se devi controllare la tempistica dell'aggiornamento, ad esempio per per attivare l'aggiornamento al termine di un job di estrazione, trasformazione e caricamento, utilizzando aggiornamento manuale.
  • Per gli aggiornamenti manuali, esegui Sistema BQ.REFRESH_EXTERNAL_METADATA_CACHE procedura per aggiornare la cache dei metadati in base a una pianificazione che soddisfi i tuoi requisiti. Aggiornare manualmente la cache è un buon approccio se i file Cloud Storage vengono aggiunti, eliminati o modificati a intervalli noti 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 reservation (prenotazione), quindi creare una compito con un tipo di prestazione 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 i seguenti esempi:

  • 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 INFORMATION_SCHEMA.JOBS visualizzazione, 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 degli oggetti né modificare la tabella degli oggetti e i dati di Google Cloud.
  • 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, e la tabella degli 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 oggetti metadati. 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 degli oggetti sono soggette alle stesse limitazioni di tutte le altre Tabelle BigQuery esterne. Per ulteriori informazioni, vedi Quote.
  • Le query sulle tabelle di oggetti sono soggette alle stesse limitazioni di tutte le altre query BigQuery. Per ulteriori informazioni, vedi 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.
  • Inferenza con BigQuery ML non è supportato 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. Vengono invece consumati slot per questi 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 viene addebitato il costo dei byte elaborati dalle query degli utenti.

Slot a assegnazioni di prenotazione con un tipo di job QUERY vengono consumate durante la query.

Aggiornare manualmente la cache dei metadati.

Ti vengono addebitati i byte elaborati per aggiornare la cache.

Slot nelle assegnazioni delle prenotazioni con un QUERY tipo di job vengono utilizzati durante l'aggiornamento della cache.

Aggiornamento automatico della cache dei metadati.

Ti viene addebitato il costo dei byte elaborate per aggiornare la cache.

Slot a assegnazioni di prenotazione con un tipo di job BACKGROUND vengono consumate durante l'aggiornamento della cache.

Se non sono disponibili prenotazioni BACKGROUND per l'aggiornamento cache dei metadati, BigQuery utilizza automaticamente gli slot QUERY prenotazioni invece 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.

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 di Analytics Hub. Gli iscritti ad Analytics Hub possono iscriversi a questi di schede, che eseguono il provisioning di un set di dati di sola lettura, chiamato , in del 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