Memfilter resource menggunakan label

Untuk memfilter resource menggunakan label, Anda dapat melakukan salah satu hal berikut:

  • Gunakan kotak penelusuran di konsol Google Cloud.
  • Buat spesifikasi filter untuk digunakan di API, alat command line bq, atau library klien.

Batasan

  • API, alat command line bq, dan library klien hanya mendukung pemfilteran untuk set data.
  • Anda tidak dapat memfilter tugas berdasarkan label di semua alat BigQuery.

Sebelum memulai

Berikan peran Identity and Access Management (IAM) yang memberi pengguna izin yang diperlukan untuk melakukan setiap tugas dalam dokumen ini.

Izin yang diperlukan

Untuk memfilter resource menggunakan label, Anda harus dapat mengambil metadata resource. Untuk memfilter resource menggunakan label, Anda memerlukan izin IAM berikut:

  • bigquery.datasets.get (memungkinkan Anda memfilter set data)
  • bigquery.tables.get (memungkinkan Anda memfilter tabel dan tabel virtual)

Setiap peran bawaan IAM berikut memiliki izin yang Anda perlukan untuk memfilter set data:

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

Setiap peran bawaan IAM berikut memiliki izin yang Anda perlukan untuk memfilter tabel dan tabel virtual:

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

Selain itu, Anda dapat memfilter resource yang dibuat jika memiliki izin bigquery.datasets.create.

Untuk mengetahui informasi selengkapnya tentang peran dan izin IAM di BigQuery, lihat Peran dan izin bawaan.

Memfilter resource di konsol Google Cloud

Untuk membuat daftar resource yang difilter, gunakan konsol Google Cloud:

  1. Di konsol Google Cloud, buka panel Explorer.

  2. Di kotak penelusuran, masukkan pasangan key atau key:value. Hasil Anda menyertakan kecocokan sebagian.

    Misalnya, untuk hanya menampilkan set data dengan label department:shipping, Anda dapat memasukkan department atau department:shipping.

Memfilter set data di API atau alat command line bq

Saat ini, API, alat command line bq, dan library klien hanya mendukung pemfilteran untuk set data.

Untuk memfilter set data menggunakan API, alat bq, atau library klien, buat spesifikasi filter dan gunakan spesifikasi:

  • Sebagai parameter untuk flag --filter di alat bq
  • Sebagai nilai untuk properti filter di metode datasets.list API

Keterbatasan spesifikasi filter

Spesifikasi filter memiliki keterbatasan berikut:

  • Hanya mendukung operator logika AND. Perbandingan yang dipisahkan spasi diperlakukan memiliki operator AND implisit.
  • Satu-satunya kolom yang saat ini memenuhi syarat untuk pemfilteran adalah labels.key, dengan key sebagai nama label.
  • Filter dapat menyertakan hingga sepuluh ekspresi.
  • Pemfilteran peka huruf besar/kecil.
  • Saat ini, API, alat command line bq, dan library klien hanya mendukung pemfilteran untuk set data.

Contoh spesifikasi filter

Spesifikasi filter menggunakan sintaksis berikut:

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

Ganti kode berikut:

  • field dinyatakan sebagai labels.key dengan key sebagai kunci label.
  • value adalah nilai label opsional.

Contoh berikut menunjukkan cara membuat ekspresi filter.

Untuk menampilkan resource yang memiliki label department:shipping, gunakan spesifikasi filter berikut:

labels.department:shipping

Untuk membuat daftar resource menggunakan beberapa label, pisahkan pasangan key:value dengan spasi. Spasi diperlakukan sebagai operator AND yang logis. Misalnya, untuk menampilkan set data dengan label department:shipping dan label location:usa, gunakan spesifikasi filter berikut:

labels.department:shipping labels.location:usa

Anda dapat memfilter keberadaan kunci saja, dan bukan mencocokkan dengan key:value pair. Spesifikasi filter berikut menampilkan semua set data berlabel department, berapa pun nilainya.

labels.department

Spesifikasi filter yang setara menggunakan tanda bintang untuk menampilkan semua kemungkinan nilai yang terkait dengan kunci department.

labels.department:*

Anda juga dapat menggunakan tag di spesifikasi filter. Misalnya, untuk menampilkan resource dengan label department:shipping dan tag test_data, gunakan spesifikasi filter berikut:

labels.department:shipping labels.test_data

Memfilter set data di alat command line bq dan API

Untuk memfilter set data menggunakan API, alat command line bq, atau library klien:

bq

Jalankan perintah bq ls dengan flag --filter. Jika Anda ingin menampilkan set data di project selain project default, tentukan flag --project_id.

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

Ganti kode berikut:

  • filter_specification adalah spesifikasi filter yang valid.
  • project_id adalah ID project Anda.

Contoh:

Masukkan perintah berikut untuk menampilkan set data dalam project default Anda yang memiliki label department:shipping:

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

Masukkan perintah berikut untuk menampilkan set data dalam project default Anda yang memiliki label department:shipping dan tag test_data.

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

Masukkan perintah berikut untuk menampilkan set data di myotherproject yang memiliki label department:shipping:

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

Output untuk setiap perintah tersebut akan menampilkan daftar set data seperti berikut.

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

API

Panggil metode API datasets.list dan berikan spesifikasi filter menggunakan properti filter.

Go

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Go di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Go API.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

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

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Java API.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

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

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Node.js API.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

// 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

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Python di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Python API.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.


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.")

Langkah selanjutnya