Halaman ini menjelaskan sintaksis Common Expression Language (CEL) dan operasi yang didukung saat Anda membuat filter lanjutan untuk tugas operasi batch penyimpanan berdasarkan kolom set data Insight Penyimpanan.
Anda dapat menggunakan filter lanjutan untuk mengevaluasi kondisi dan mengotomatiskan tindakan pengelolaan di jutaan file berdasarkan kolom dalam set data Insight Penyimpanan Anda. Filter yang didukung menggunakan aturan CEL langsung pada metadata objek.
Berikan aturan filter menggunakan flag --bucket-filters dan --object-filters di Google Cloud CLI, atau kolom bucketFilters dan objectFilters di JSON API saat Anda membuat tugas. Opsi ini menghilangkan kebutuhan untuk mengkueri BigQuery secara manual, mengekspor daftar objek ke CSV, dan mengupload manifes kembali ke bucket Anda. Saat Anda menggunakan filter set data untuk pemilihan objek,
storage batch operations menargetkan objek yang aktif dan terbaru
pada snapshot set data yang dipilih. Akibatnya, tugas hanya menyertakan objek
yang memiliki nilai NULL untuk softDeleteTime dan timeDeleted pada saat
snapshot.
Operator dan fungsi yang didukung
Filter lanjutan mendukung kondisi yang digabungkan dengan pernyataan AND (&&) logis. Gunakan
operator berikut untuk membuat string kriteria:
| Operator | Penggunaan CEL | Sintaksis GoogleSQL yang setara | Deskripsi |
|---|---|---|---|
| StartsWith | name.startsWith("prefix") |
STARTS_WITH(name, "prefix") |
Mencocokkan objek dengan atribut string yang diawali dengan awalan tertentu. |
| EndsWith | name.endsWith(".pdf") |
ENDS_WITH(name, ".pdf") |
Mencocokkan objek dengan atribut string yang diakhiri dengan akhiran tertentu. |
| Sama dengan | == |
= |
Mencocokkan objek dengan atribut yang sama dengan nilai tertentu. |
| Tidak sama dengan | != |
!= |
Mengecualikan objek dengan atribut yang sama persis dengan nilai tertentu. |
| Lebih dari | > |
> |
Mencocokkan objek dengan atribut bilangan bulat atau stempel waktu yang melebihi nilai minimum. |
| Lebih dari atau sama dengan | >= |
>= |
Mencocokkan objek dengan atribut bilangan bulat atau stempel waktu yang sama dengan atau melebihi nilai minimum. |
| Kurang dari | < |
< |
Mencocokkan objek dengan atribut bilangan bulat atau stempel waktu di bawah nilai minimum. |
| Kurang dari atau sama dengan | <= |
<= |
Mencocokkan objek dengan atribut bilangan bulat atau stempel waktu yang sama dengan atau di bawah nilai minimum. |
| Berisi | name.contains("substring") |
STRPOS(name, "substring") != 0 |
Mencocokkan objek dengan atribut string yang berisi substring. |
| Dalam | name in ['a', 'b'] |
name IN UNNEST(ARRAY<STRING>['a', 'b']) |
Mencocokkan objek dengan atribut yang ada dalam daftar yang disediakan. |
| Logika NOT | ! |
NOT |
Balikkan aturan untuk memfilter objek yang tidak cocok dengan kondisi. |
| Stempel waktu | timestamp("2025-01-01T00:00:00Z") |
TIMESTAMP "2025-01-01 00:00:00 UTC" |
Transmisikan string tanggal yang diformat dalam RFC 3339 ke stempel waktu. Fungsi ini mendukung presisi mikrodetik agar sesuai dengan standar jenis TIMESTAMP BigQuery. |
| Ada | contexts.exists(c, c.key == "env") |
EXISTS(SELECT c FROM UNNEST(contexts) AS c WHERE c.key = "env" LIMIT 1) |
Mencocokkan objek yang setidaknya satu item dalam atribut jenis data berulang memenuhi kondisi tertentu. |
ID yang didukung
Saat membuat ekspresi filter, Anda dapat mereferensikan kolom level bucket dan kolom level objek. ID berikut dipetakan ke kolom yang dikenali dalam skema tabel set data Insight Penyimpanan:
Atribut bucket
Anda dapat menggunakan kolom tingkat bucket berikut untuk memfilter bucket mana yang disertakan dalam tugas storage batch operation Anda.
| Kolom | Jenis | Deskripsi |
|---|---|---|
name |
STRING | Nama bucket. |
autoclass |
RECORD | Berisi metadata enabled dan toggleTime. |
autoclass.enabled |
BOOLEAN | Menunjukkan apakah Autoclass diaktifkan untuk bucket. |
autoclass.toggleTime |
TIMESTAMP | Waktu saat Autoclass terakhir diaktifkan atau dinonaktifkan. |
labels |
REPEATED RECORD | Berisi key-value map standar. |
location |
STRING | ID lokasi bucket. |
softDeletePolicy |
RECORD | Berisi retentionDurationSeconds dan effectiveTime. |
softDeletePolicy.retentionDurationSeconds |
INTEGER | Periode retensi penghapusan sementara, dalam detik. |
softDeletePolicy.effectiveTime |
TIMESTAMP | Waktu saat kebijakan penghapusan sementara mulai berlaku. |
Atribut objek
Anda dapat menggunakan atribut berikut untuk memfilter tugas storage batch operation berdasarkan kolom tingkat objek:
| Kolom | Jenis | Deskripsi |
|---|---|---|
name |
STRING | Nama objek. |
contexts |
REPEATED RECORD | Konteks yang dilampirkan ke objek. |
contexts.key |
STRING | Kunci konteks kustom. |
contexts.value |
STRING | Nilai kunci konteks kustom. |
contexts.type |
STRING | Jenis konteks kustom. |
contexts.createTime |
TIMESTAMP | Waktu pembuatan kunci konteks kustom. |
contexts.updateTime |
TIMESTAMP | Waktu saat kunci konteks kustom diperbarui. |
contentType |
STRING | Kategorisasi konten jenis MIME. |
customTime |
TIMESTAMP | Stempel waktu yang ditentukan pengguna. |
generation |
INTEGER | ID pembuatan objek. |
metadata |
REPEATED RECORD | Metadata kustom. |
metadata.key |
STRING | Kunci metadata kustom. |
metadata.value |
STRING | Nilai metadata kustom. |
metageneration |
INTEGER | ID pembuatan metadata. |
retentionExpirationTime |
TIMESTAMP | Waktu saat retensi objek berakhir. |
securityInsights |
RECORD | Berisi insight akses publik untuk objek. |
securityInsights.publicAccessInsight |
RECORD | Memberikan status aksesibilitas publik objek. |
securityInsights.publicAccessInsight.readPublicAccess |
STRING | Status keterbacaan publik objek. Nilai yang didukung adalah PUBLIC, NOT_PUBLIC, UNSUPPORTED, dan ERROR. |
securityInsights.publicAccessInsight.readPublicAccessSource |
STRING | Jika readPublicAccess adalah PUBLIC, menampilkan sumber izin baca publik. Nilai yang didukung adalah Object, Bucket, dan ERROR. |
securityInsights.publicAccessInsight.writePublicAccess |
STRING | Status kemampuan penulisan publik objek. Nilai yang didukung adalah PUBLIC, NOT_PUBLIC, UNSUPPORTED, dan ERROR. |
size |
INTEGER | Ukuran objek dalam byte. |
storageClass |
STRING | Kelas penyimpanan yang ditetapkan. |
temporaryHold |
BOOLEAN | Status pemblokiran aktif mencegah rilis. |
timeCreated |
TIMESTAMP | Jam pendaftaran pembuatan awal. |
timeStorageClassUpdated |
TIMESTAMP | Waktu saat kelas penyimpanan terakhir diperbarui. |
updated |
TIMESTAMP | Waktu saat objek terakhir diperbarui. |
Aturan format ekspresi
Untuk membantu tugas Anda berjalan dalam skala besar, mesin kueri menerapkan aturan pemformatan berikut:
- Kondisi filter: Anda hanya dapat menggabungkan kondisi filter menggunakan operator AND (
&&) logis. Mesin kueri tidak mendukung operator OR logis (||). - Penempatan argumen: Anda harus menempatkan kolom metadata target di sisi kiri fungsi. Misalnya, gunakan
name.startsWith("live-"), bukan"live-".startsWith(name). - Metode array: Anda dapat memanggil makro
existslangsung di kolom berulang, seperticontexts.exists(...)ataumetadata.exists(...). - Batas bucket: Satu tugas storage batch operations dapat beroperasi pada hingga 1.000 bucket. Jika ekspresi filter Anda secara dinamis cocok dengan lebih dari 1.000 bucket dalam set data, pembuatan tugas akan gagal. Gunakan kolom tingkat bucket tertentu (misalnya, pemfilteran lokasi seperti
location == "us-central1"atau pencocokan nama sepertiname.startsWith("prod-")) untuk mempersempit cakupan kueri dan memenuhi batas ini. - Batas karakter: Filter bucket dan filter objek masing-masing dibatasi hingga maksimum 150 karakter.
Contoh
Contoh berikut menunjukkan filter gabungan umum yang dapat Anda gunakan untuk menargetkan resource di seluruh project. Tentukan cuplikan filter secara langsung sebagai flag dalam perintah gcloud storage batch-operations jobs create:
Menargetkan bucket tertentu: Terapkan tindakan ke objek di bucket tertentu:
--bucket-filters="name in ['bucket-1', 'bucket-2']"
Periksa kelas penyimpanan dan lokasi bucket: Terapkan tindakan ke objek di kelas penyimpanan Standard Storage di lokasi
US:--bucket-filters="location.startsWith('us')"
--object-filters="storageClass == 'STANDARD'"Filter menurut retensi penghapusan sementara: Terapkan tindakan ke objek dalam bucket yang mengaktifkan penghapusan sementara selama minimal 7 hari:
--bucket-filters="softDeletePolicy.retentionDurationSeconds >= 604800"
Memfilter menurut ukuran dan ekstensi objek: Menemukan objek PDF yang lebih besar dari 5 KiB:
--object-filters="size >= 5120 && name.endsWith('.pdf')"Memeriksa kunci konteks kustom: Terapkan tindakan ke objek yang memiliki kunci konteks kustom
env:--object-filters="contexts.exists(context, context.key == 'env')"
Cocokkan pasangan nilai kunci konteks kustom: Terapkan tindakan ke objek yang memiliki kunci konteks kustom
envdengan nilaiprod:--object-filters="contexts.exists(context, context.key == 'env' && context.value == 'prod')"
Mencocokkan nilai konteks kustom berdasarkan awalan dan akhiran: Terapkan tindakan ke objek dengan nilai konteks kustom yang diawali dengan awalan
proddan diakhiri dengan akhiran.txt:--object-filters="contexts.exists(context, context.value.startsWith('prod') && context.value.endsWith('.txt'))"Mengidentifikasi kunci konteks yang tidak ada: Terapkan tindakan ke objek yang tidak memiliki kunci konteks kustom
env:--object-filters="!contexts.exists(context, context.key == 'env')"
Langkah berikutnya
- Pelajari cara membuat tugas menggunakan filter lanjutan.
- Pelajari cara membuat dan mengelola tugas operasi batch penyimpanan.