Filtrare le risorse utilizzando le etichette

Per filtrare le risorse utilizzando le etichette, puoi procedere in uno dei seguenti modi:

  • Utilizza la barra di ricerca nella console Google Cloud.
  • Crea una specifica di filtro da utilizzare nell'API, nello strumento a riga di comando bq o nelle librerie client.

Limitazioni

  • L'API, lo strumento a riga di comando bq e le librerie client supportano solo il filtraggio dei set di dati.
  • Non puoi filtrare i job per etichetta in nessuno degli strumenti BigQuery.

Prima di iniziare

Concedi i ruoli IAM (Identity and Access Management) che concedono agli utenti le autorizzazioni necessarie per eseguire ogni attività nel documento.

Autorizzazioni obbligatorie

Per filtrare le risorse utilizzando le etichette, devi essere in grado di recuperare i metadati delle risorse. Per filtrare le risorse utilizzando le etichette, devi disporre delle seguenti autorizzazioni IAM:

  • bigquery.datasets.get (consente di filtrare i set di dati)
  • bigquery.tables.get (consente di filtrare tabelle e visualizzazioni)

Ciascuno dei seguenti ruoli IAM predefiniti include le autorizzazioni necessarie per filtrare i set di dati:

  • roles/bigquery.user
  • roles/bigquery.metadataViewer
  • roles/bigquery.dataViewer
  • roles/bigquery.dataOwner
  • roles/bigquery.dataEditor
  • roles/bigquery.admin

Ciascuno dei seguenti ruoli IAM predefiniti include le autorizzazioni necessarie per filtrare tabelle e visualizzazioni:

  • roles/bigquery.metadataViewer
  • roles/bigquery.dataViewer
  • roles/bigquery.dataOwner
  • roles/bigquery.dataEditor
  • roles/bigquery.admin

Inoltre, se disponi dell'autorizzazione bigquery.datasets.create, puoi filtrare le risorse che crei.

Per ulteriori informazioni su ruoli e autorizzazioni IAM in BigQuery, consulta Autorizzazioni e ruoli predefiniti.

Filtrare le risorse nella console Google Cloud

Per generare un elenco filtrato di risorse, utilizza la console Google Cloud:

  1. Nella console Google Cloud, vai al riquadro Explorer.

  2. Nella barra di ricerca, inserisci la coppia key o key:value. I risultati includono eventuali corrispondenze parziali.

    Ad esempio, per mostrare solo i set di dati con l'etichetta department:shipping, puoi inserire department o department:shipping.

Filtro di set di dati nello strumento a riga di comando API o bq

Attualmente, l'API, lo strumento a riga di comando bq e le librerie client supportano solo il filtro dei set di dati.

Per filtrare i set di dati utilizzando l'API, lo strumento bq o le librerie client, crea una specifica di filtro e utilizzala:

  • Come parametro per il flag --filter nello strumento bq
  • Come valore della proprietà filter nel metodo datasets.list dell'API

Limitazioni sulle specifiche dei filtri

Le specifiche dei filtri presentano le seguenti limitazioni:

  • È supportato solo l'operatore logico AND. I confronti separati da spazi sono considerati con operatori AND impliciti.
  • L'unico campo attualmente idoneo per l'applicazione di filtri è labels.key, dove key è il nome di un'etichetta.
  • Il filtro può includere fino a dieci espressioni.
  • Il filtro è sensibile alle maiuscole.
  • Attualmente, l'API, lo strumento a riga di comando bq e le librerie client supportano solo il filtro dei set di dati.

Esempi di specifiche di filtro

Una specifica di filtro utilizza la seguente sintassi:

"field[:value][ field[:value]]..."

Sostituisci quanto segue:

  • field è espresso come labels.key, dove key è una chiave di etichetta.
  • value è un valore facoltativo dell'etichetta.

I seguenti esempi mostrano come generare espressioni di filtro.

Per elencare le risorse con un'etichetta department:shipping, utilizza la seguente specifica di filtro:

labels.department:shipping

Per elencare le risorse utilizzando più etichette, separa le coppie key:value con uno spazio. Lo spazio viene considerato come un operatore logico AND. Ad esempio, per elencare i set di dati con l'etichetta department:shipping e l'etichetta location:usa, utilizza la seguente specifica del filtro:

labels.department:shipping labels.location:usa

Puoi filtrare in base alla presenza di una sola chiave, anziché in base a una coppia chiave-valore. La seguente specifica di filtro elenca tutti i set di dati etichettati department indipendentemente dal valore.

