Referensi filter CEL untuk operasi batch penyimpanan

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:

  1. Kondisi filter: Anda hanya dapat menggabungkan kondisi filter menggunakan operator AND (&&) logis. Mesin kueri tidak mendukung operator OR (||) logis.
  2. Penentuan posisi argumen: Anda harus menempatkan kolom metadata target di sisi kiri fungsi. Misalnya, gunakan name.startsWith("live-") bukan "live-".startsWith(name).
  3. Metode array: Anda dapat memanggil makro exists langsung di kolom berulang, seperti contexts.exists(...) atau metadata.exists(...).
  4. 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 seperti name.startsWith("prod-")) untuk mempersempit cakupan kueri dan memenuhi batas ini.
  5. 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 env dengan nilai prod:

    --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 prod dan 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