Utilizzare i contesti degli oggetti

I contesti degli oggetti sono coppie chiave-valore personalizzate che puoi collegare agli oggetti Cloud Storage. Puoi utilizzare i contesti degli oggetti per classificare i dati, monitorare i workflow di elaborazione e contribuire ad arricchire gli oggetti con i metadati. Questi contesti persistono quando copi, componi o ripristini gli oggetti.

Questa pagina descrive come collegare e gestire i contesti sugli oggetti Cloud Storage.

Ottieni i ruoli richiesti

Per ottenere le autorizzazioni necessarie per creare e gestire i contesti degli oggetti, chiedi all'amministratore di concederti i seguenti ruoli IAM sull'oggetto:

  • Crea oggetti con contesti: Creatore oggetti Storage (roles/storage.objectCreator)
  • Allegare, aggiornare, visualizzare ed eliminare i contesti dagli oggetti e visualizzare le rappresentazioni complete del contesto (inclusi i dati estesi): Utente oggetto di archiviazione (roles/storage.objectUser)
  • Visualizza chiavi e valori di contesto: Storage Object Viewer (roles/storage.objectViewer)
  • Elimina i contesti degli oggetti durante le operazioni di riscrittura, copia e composizione: Storage Legacy Object Owner (roles/storage.legacyObjectOwner)

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Questi ruoli predefiniti contengono le autorizzazioni necessarie per creare e gestire i contesti degli oggetti. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

Per creare e gestire i contesti degli oggetti sono necessarie le seguenti autorizzazioni:

  • Crea un oggetto con i contesti degli oggetti:
    • storage.objects.create
    • storage.objects.createContext
  • Collega, aggiorna ed elimina i contesti degli oggetti:
    • storage.objects.update
    • storage.objects.createContext
    • storage.objects.updateContext
    • storage.objects.deleteContext
  • Elimina contesti degli oggetti: storage.objects.dropContexts
  • Visualizza i contesti degli oggetti:
    • storage.objects.get
    • storage.objects.list
  • Visualizza il contesto completo di un oggetto, inclusi i dati estesi (Anteprima): storage.objects.viewFullContext

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Requisiti di denominazione per le coppie chiave-valore