labels.department

Una specifica di filtro equivalente utilizza un asterisco per rappresentare tutti i possibili valori associati alla chiave department.

labels.department:*

Puoi anche utilizzare i tag nella specifica di un filtro. Ad esempio, per elencare le risorse con l'etichetta department:shipping e il tag test_data, utilizza la seguente specifica di filtro:

labels.department:shipping labels.test_data

Applicazione di filtri ai set di dati nello strumento a riga di comando bq e nell'API

Per filtrare i set di dati utilizzando l'API, lo strumento a riga di comando bq o le librerie client:

bq

Esegui il comando bq ls con il flag --filter. Se stai elencando i set di dati in un progetto diverso da quello predefinito, specifica il flag --project_id.

bq ls \
--filter "filter_specification" \
--project_id project_id

Sostituisci quanto segue:

  • filter_specification è una specifica di filtro valida.
  • project_id è l'ID progetto.

Esempi:

Inserisci il comando seguente per elencare i set di dati nel progetto predefinito con un'etichetta department:shipping:

bq ls --filter "labels.department:shipping"

Inserisci il comando seguente per elencare i set di dati nel progetto predefinito che hanno un'etichetta department:shipping e un tag test_data.

bq ls --filter "labels.department:shipping labels.test_data"

Inserisci il comando seguente per elencare in myotherproject i set di dati con un'etichetta department:shipping:

bq ls --filter "labels.department:shipping" --project_id myotherproject

L'output per ciascuno di questi comandi restituisce un elenco di set di dati come il seguente.

+-----------+
| datasetId |
+-----------+
| mydataset |
| mydataset2|
+-----------+

API

Chiama il metodo API datasets.list e fornisci la specifica del filtro utilizzando la proprietà filter.

Go

Prima di provare questo esempio, segui le istruzioni di configurazione di Go disponibili nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Go.

Per eseguire l'autenticazione in BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/bigquery"
	"google.golang.org/api/iterator"
)

// listDatasetsByLabel demonstrates walking the collection of datasets in a project, and
// filtering that list to a subset that has specific label metadata.
func listDatasetsByLabel(w io.Writer, projectID string) error {
	// projectID := "my-project-id"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	it := client.Datasets(ctx)
	it.Filter = "labels.color:green"
	for {
		dataset, err := it.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			return err
		}
		fmt.Fprintf(w, "dataset: %s\n", dataset.DatasetID)
	}
	return nil
}

Java

Prima di provare questo esempio, segui le istruzioni di configurazione di Java disponibili nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Java.

Per eseguire l'autenticazione in BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

import com.google.api.gax.paging.Page;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Dataset;

// Sample to get list of datasets by label
public class ListDatasetsByLabel {

  public static void runListDatasetsByLabel() {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String filter = "MY_LABEL_FILTER";
    listDatasetsByLabel(projectId, filter);
  }

  public static void listDatasetsByLabel(String projectId, String filter) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      Page<Dataset> datasets =
          bigquery.listDatasets(
              projectId,
              BigQuery.DatasetListOption.pageSize(100),
              BigQuery.DatasetListOption.labelFilter(filter)); // "labels.color:green"
      if (datasets == null) {
        System.out.println("Dataset does not contain any models");
        return;
      }
      datasets
          .iterateAll()
          .forEach(
              dataset -> System.out.printf("Success! Dataset ID: %s ", dataset.getDatasetId()));
    } catch (BigQueryException e) {
      System.out.println("Project does not contain any datasets \n" + e.toString());
    }
  }
}

Node.js

Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js disponibili nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Node.js.

Per eseguire l'autenticazione in BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function listDatasetsByLabel() {
  // Lists all datasets in current GCP project, filtering by label color:green.

  const options = {
    filter: 'labels.color:green',
  };
  // Lists all datasets in the specified project
  const [datasets] = await bigquery.getDatasets(options);

  console.log('Datasets:');
  datasets.forEach(dataset => console.log(dataset.id));
}

Python

Prima di provare questo esempio, segui le istruzioni di configurazione di Python disponibili nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Python.

Per eseguire l'autenticazione in BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.


from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

label_filter = "labels.color:green"
datasets = list(client.list_datasets(filter=label_filter))  # Make an API request.

if datasets:
    print("Datasets filtered by {}:".format(label_filter))
    for dataset in datasets:
        print("\t{}.{}".format(dataset.project, dataset.dataset_id))
else:
    print("No datasets found with this filter.")

Passaggi successivi