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. Filter yang didukung menggunakan 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 membuat kueri BigQuery secara manual, mengekspor daftar objek ke CSV, dan mengupload manifes kembali ke bucket Anda. Saat Anda menggunakan filter set data untuk pemilihan objek, operasi batch penyimpanan menargetkan objek yang aktif dan saat ini sesuai dengan snapshot set data yang dipilih. Oleh karena itu, 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 Anda:
| 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. |
| Equals | == |
= |
Mencocokkan objek dengan atribut yang sama dengan nilai tertentu. |
| Not equals | != |
!= |
Mengecualikan objek dengan atribut yang sama persis dengan nilai tertentu. |
| Greater than | > |
> |
Mencocokkan objek dengan atribut bilangan bulat atau stempel waktu yang melebihi batas. |
| Greater than or equal to | >= |
>= |
Mencocokkan objek dengan atribut bilangan bulat atau stempel waktu yang sama dengan atau melebihi batas. |
| Less than | < |
< |
Mencocokkan objek dengan atribut bilangan bulat atau stempel waktu di bawah batas. |
| Less than or equal to | <= |
<= |
Mencocokkan objek dengan atribut bilangan bulat atau stempel waktu yang sama dengan atau di bawah batas. |
| Contains | name.contains("substring") |
STRPOS(name, "substring") != 0 |
Mencocokkan objek dengan atribut string yang berisi substring. |
| In | name in ['a', 'b'] |
name IN UNNEST(ARRAY<STRING>['a', 'b']) |
Mencocokkan objek dengan atribut yang ada dalam daftar yang disediakan. |
| Logical NOT | ! |
NOT |
Membalikkan aturan untuk memfilter objek yang tidak cocok dengan kondisi. |
| Timestamp | timestamp("2025-01-01T00:00:00Z") |
TIMESTAMP "2025-01-01 00:00:00 UTC" |
Mengonversi string tanggal yang diformat dalam RFC 3339 ke stempel waktu. Fungsi ini mendukung presisi mikrodetik untuk mencocokkan standar jenis TIMESTAMP BigQuery. |
| Exists | contexts.exists(c, c.key == "env") |
EXISTS(SELECT c FROM UNNEST(contexts) AS c WHERE c.key = "env" LIMIT 1) |
Mencocokkan objek jika setidaknya satu item dalam atribut jenis rekaman berulang memenuhi kondisi tertentu. |
ID yang didukung
Saat membuat ekspresi filter, Anda dapat mereferensikan kolom tingkat bucket dan kolom tingkat 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 operasi batch penyimpanan.
| 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 kali diaktifkan atau dinonaktifkan. |
labels |
REPEATED RECORD | Berisi peta kunci-nilai standar. |
location |
STRING | ID lokasi bucket. |
softDeletePolicy |
RECORD | Berisi retentionDurationSeconds dan effectiveTime. |
softDeletePolicy.retentionDurationSeconds |
INTEGER | Periode retensi penghapusan sementara, dalam hitungan detik. |
softDeletePolicy.effectiveTime |
TIMESTAMP | Waktu saat kebijakan penghapusan sementara mulai berlaku. |
Atribut objek
Anda dapat menggunakan atribut berikut untuk memfilter tugas operasi batch penyimpanan 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 saat kunci konteks kustom dibuat. |
contexts.updateTime |
TIMESTAMP | Waktu saat kunci konteks kustom diperbarui. |
contentType |
STRING | Pengkategorian 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, fungsi ini akan menampilkan sumber izin baca publik. Nilai yang didukung adalah Object, Bucket, dan ERROR. |
securityInsights.publicAccessInsight.writePublicAccess |
STRING | Status kemampuan tulis 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 blokir aktif yang mencegah rilis. |
timeCreated |
TIMESTAMP | Jam pendaftaran pembuatan awal. |
timeStorageClassUpdated |
TIMESTAMP | Waktu saat kelas penyimpanan terakhir kali diperbarui. |
updated |
TIMESTAMP | Waktu saat objek terakhir kali 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. - Penentuan posisi 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 operasi batch penyimpanan dapat
beroperasi pada maksimal 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 a maksimum 150 karakter.
Contoh
Contoh berikut menunjukkan filter gabungan umum yang dapat Anda gunakan untuk menargetkan resource di seluruh project. Tentukan cuplikan filter langsung sebagai flag dalam perintah gcloud storage batch-operations jobs create:
Menargetkan bucket tertentu: Menerapkan tindakan ke objek di bucket tertentu:
--bucket-filters="name in ['bucket-1', 'bucket-2']"
Memeriksa kelas penyimpanan dan lokasi bucket: Menerapkan tindakan ke objek di kelas penyimpanan Standard Storage di lokasi
US:--bucket-filters="location.startsWith('us')"
--object-filters="storageClass == 'STANDARD'"Memfilter menurut retensi penghapusan sementara: Menerapkan tindakan ke objek di 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: Menerapkan tindakan ke objek yang memiliki kunci konteks kustom
env:--object-filters="contexts.exists(context, context.key == 'env')"
Mencocokkan key-value pair konteks kustom: Menerapkan 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: Menerapkan 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: Menerapkan 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.