Sia le chiavi sia i valori per i contesti personalizzati devono soddisfare i seguenti requisiti:

  • Deve avere una lunghezza compresa tra 1 e 256 caratteri inclusi.

  • Deve iniziare con un carattere alfanumerico.

  • Deve essere un carattere UTF-8 valido. La maggior parte dei caratteri UTF-8 è supportata, ad eccezione dei seguenti caratteri:

    • Virgolette singole (')

    • Virgolette doppie (")

    • Barra rovesciata (\)

    • Barra (/)

  • Le chiavi di contesto che iniziano con il prefisso google: (ad esempio google:annotation:face-detector-v1) sono riservate ai contesti generati da Google. Non puoi creare nuovi contesti con il prefisso google: o modificarne i valori. Se provi a farlo, Cloud Storage restituisce l'errore INVALID_ARGUMENT. Per rimuovere i contesti con il prefisso google:, devi ignorarli utilizzando il parametro dropContextGroups durante un'operazione di riscrittura.

Allegare contesti a nuovi oggetti

Allega contesti agli oggetti quando carichi nuovi oggetti nei bucket Cloud Storage. Ogni contesto è costituito da una chiave e un valore.

Console

  1. Nella console Google Cloud , vai alla pagina Bucket in Cloud Storage.

    Vai a Bucket

  2. Carica l'oggetto.

  3. Segui i passaggi per allegare contesti all'oggetto.

Riga di comando

Per allegare contesti quando carichi oggetti con il comando gcloud storage cp, utilizza il flag --custom-contexts:

gcloud storage cp OBJECT_LOCATION gs://DESTINATION_BUCKET_NAME --custom-contexts=KEY=VALUE,...

Dove:

  • OBJECT_LOCATION è il percorso locale dell'oggetto. Ad esempio, Desktop/employees.txt.
  • DESTINATION_BUCKET_NAME è il nome del bucket in cui stai caricando l'oggetto. Ad esempio, my-bucket.
  • KEY è la chiave di contesto da collegare a un oggetto. Ad esempio, Department. Puoi specificare più coppie chiave-valore separate da virgole.
  • VALUE è il valore da associare alla chiave di contesto. Ad esempio, Human resources.

In alternativa, crea un file JSON contenente i contesti che vuoi allegare agli oggetti e utilizza il flag --custom-contexts-file:

  {
    "KEY": {
      "value": "VALUE"
    },
    ...
  }

Dove:

  • KEY è la chiave di contesto da collegare a un oggetto. Ad esempio, Department. Puoi specificare più coppie chiave-valore.
  • VALUE è il valore da associare alla chiave di contesto. Ad esempio, Human resources.

Per collegare i contesti quando carichi directory con il comando gcloud storage rsync, utilizza il flag --custom-contexts o il flag --custom-contexts-file:

gcloud storage rsync DIRECTORY_LOCATION gs://DESTINATION_BUCKET_NAME --recursive --custom-contexts=KEY=VALUE,...

Dove:

  • DIRECTORY_LOCATION è il percorso locale della tua directory. Ad esempio, ~/my_directory.
  • DESTINATION_BUCKET_NAME è il nome del bucket in cui stai caricando la directory. Ad esempio, my-bucket.
  • KEY è la chiave di contesto da allegare agli oggetti. Ad esempio, Department. Puoi specificare più coppie chiave-valore separate da virgole.
  • VALUE è il valore da associare alla chiave di contesto. Ad esempio, Human resources.

API JSON

Per collegare i contesti agli oggetti quando carichi nuovi oggetti, utilizza uno dei seguenti metodi:

Come parte dei metadati dell'oggetto in formato JSON, includi il campo contexts:

  {
    "contexts": {
      "custom": {
        "KEY": {
          "value": "VALUE"
        },
        ...
      }
    }
  }

Dove:

  • KEY è la chiave del contesto da allegare a un oggetto. Ad esempio, Department. Puoi specificare più coppie chiave-valore nell'oggetto custom.
  • VALUE è il valore da associare alla chiave di contesto. Ad esempio, Human resources.

Collega o modifica i contesti di un oggetto esistente

Puoi collegare nuovi contesti agli oggetti o aggiornare i contesti esistenti nei bucket Cloud Storage.

Solo i servizi Google, come i job di arricchimento degli oggetti, possono generare e allegare contesti con dati estesi, che utilizzano il prefisso della chiave google: riservato. Non puoi allegare dati estesi ai contesti definiti dall'utente e non puoi creare o modificare chiavi di contesto che iniziano con il prefisso google:. Se tenti di creare o modificare chiavi google:, Cloud Storage restituisce un errore INVALID_ARGUMENT.

Se un contesto esistente include dati estesi, Cloud Storage lo conserva nell'oggetto aggiornato durante le operazioni di aggiornamento e patch. L'impostazione di un valore di contesto su null elimina solo i contesti che non hanno dati estesi. Per visualizzare i dati estesi, consulta Visualizzare il contesto completo dell'oggetto. Per rimuovere un contesto con dati estesi, inclusi i contesti con il prefisso google:, devi ignorarlo utilizzando il parametro dropContextGroups durante un'operazione di riscrittura.

Console

  1. Nella console Google Cloud , vai alla pagina Bucket in Cloud Storage.

    Vai a Bucket

  2. Nell'elenco dei bucket, fai clic sul nome del bucket contenente l'oggetto.

  3. Vai all'oggetto e poi fai clic su Apri il menu extra dell'oggetto.

  4. Fai clic su Modifica contesti.

  5. Nel riquadro Modifica contesti, esegui una delle seguenti operazioni:

    • Aggiungi un nuovo contesto dell'oggetto:

      1. Fai clic su Aggiungi un contesto personalizzato.

      2. Nei campi Chiave contesto oggetto e Valore contesto oggetto, inserisci una nuova coppia chiave-valore.

      3. Fai clic su Fine.

      4. (Facoltativo) Per aggiungere altri contesti di oggetti, fai clic su Aggiungi un contesto personalizzato, ripeti i passaggi precedenti e poi fai clic su Salva.

    • Modifica un contesto dell'oggetto:

      1. Fai clic sul contesto dell'oggetto.

      2. Aggiorna il campo Chiave del contesto dell'oggetto, il campo Valore del contesto dell'oggetto o entrambi.

      3. Fai clic su Fine e poi su Salva.

    • Elimina un contesto dell'oggetto:

      Fai clic su Elimina, quindi su Salva.

Riga di comando

Utilizza il comando gcloud storage objects update:

gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME CUSTOM_CONTEXTS_FLAG

Dove:

  • BUCKET_NAME è il nome del bucket che contiene l'oggetto per cui vuoi modificare il contesto. Ad esempio, my-bucket.
  • OBJECT_NAME è il nome dell'oggetto. Ad esempio, employees.txt.
  • CUSTOM_CONTEXTS_FLAG è uno dei seguenti flag:

    • Per sostituire tutti i contesti esistenti, utilizza --custom-contexts=KEY=VALUE,... o --custom-contexts-file=CUSTOM_CONTEXTS_FILE

      Dove:

      • KEY è la chiave di contesto da allegare a un oggetto. Ad esempio, Department. Puoi specificare più coppie chiave-valore separate da virgole.
      • VALUE è il valore da associare alla chiave di contesto. Ad esempio, Human resources.
      • CUSTOM_CONTEXTS_FILE è il percorso del file JSON o YAML che contiene i contesti che vuoi collegare all'oggetto.
    • Per eliminare tutti i contesti esistenti, utilizza il flag --clear-custom-contexts.

    • Per aggiungere, modificare o eliminare singoli contesti, utilizza una combinazione di --update-custom-contexts=KEY=VALUE,... e --remove-custom-contexts=KEY,...

      Dove:

      • KEY è la chiave di contesto che vuoi allegare a un oggetto o eliminare da un oggetto. Ad esempio, Department.
      • VALUE è il valore da associare alla chiave di contesto che vuoi allegare a un oggetto o eliminare da un oggetto. Ad esempio, Human resources.

Se l'operazione ha esito positivo, la risposta è simile al seguente esempio:

Patching gs://my-bucket/employees.txt#1560574162144861...
  Completed 1

Librerie client

Java

Per saperne di più, consulta la documentazione di riferimento dell'API Cloud Storage Java.

Per eseguire l'autenticazione in Cloud Storage, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.


import com.google.cloud.storage.Blob;
import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.BlobInfo;
import com.google.cloud.storage.BlobInfo.ObjectContexts;
import com.google.cloud.storage.BlobInfo.ObjectCustomContextPayload;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
import com.google.common.collect.Maps;
import java.util.Map;

public class SetObjectContexts {
  public static void setObjectContexts(
      String projectId, String bucketName, String objectName, String key, String value)
      throws Exception {
    // The ID of your GCP project
    // String projectId = "your-project-id";

    // The ID of your GCS bucket
    // String bucketName = "your-unique-bucket-name";

    // The ID of your GCS object
    // String objectName = "your-object-name";

    // The context key-value you want to add
    // String key = "your-context-key";
    // String value = "your-context-value";

    try (Storage storage =
        StorageOptions.newBuilder().setProjectId(projectId).build().getService()) {
      BlobId blobId = BlobId.of(bucketName, objectName);
      Blob blob = storage.get(blobId);
      if (blob == null) {
        System.out.println("The object " + objectName + " was not found in " + bucketName);
        return;
      }

      // Recommended: Set a generation-match precondition to avoid potential race
      // conditions and data corruptions. The request to update returns a 412 error if
      // the object's generation number does not match your precondition.
      Storage.BlobTargetOption precondition = Storage.BlobTargetOption.generationMatch();

      // This section demonstrates how to upsert, delete all, and delete a specific context.

      // To upsert a context (if the key already exists, its value is replaced;
      // otherwise, a new key-value pair is added):
      ObjectCustomContextPayload payload =
          ObjectCustomContextPayload.newBuilder().setValue(value).build();
      Map<String, ObjectCustomContextPayload> custom = Maps.newHashMap();
      custom.put(key, payload);
      ObjectContexts contexts = ObjectContexts.newBuilder().setCustom(custom).build();

      /*
       * To delete all existing contexts:
       * ObjectContexts contexts = ObjectContexts.newBuilder().setCustom(null).build();
       */

      /*
       * To delete a specific key from the context:
       * Map<String, ObjectCustomContextPayload> custom = Maps.newHashMap();
       * custom.put(key, null);
       * ObjectContexts contexts = ObjectContexts.newBuilder().setCustom(custom).build();
       */
      BlobInfo pendingUpdate = blob.toBuilder().setContexts(contexts).build();
      storage.update(pendingUpdate, precondition);

      System.out.println(
          "Updated custom contexts for object " + objectName + " in bucket " + bucketName);
    }
  }
}

Rust

use google_cloud_storage::client::StorageControl;
use google_cloud_storage::model::ObjectContexts;
use google_cloud_wkt::FieldMask;

pub async fn sample(client: &StorageControl, bucket_id: &str) -> anyhow::Result<()> {
    const NAME: &str = "object-with-contexts";
    let object = client
        .get_object()
        .set_bucket(format!("projects/_/buckets/{bucket_id}"))
        .set_object(NAME)
        .send()
        .await?;

    let metageneration = object.metageneration;
    let mut custom = object.contexts.clone().unwrap_or_default().custom;
    custom.entry("example".to_string()).or_default().value = "true".into();

    let updated = client
        .update_object()
        .set_if_metageneration_match(metageneration)
        .set_object(object.set_contexts(ObjectContexts::new().set_custom(custom)))
        .set_update_mask(FieldMask::default().set_paths(["contexts.custom.example"]))
        .send()
        .await?;
    println!(
        "successfully set contexts for object {NAME} in bucket {bucket_id}: {:?}",
        updated.contexts
    );
    Ok(())
}

API JSON

  1. Avere gcloud CLI installata e inizializzata, il che ti consente di generare un token di accesso per l'intestazione Authorization.

  2. Crea un file JSON contenente le impostazioni dell'oggetto, che deve includere i campi di configurazione contexts per l'oggetto.

    Per aggiungere, modificare o sovrascrivere i contesti esistenti, utilizza il seguente formato:

      {
        "contexts": {
          "custom": {
            "KEY": {
              "value": "VALUE"
            },
            ...
          }
        }
      }

    Dove:

    • KEY è la chiave di contesto da collegare a un oggetto. Ad esempio, Department. Puoi specificare più coppie chiave-valore nell'oggetto custom.
    • VALUE è il valore da associare alla chiave di contesto. Ad esempio, Human resources.

    Per eliminare tutti i contesti esistenti, utilizza il seguente formato:

      {
        "contexts": {
          "custom": null
        }
      }

    Per eliminare una chiave specifica dal contesto, utilizza il seguente formato:

      {
        "contexts": {
          "custom": {
            "KEY": null,
            ...
          }
        }
      }

    Dove:

    KEY è la chiave di contesto che vuoi eliminare da un oggetto. Ad esempio, Department. Puoi specificare più chiavi da eliminare dall'oggetto custom.

  3. Utilizza cURL per chiamare l'API JSON con una richiesta oggetto PATCH:

    curl -X PATCH --data-binary @JSON_FILE_NAME \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/OBJECT_NAME"

    Dove:

    • JSON_FILE_NAME è il percorso del file che include le informazioni sui contesti degli oggetti.
    • BUCKET_NAME è il nome del bucket che contiene l'oggetto per il quale vuoi modificare il contesto. Ad esempio, my-bucket.
    • OBJECT_NAME è il nome dell'oggetto codificato nell'URL. Ad esempio, employees.txt.

In alternativa, puoi sostituire il contesto di un oggetto con una richiesta PUT Object. La richiesta dell'oggetto PUT sostituisce anche altri metadati dell'oggetto. Pertanto, non consigliamo di utilizzare la richiesta di oggetti PUT.

Visualizzare i contesti degli oggetti

Puoi visualizzare i contesti di un oggetto elencando i metadati dell'oggetto o descrivendo un oggetto specifico.

Console

  1. Nella console Google Cloud , vai alla pagina Bucket in Cloud Storage.

    Vai a Bucket

  2. Nell'elenco dei bucket, fai clic sul nome del bucket che contiene l'oggetto con i contesti che vuoi visualizzare.

  3. Vai all'oggetto e fai clic sul suo nome.

    Nella pagina Dettagli oggetto, le coppie chiave/valore per tutti i contesti allegati sono elencate nella sezione Contesti oggetto.

Riga di comando

Utilizza il comando gcloud storage objects describe:

gcloud storage objects describe gs://BUCKET_NAME/OBJECT_NAME

Dove:

  • BUCKET_NAME è il nome del bucket contenente l'oggetto. Ad esempio, my-bucket.
  • OBJECT_NAME è il nome dell'oggetto. Ad esempio, employees.txt.

Se l'operazione ha esito positivo, la risposta è simile al seguente esempio:

bucket: my-bucket
contexts:
  custom:
    Department:
      createTime: '2023-01-01T00:00:00.000000+00:00'
      type: CUSTOM
      updateTime: '2023-01-01T00:00:00.000000+00:00'
      value: Human resources
    google:annotation:face-detector-v1:
      createTime: '2025-09-29T17:20:00.000000+00:00'
      extendedDataTypeUrl: type.googleapis.com/google.protobuf.Struct
      type: CUSTOM
      updateTime: '2025-09-29T17:20:00.000000+00:00'
      value: SUCCESS
name: employees.txt

Librerie client

Java

Per saperne di più, consulta la documentazione di riferimento dell'API Cloud Storage Java.

Per eseguire l'autenticazione in Cloud Storage, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.


import com.google.cloud.storage.Blob;
import com.google.cloud.storage.BlobInfo.ObjectContexts;
import com.google.cloud.storage.BlobInfo.ObjectCustomContextPayload;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
import java.util.Map;

public class GetObjectContexts {
  public static void getObjectContexts(String projectId, String bucketName, String objectName)
      throws Exception {
    // The ID of your GCP project
    // String projectId = "your-project-id";

    // The ID of your GCS bucket
    // String bucketName = "your-unique-bucket-name";

    // The ID of your GCS object
    // String objectName = "your-object-name";

    try (Storage storage =
        StorageOptions.newBuilder().setProjectId(projectId).build().getService()) {

      Blob blob = storage.get(bucketName, objectName);
      if (blob == null) {
        System.out.println("The object " + objectName + " was not found in " + bucketName);
        return;
      }
      ObjectContexts objectContexts = blob.getContexts();

      if (objectContexts != null) {
        Map<String, ObjectCustomContextPayload> customContexts = objectContexts.getCustom();
        if (customContexts == null) {
          System.out.println("No custom contexts found for object: " + objectName);
          return;
        }
        // Print blob's object contexts
        System.out.println("\nCustom Contexts:");
        for (Map.Entry<String, ObjectCustomContextPayload> custom : customContexts.entrySet()) {
          System.out.println(custom.getKey() + "=" + custom.getValue());
        }
      }
    }
  }
}

Rust

use google_cloud_storage::client::StorageControl;

pub async fn sample(client: &StorageControl, bucket_id: &str) -> anyhow::Result<()> {
    const NAME: &str = "object-with-contexts";
    let object = client
        .get_object()
        .set_bucket(format!("projects/_/buckets/{bucket_id}"))
        .set_object(NAME)
        .send()
        .await?;
    println!(
        "The contexts field for object {NAME} in bucket {bucket_id} is: {:?}",
        object.contexts
    );
    Ok(())
}

API JSON

  1. Avere gcloud CLI installato e inizializzato, che ti consente di generare un token di accesso per l'intestazione Authorization.

  2. Utilizza cURL per chiamare l'API JSON con una richiesta di GET oggetto:

    curl -X GET \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/OBJECT_NAME"

    Dove:

    • BUCKET_NAME è il nome del bucket contenente l'oggetto. Ad esempio, my-bucket.
    • OBJECT_NAME è il nome codificato come URL dell'oggetto. Ad esempio, employees.txt.

    Se l'operazione ha esito positivo, la risposta è simile al seguente esempio:

      {
        "kind": "storage#object",
        "name": "employees.txt",
        "bucket": "my-bucket",
        "contexts": {
          "custom": {
            "Department": {
              "value": "Human resources",
              "createTime": "2023-01-01T00:00:00.000Z",
              "updateTime": "2023-01-01T00:00:00.000Z"
            },
            "google:annotation:face-detector-v1": {
              "value": "SUCCESS",
              "createTime": "2025-09-29T17:20:00.000Z",
              "updateTime": "2025-09-29T17:20:00.000Z",
              "extendedDataTypeUrl": "type.googleapis.com/google.protobuf.Struct"
            }
          }
        }
      }
      

Visualizza contesto dell'oggetto completo

Per visualizzare un singolo contesto e i relativi dati estesi, utilizza il metodo viewFullContext (Anteprima).

API JSON

Per recuperare un singolo contesto completo (inclusi i dati estesi) per chiave:

  1. Avere gcloud CLI installato e inizializzato, che ti consente di generare un token di accesso per l'intestazione Authorization.

  2. Utilizza cURL per chiamare l'API JSON con una richiesta GET Visualizza contesto completo:

    curl -X GET \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/OBJECT_NAME/viewFullContext?contextKey=KEY"

    Dove:

    • BUCKET_NAME è il nome del bucket contenente l'oggetto. Ad esempio, my-bucket.
    • OBJECT_NAME è il nome dell'oggetto codificato come URL. Ad esempio, employees.txt.
    • KEY è la chiave di contesto specifica da recuperare. Ad esempio, google:annotation:face-detector-v1.

    Se l'operazione ha esito positivo, la risposta è simile al seguente esempio:

    {
      "kind": "storage#objectFullContext",
      "type": "CUSTOM",
      "key": "google:annotation:face-detector-v1",
      "value": "SUCCESS",
      "createTime": "2025-09-29T17:20:00.000Z",
      "updateTime": "2025-09-29T17:20:00.000Z",
      "extendedData": {
        "@type": "type.googleapis.com/google.protobuf.Struct",
        "value": {
          "modelName": "face-detector",
          "modelVersion": "v1",
          "faceAnnotationGroup": {
            "faceAnnotations": [
              {
                "detectionConfidence": 0.9,
                "landmarkingConfidence": 0.8
              }
            ]
          }
        }
      }
    }

Filtra gli oggetti per contesto

Filtra gli oggetti in base all'esistenza di chiavi di contesto degli oggetti o dei relativi valori specifici. Filtrare gli oggetti in base ai contesti aiuta a individuare e gestire in modo efficiente gruppi particolari di oggetti. Per maggiori dettagli, consulta Filtra gli oggetti in base ai contesti.

Gestisci i contesti degli oggetti durante le operazioni sugli oggetti

Per impostazione predefinita, Cloud Storage conserva i contesti degli oggetti quando li copi, li riscrivi, li componi, li sposti o li ripristini.

Copia oggetti

Per impostazione predefinita, Cloud Storage conserva i contesti degli oggetti dall'oggetto di origine durante un'operazione di copia, anche se esegui l'override di altri metadati. Per modificare i contesti degli oggetti durante un'operazione di copia, completa i seguenti passaggi:

Riga di comando

Il comando gcloud storage cp, il comando gcloud storage rsync e il comando gcloud storage mv conservano i contesti dell'oggetto di origine per impostazione predefinita. Per modificare i contesti durante queste operazioni, utilizza uno dei seguenti flag:

  • Il flag --custom-contexts per impostare nuovi contesti per l'oggetto di destinazione.

  • Il flag --clear-custom-contexts per impedire che i contesti dell'oggetto di origine vengano collegati all'oggetto di destinazione.

  • Una combinazione dei flag --update-custom-contexts e --remove-custom-contexts per modificare i singoli contesti dall'oggetto di origine prima di collegarli all'oggetto di destinazione.

Per impostare nuovi contesti quando copi un oggetto, utilizza il comando gcloud storage cp:

gcloud storage cp gs://SOURCE_BUCKET_NAME/SOURCE_OBJECT_NAME gs://DESTINATION_BUCKET_NAME/DESTINATION_OBJECT_NAME --custom-contexts=KEY=VALUE,...

Dove:

  • SOURCE_BUCKET_NAME è il nome del bucket contenente l'oggetto da copiare. Ad esempio, my-source-bucket.
  • SOURCE_OBJECT_NAME è il nome dell'oggetto da copiare. Ad esempio, employees.txt.
  • DESTINATION_BUCKET_NAME è il nome del bucket in cui copiare l'oggetto. Ad esempio, my-destination-bucket.
  • DESTINATION_OBJECT_NAME è il nome dell'oggetto di destinazione. Ad esempio, employees-backup.txt.
  • KEY è la chiave del contesto da allegare a un oggetto. Ad esempio, Department. Puoi specificare più coppie chiave-valore separate da virgole.
  • VALUE è il valore da associare alla chiave di contesto. Ad esempio, Human resources.

Per rimuovere tutti i contesti dall'oggetto di origine quando copi un oggetto, utilizza il comando gcloud storage cp:

gcloud storage cp gs://SOURCE_BUCKET_NAME/SOURCE_OBJECT_NAME gs://DESTINATION_BUCKET_NAME/DESTINATION_OBJECT_NAME --clear-custom-contexts

Dove:

  • SOURCE_BUCKET_NAME è il nome del bucket contenente l'oggetto da copiare. Ad esempio, my-source-bucket.
  • SOURCE_OBJECT_NAME è il nome dell'oggetto da copiare. Ad esempio, pets/dog.png.
  • DESTINATION_BUCKET_NAME è il nome del bucket in cui copiare l'oggetto. Ad esempio, my-destination-bucket.
  • DESTINATION_OBJECT_NAME è il nome dell'oggetto di destinazione. Ad esempio, pets/cat.png.

Per modificare singoli contesti dall'oggetto di origine quando copi un oggetto, utilizza il comando gcloud storage cp con --update-custom-contexts e --remove-custom-contexts:

gcloud storage cp gs://SOURCE_BUCKET_NAME/SOURCE_OBJECT_NAME gs://DESTINATION_BUCKET_NAME/DESTINATION_OBJECT_NAME --update-custom-contexts=KEY=VALUE,... --remove-custom-contexts=KEY,...

Dove:

  • SOURCE_BUCKET_NAME è il nome del bucket contenente l'oggetto da copiare. Ad esempio, my-source-bucket.
  • SOURCE_OBJECT_NAME è il nome dell'oggetto da copiare. Ad esempio, pets/dog.png.
  • DESTINATION_BUCKET_NAME è il nome del bucket in cui copiare l'oggetto. Ad esempio, my-destination-bucket.
  • DESTINATION_OBJECT_NAME è il nome dell'oggetto di destinazione. Ad esempio, pets/cat.png.
  • KEY è la chiave del contesto da allegare a un oggetto. Ad esempio, Department. Puoi specificare più coppie chiave-valore o chiavi separate da virgole.
  • VALUE è il valore da associare alla chiave di contesto. Ad esempio, Human resources.

API JSON

Per ignorare i contesti durante la copia di un oggetto, includi la proprietà contexts.custom nel corpo della richiesta:

  1. Avere gcloud CLI installata e inizializzata, il che ti consente di generare un token di accesso per l'intestazione Authorization.

  2. Crea un file JSON contenente i contesti da collegare all'oggetto di destinazione:

      {
        "contexts": {
          "custom": {
            "KEY": {
              "value": "VALUE"
            }
          }
        }
      }

    Dove:

    • KEY è la chiave del contesto da allegare a un oggetto. Ad esempio, Department.
    • VALUE è il valore da associare alla chiave di contesto. Ad esempio, Human resources.
  3. Utilizza cURL per chiamare l'API JSON con una richiesta oggetto POST:

    curl -X POST --data-binary @JSON_FILE_NAME \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b/SOURCE_BUCKET_NAME/o/SOURCE_OBJECT_NAME/copyTo/b/DESTINATION_BUCKET_NAME/o/DESTINATION_OBJECT_NAME"

    Dove:

    • JSON_FILE_NAME è il percorso del file JSON che include le informazioni sui contesti degli oggetti.
    • SOURCE_BUCKET_NAME è il nome del bucket che contiene l'oggetto da copiare. Ad esempio, my-source-bucket.
    • SOURCE_OBJECT_NAME è il nome codificato nell'URL dell'oggetto da copiare. Ad esempio, employees.txt.
    • DESTINATION_BUCKET_NAME è il nome del bucket in cui copiare l'oggetto. Ad esempio, my-destination-bucket.
    • DESTINATION_OBJECT_NAME è il nome con codifica URL dell'oggetto di destinazione. Ad esempio, employees-backup.txt.

Per eliminare i contesti di origine durante un'operazione di copia, utilizza il parametro di query dropContextGroups=custom nella richiesta:

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  "https://storage.googleapis.com/storage/v1/b/SOURCE_BUCKET_NAME/o/SOURCE_OBJECT_NAME/copyTo/b/DESTINATION_BUCKET_NAME/o/DESTINATION_OBJECT_NAME?dropContextGroups=custom"

Se il corpo della richiesta contiene contesti con il prefisso google:, puoi conservare le chiavi e i valori esistenti dell'oggetto di origine, ma Cloud Storage rifiuta le nuove chiavi google: o i valori modificati.

Per conservare i contesti, ometti la proprietà contexts dal corpo della richiesta ed escludi il parametro di query dropContextGroups.

Riscrivi gli oggetti

Per impostazione predefinita, Cloud Storage conserva i contesti degli oggetti dall'oggetto di origine durante un'operazione di riscrittura, anche se esegui l'override di altri metadati. Per modificare i contesti degli oggetti durante un'operazione di riscrittura, completa i seguenti passaggi:

Riga di comando

Il comando gcloud storage cp, il comando gcloud storage rsync e i comandi gcloud storage mv eseguono automaticamente le riscritture quando necessario, ad esempio quando si copiano oggetti tra località o classi di archiviazione diverse. gcloud storage cp e gcloud storage rsync creano un oggetto di origine e di destinazione, mentre gcloud storage mv crea l'oggetto di destinazione e rimuove l'oggetto di origine. Poiché queste operazioni creano un nuovo oggetto, puoi anche modificare o collegare i contesti nell'ambito dello stesso comando utilizzando uno dei seguenti flag:

  • Il flag --custom-contexts per impostare nuovi contesti per l'oggetto di destinazione.

  • Il flag --clear-custom-contexts per impedire che i contesti dell'oggetto di origine vengano collegati all'oggetto di destinazione.

  • Una combinazione dei flag --update-custom-contexts e --remove-custom-contexts per modificare i singoli contesti dall'oggetto di origine prima di collegarli all'oggetto di destinazione.

Per impostare nuovi contesti quando copi un oggetto, utilizza il comando gcloud storage cp:

gcloud storage cp gs://SOURCE_BUCKET_NAME/SOURCE_OBJECT_NAME gs://DESTINATION_BUCKET_NAME/DESTINATION_OBJECT_NAME --custom-contexts=KEY=VALUE,...

Dove:

  • SOURCE_BUCKET_NAME è il nome del bucket contenente l'oggetto da copiare. Ad esempio, my-source-bucket.
  • SOURCE_OBJECT_NAME è il nome dell'oggetto da copiare. Ad esempio, employees.txt.
  • DESTINATION_BUCKET_NAME è il nome del bucket in cui copiare l'oggetto. Ad esempio, my-destination-bucket.
  • DESTINATION_OBJECT_NAME è il nome dell'oggetto di destinazione. Ad esempio, employees-backup.txt.
  • KEY è la chiave del contesto da allegare a un oggetto. Ad esempio, Department. Puoi specificare più coppie chiave-valore separate da virgole.
  • VALUE è il valore da associare alla chiave di contesto. Ad esempio, Human resources.

Per rimuovere tutti i contesti dall'oggetto di origine quando copi un oggetto, utilizza il comando gcloud storage cp:

gcloud storage cp gs://SOURCE_BUCKET_NAME/SOURCE_OBJECT_NAME gs://DESTINATION_BUCKET_NAME/DESTINATION_OBJECT_NAME --clear-custom-contexts

Dove:

  • SOURCE_BUCKET_NAME è il nome del bucket contenente l'oggetto da copiare. Ad esempio, my-source-bucket.
  • SOURCE_OBJECT_NAME è il nome dell'oggetto da copiare. Ad esempio, pets/dog.png.
  • DESTINATION_BUCKET_NAME è il nome del bucket in cui copiare l'oggetto. Ad esempio, my-destination-bucket.
  • DESTINATION_OBJECT_NAME è il nome dell'oggetto di destinazione. Ad esempio, pets/cat.png.

Per modificare singoli contesti dall'oggetto di origine quando copi un oggetto, utilizza il comando gcloud storage cp con --update-custom-contexts e --remove-custom-contexts:

gcloud storage cp gs://SOURCE_BUCKET_NAME/SOURCE_OBJECT_NAME gs://DESTINATION_BUCKET_NAME/DESTINATION_OBJECT_NAME --update-custom-contexts=KEY=VALUE,... --remove-custom-contexts=KEY,...

Dove:

  • SOURCE_BUCKET_NAME è il nome del bucket contenente l'oggetto da copiare. Ad esempio, my-source-bucket.
  • SOURCE_OBJECT_NAME è il nome dell'oggetto da copiare. Ad esempio, pets/dog.png.
  • DESTINATION_BUCKET_NAME è il nome del bucket in cui copiare l'oggetto. Ad esempio, my-destination-bucket.
  • DESTINATION_OBJECT_NAME è il nome dell'oggetto di destinazione. Ad esempio, pets/cat.png.
  • KEY è la chiave del contesto da allegare a un oggetto. Ad esempio, Department. Puoi specificare più coppie chiave-valore o chiavi separate da virgole.
  • VALUE è il valore da associare alla chiave di contesto. Ad esempio, Human resources.

API JSON

Per eseguire l'override dei contesti durante la riscrittura di un oggetto, includi la proprietà contexts.custom nel corpo della richiesta:

  1. Avere gcloud CLI installata e inizializzata, il che ti consente di generare un token di accesso per l'intestazione Authorization.

  2. Crea un file JSON contenente i contesti da collegare all'oggetto di destinazione:

      {
        "contexts": {
          "custom": {
            "KEY": {
              "value": "VALUE"
            }
          }
        }
      }

    Dove:

    • KEY è la chiave di contesto da collegare a un oggetto. Ad esempio: Department.
    • VALUE è il valore da associare alla chiave di contesto. Ad esempio, Human resources.
  3. Utilizza cURL per chiamare l'API JSON con una richiesta POST rewrite Object:

    curl -X POST --data-binary @JSON_FILE_NAME \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b/SOURCE_BUCKET_NAME/o/SOURCE_OBJECT_NAME/rewriteTo/b/DESTINATION_BUCKET_NAME/o/DESTINATION_OBJECT_NAME"

    Dove:

    • JSON_FILE_NAME è il percorso del file JSON che include le informazioni sui contesti degli oggetti.
    • SOURCE_BUCKET_NAME è il nome del bucket che contiene l'oggetto da riscrivere. Ad esempio, my-source-bucket.
    • SOURCE_OBJECT_NAME è il nome codificato nell'URL dell'oggetto da riscrivere. Ad esempio, employees.txt.
    • DESTINATION_BUCKET_NAME è il nome del bucket in cui riscrivere l'oggetto. Ad esempio, my-destination-bucket.
    • DESTINATION_OBJECT_NAME è il nome codificato come URL dell'oggetto di destinazione. Ad esempio, employees-backup.txt.

Per eliminare i contesti di origine durante un'operazione di riscrittura, utilizza il parametro di query dropContextGroups=custom nella richiesta:

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  "https://storage.googleapis.com/storage/v1/b/SOURCE_BUCKET_NAME/o/SOURCE_OBJECT_NAME/rewriteTo/b/DESTINATION_BUCKET_NAME/o/DESTINATION_OBJECT_NAME?dropContextGroups=custom"

Se il corpo della richiesta contiene contesti con il prefisso google:, puoi conservare le chiavi e i valori esistenti dell'oggetto di origine, ma Cloud Storage rifiuta le nuove chiavi google: o i valori modificati.

Per conservare i contesti, ometti la proprietà contexts dal corpo della richiesta ed escludi il parametro di query dropContextGroups.

Comporre oggetti

Il comando gcloud storage objects compose e il metodo API JSON compose uniscono i contesti dagli oggetti di origine e li collegano agli oggetti di destinazione per impostazione predefinita. Cloud Storage risolve i conflitti dando la priorità ai contesti degli oggetti di origine elaborati successivamente. Per saperne di più sul comportamento del contesto dell'oggetto durante un'operazione di composizione, consulta Contesti degli oggetti compositi.

Riga di comando

Per specificare nuovi contesti per l'oggetto di destinazione durante la composizione degli oggetti, utilizza il flag --contexts:

gcloud storage objects compose gs://BUCKET_NAME/SOURCE_OBJECT_1 gs://BUCKET_NAME/SOURCE_OBJECT_2 gs://BUCKET_NAME/DESTINATION_OBJECT_NAME --contexts=KEY=VALUE,...

Dove:

  • BUCKET_NAME è il nome del bucket che contiene gli oggetti di origine e in cui viene creato l'oggetto di destinazione. Ad esempio, my-bucket.
  • SOURCE_OBJECT_1 e SOURCE_OBJECT_2 sono gli oggetti di origine da comporre.
  • DESTINATION_OBJECT_NAME è il nome dell'oggetto di destinazione da creare. Ad esempio, my-composite-object.
  • KEY è la chiave di contesto da collegare a un oggetto. Ad esempio, Department. Puoi specificare più coppie chiave-valore separate da virgole.
  • VALUE è il valore da associare alla chiave di contesto. Ad esempio, Human resources.

Per impedire che i contesti di origine vengano collegati agli oggetti compositi, utilizza il flag --clear-custom-contexts:

gcloud storage objects compose gs://BUCKET_NAME/SOURCE_OBJECT_1 gs://BUCKET_NAME/SOURCE_OBJECT_2 gs://BUCKET_NAME/DESTINATION_OBJECT_NAME --clear-custom-contexts

Dove:

  • BUCKET_NAME è il nome del bucket che contiene gli oggetti di origine e in cui viene creato l'oggetto di destinazione. Ad esempio, my-bucket.
  • SOURCE_OBJECT_1 e SOURCE_OBJECT_2 sono gli oggetti di origine da comporre.
  • DESTINATION_OBJECT_NAME è il nome dell'oggetto di destinazione da creare. Ad esempio, my-composite-object.

API JSON

Per specificare nuovi contesti per l'oggetto di destinazione durante la composizione degli oggetti, includi i contesti nella proprietà destination del corpo della richiesta.

  1. Avere gcloud CLI installato e inizializzato, che ti consente di generare un token di accesso per l'intestazione Authorization.

  2. Crea un file JSON contenente il corpo della richiesta:

    {
      "sourceObjects": [
        {"name": "SOURCE_OBJECT_1"},
        {"name": "SOURCE_OBJECT_2"}
      ],
      "destination": {
        "contentType": "text/plain",
        "contexts": {
          "custom": {
            "KEY": {
              "value": "VALUE"
            }
          }
        }
      }
    }

    Dove:

    • SOURCE_OBJECT_1 e SOURCE_OBJECT_2 sono gli oggetti di origine da comporre.
    • KEY è la chiave di contesto da collegare a un oggetto. Ad esempio, Department.
    • VALUE è il valore da associare alla chiave di contesto. Ad esempio, Human resources.
  3. Utilizza cURL per chiamare l'API JSON con una richiesta POST compose Object:

    curl -X POST --data-binary @JSON_FILE_NAME \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/DESTINATION_OBJECT_NAME/compose"

    Dove:

    • JSON_FILE_NAME è il percorso del file JSON che include il corpo della richiesta.
    • BUCKET_NAME è il nome del bucket che contiene gli oggetti di origine e in cui viene creato l'oggetto di destinazione. Ad esempio, my-bucket.
    • DESTINATION_OBJECT_NAME è il nome dell'oggetto di destinazione da creare. Ad esempio, my-composite-object.

Per impedire l'allegamento dei contesti di origine agli oggetti compositi, utilizza il parametro di query dropContextGroups=custom nella richiesta:

  1. Avere gcloud CLI installato e inizializzato, che ti consente di generare un token di accesso per l'intestazione Authorization.

  2. Crea un file JSON contenente il corpo della richiesta:

    {
      "sourceObjects": [
        {"name": "SOURCE_OBJECT_1"},
        {"name": "SOURCE_OBJECT_2"}
      ],
      "destination": {
        "contentType": "text/plain"
    }
    }

    Dove:

    • SOURCE_OBJECT_1 e SOURCE_OBJECT_2 sono oggetti di origine da comporre.
  3. Utilizza cURL per chiamare l'API JSON con una richiesta POST compose Object:

    curl -X POST --data-binary @JSON_FILE_NAME \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/DESTINATION_OBJECT_NAME/compose?dropContextGroups=custom"

    Dove:

    • JSON_FILE_NAME è il percorso del file JSON che include il corpo della richiesta.
    • BUCKET_NAME è il nome del bucket che contiene gli oggetti di origine e in cui viene creato l'oggetto di destinazione. Ad esempio, my-bucket.
    • DESTINATION_OBJECT_NAME è il nome dell'oggetto di destinazione da creare. Ad esempio, my-composite-object.

Gestire i contesti degli oggetti in blocco

Per gestire i contesti degli oggetti per milioni o miliardi di oggetti con un singolo job, utilizza le operazioni batch di archiviazione. Per creare un job, specifica gli oggetti di destinazione fornendo un file manifest o utilizzando i prefissi degli oggetti. Dopo aver specificato gli oggetti, crea un job di operazioni batch per aggiornare i contesti degli oggetti.

Analizza i contesti degli oggetti in BigQuery

Se hai un abbonamento Storage Intelligence attivo, puoi eseguire query e analizzare i contesti degli oggetti in BigQuery. Utilizza la vista Object Contexts Catalog (object_contexts_catalog_view) per eseguire query su chiavi, valori e payload extendedData strutturati di contesto (come etichette di immagini, volti rilevati e riquadri di delimitazione). La visualizzazione del catalogo viene aggiornata ogni 24 ore.

Ad esempio, per trovare tutti gli oggetti in cui un punteggio di annotazione specifico supera una soglia:

SELECT
  t.project,
  t.bucket,
  t.name,
  t.generation,
  label
FROM
  `PROJECT_ID.INSIGHTS_DATASET.object_contexts_catalog_view` AS t,
  UNNEST(t.contexts) AS context,
  UNNEST(JSON_QUERY_ARRAY(context.extendedData.labelAnnotationGroup.labelAnnotations)) AS label
WHERE
  context.key = "google:annotation:label-detector-v1"
  AND FLOAT64(label.score) > 0.75;

Sostituisci:

  • PROJECT_ID: l'ID del progetto che contiene il set di dati di Storage Insights.
  • INSIGHTS_DATASET: il nome del set di dati di Storage Insights.

Per ulteriori informazioni sullo schema della visualizzazione del catalogo, consulta Schema del catalogo dei contesti degli oggetti. Per altri esempi di query, consulta Analizzare i contesti degli oggetti.

Passaggi successivi