Bagikan melalui


Referensi kebijakan komputasi

Artikel ini adalah referensi untuk definisi kebijakan komputasi. Artikel ini mencakup referensi atribut kebijakan dan jenis batasan yang tersedia. Ada juga contoh kebijakan yang dapat Anda referensikan untuk kasus penggunaan umum.

Apa itu definisi kebijakan?

Definisi kebijakan adalah aturan kebijakan individual yang dinyatakan dalam JSON. Definisi dapat menambahkan aturan ke salah satu atribut yang dikontrol dengan Clusters API. Misalnya, definisi ini menetapkan waktu penghentian otomatis default, melarang pengguna untuk menggunakan kumpulan, dan menegakkan penggunaan Photon.

{
  "autotermination_minutes": {
    "type": "unlimited",
    "defaultValue": 4320,
    "isOptional": true
  },
  "instance_pool_id": {
    "type": "forbidden",
    "hidden": true
  },
  "runtime_engine": {
    "type": "fixed",
    "value": "PHOTON",
    "hidden": true
  }
}

Hanya boleh ada satu batasan per atribut. Jalur atribut mencerminkan nama atribut API. Untuk atribut berlapis, jalur menggabungkan nama atribut berlapis menggunakan titik. Atribut yang tidak ditentukan dalam definisi kebijakan tidak akan dibatasi.

Atribut yang didukung

Kebijakan mendukung semua atribut yang dikontrol dengan Clusters API. Jenis pembatasan yang dapat Anda tempatkan pada atribut dapat bervariasi per pengaturan berdasarkan jenisnya dan kaitannya dengan elemen UI. Anda tidak dapat menggunakan kebijakan untuk menentukan izin komputasi.

Anda juga dapat menggunakan kebijakan untuk mengatur DBA maks per jam dan jenis kluster. Lihat jalur atribut virtual .

Tabel berikut mencantumkan jalur atribut kebijakan yang didukung:

Jalur atribut Jenis Deskripsi
autoscale.max_workers nomor opsional Saat disembunyikan, menghapus kolom jumlah pekerja maksimum dari UI.
autoscale.min_workers nomor opsional Ketika disembunyikan, elemen jumlah pekerja minimum dihapus dari UI.
autotermination_minutes angka Nilai 0 tidak mewakili penghentian otomatis. Saat disembunyikan, menghapus kotak centang penghentian otomatis dan input nilai dari UI.
azure_attributes.availability tali Mengontrol komputasi menggunakan instans sesuai permintaan atau spot (ON_DEMAND_AZURE atau SPOT_WITH_FALLBACK_AZURE).
azure_attributes.first_on_demand angka Mengontrol jumlah simpul yang akan ditempatkan pada instans on-demand.
azure_attributes.spot_bid_max_price angka Mengatur harga maksimum untuk spot instance Azure.
cluster_log_conf.path tali URL tujuan dari file log.
cluster_log_conf.type tali Jenis tujuan log. DBFS adalah satu-satunya nilai yang dapat diterima.
cluster_name string Nama kluster.
custom_tags.* string Kontrol nilai tag tertentu dengan menambahkan nama tag, misalnya: custom_tags.<mytag>.
data_security_mode string Mengatur mode akses kluster. Katalog Unity memerlukan SINGLE_USER atau USER_ISOLATION (mode akses Standar di UI). Nilai NONE berarti tidak ada fitur keamanan yang diaktifkan.
docker_image.basic_auth.password tali Kata sandi untuk autentikasi dasar citra Databricks Container Services.
docker_image.basic_auth.username string Nama pengguna untuk autentikasi dasar citra di Databricks Container Services.
docker_image.url tali Mengontrol URL gambar layanan kontainer Databricks. Saat disembunyikan, menghapus bagian Layanan Kontainer Databricks dari UI.
driver_node_type_id teks opsional Ketika disembunyikan, menghapus pilihan jenis node driver dari UI.
enable_local_disk_encryption Boolean Atur ke true untuk mengaktifkan, atau false untuk menonaktifkan, mengenkripsi disk yang dilampirkan secara lokal ke kluster (seperti yang ditentukan melalui API).
init_scripts.*.workspace.destination init_scripts.*.volumes.destination init_scripts.*.abfss.destination init_scripts.*.file.destination tali * mengacu pada indeks dari skrip inisiasi dalam array atribut. Lihat kebijakan penulisan untuk atribut array.
instance_pool_id tali Mengontrol pool yang digunakan oleh node pekerja jika driver_instance_pool_id sudah ditentukan, atau untuk semua node klaster jika tidak. Jika Anda menggunakan kumpulan untuk simpul pekerja, Anda juga harus menggunakan kumpulan untuk simpul penggerak. Saat disembunyikan, menghapus pilihan kumpulan dari UI.
driver_instance_pool_id tali Jika ditentukan, konfigurasikan kumpulan yang berbeda untuk simpul driver daripada untuk simpul pekerja. Jika tidak ditentukan, akan otomatis menggunakan instance_pool_id. Jika Anda menggunakan kumpulan untuk simpul pekerja, Anda juga harus menggunakan kumpulan untuk simpul penggerak. Saat disembunyikan, menghapus pilihan kumpulan driver dari UI.
node_type_id string Saat disembunyikan, menghapus pilihan jenis node pekerja dari UI.
num_workers nomor opsional Saat disembunyikan, menghapus spesifikasi nomor pekerja dari UI.
runtime_engine tali Menentukan apakah kluster menggunakan Photon atau tidak. Nilai yang mungkin PHOTON atau STANDARD.
single_user_name tali Mengontrol pengguna atau grup mana yang dapat ditetapkan ke sumber daya komputasi.
spark_conf.* teks opsional Mengontrol nilai konfigurasi tertentu dengan menambahkan nama kunci konfigurasi, misalnya: spark_conf.spark.executor.memory.
spark_env_vars.* teks opsional Mengontrol nilai variabel lingkungan Spark tertentu dengan menambahkan variabel lingkungan, misalnya: spark_env_vars.<environment variable name>.
spark_version tali Nama versi gambar Spark seperti yang ditentukan melalui API (Databricks Runtime). Anda juga dapat menggunakan nilai kebijakan khusus yang secara dinamis memilih Databricks Runtime. Lihat nilai kebijakan khusus untuk pemilihan Databricks Runtime.
workload_type.clients.jobs Boolean Menentukan apakah sumber daya komputasi dapat digunakan untuk pekerjaan. Lihat Pencegahan penggunaan komputasi dalam pekerjaan.
workload_type.clients.notebooks Boolean Menentukan apakah sumber daya komputasi dapat digunakan dengan notebook. Lihat Pencegahan penggunaan komputasi dalam pekerjaan.

Jalur atribut virtual

Tabel ini mencakup dua atribut sintetis tambahan yang didukung oleh kebijakan:

Jalur atribut Jenis Deskripsi
dbus_per_hour angka Atribut terhitung yang mewakili DBA maksimum yang dapat digunakan sumber daya setiap jam termasuk simpul driver. Metrik ini adalah cara langsung untuk mengontrol biaya pada tingkat komputasi individual. Gunakan dengan batasan rentang.
cluster_type tali Mewakili jenis kluster yang dapat dibuat:
  • all-purpose untuk komputasi serba guna Azure Databricks
  • job untuk komputasi pekerjaan yang dibuat oleh penjadwal pekerjaan
  • dlt untuk komputasi yang dibuat untuk alur DLT

Izinkan atau blokir jenis komputasi tertentu untuk dibuat dari kebijakan tersebut. Jika nilai all-purpose tidak diizinkan, kebijakan tidak ditampilkan di antarmuka pembuatan komputasi serbaguna. Jika nilai job tidak diizinkan, kebijakan tidak ditampilkan di UI pembuatan tugas komputasi.

Nilai kebijakan khusus untuk pemilihan Databricks Runtime

Atribut spark_version mendukung nilai khusus yang secara dinamis memetakan ke versi Databricks Runtime berdasarkan kumpulan versi Databricks Runtime yang didukung saat ini.

Nilai berikut dapat digunakan dalam atribut spark_version:

  • auto:latest: Memetakan ke versi terbaru GA Databricks Runtime.
  • auto:latest-ml: Memetakan ke versi ML Databricks Runtime terbaru.
  • auto:latest-lts: Memetakan ke versi Runtime Databricks terbaru yang memiliki dukungan jangka panjang (LTS).
  • auto:latest-lts-ml: Memetakan ke versi terbaru ML Databricks Runtime LTS.
  • auto:prev-major: Memetakan ke versi GA Databricks Runtime terbaru kedua. Misalnya, jika auto:latest adalah 14,2, maka auto:prev-major adalah 13,3.
  • auto:prev-major-ml: Memetakan ke versi terbaru kedua dari ML Runtime GA Databricks. Misalnya, jika auto:latest adalah 14,2, maka auto:prev-major adalah 13,3.
  • auto:prev-lts: Memetakan ke versi LTS Databricks Runtime terbaru yang kedua. Misalnya, jika auto:latest-lts adalah 13,3, maka auto:prev-lts adalah 12,2.
  • auto:prev-lts-ml: Memetakan ke versi ML Databricks Runtime LTS terbaru kedua. Misalnya, jika auto:latest-lts adalah 13,3, maka auto:prev-lts adalah 12,2.

Nota

Menggunakan nilai-nilai ini tidak membuat komputasi pembaruan otomatis saat versi runtime baru dirilis. Pengguna harus secara eksplisit mengedit komputasi agar versi Databricks Runtime berubah.

Jenis kebijakan yang didukung

Bagian ini mencakup referensi untuk setiap jenis kebijakan yang tersedia. Ada dua kategori jenis kebijakan: kebijakan tetap dan kebijakan pembatasan.

Kebijakan tetap mencegah konfigurasi pengguna pada atribut. Dua jenis kebijakan tetap adalah:

Membatasi kebijakan membatasi opsi pengguna untuk mengonfigurasi atribut. Membatasi kebijakan juga memungkinkan Anda mengatur nilai default dan membuat atribut opsional. Lihat Bidang kebijakan pembatasan tambahan.

Opsi Anda untuk membatasi kebijakan adalah:

Kebijakan tetap

Kebijakan tetap membatasi atribut ke nilai yang ditentukan. Untuk nilai atribut selain numerik dan boolean, nilai harus diwakili oleh atau dikonversi ke string.

Dengan kebijakan tetap, Anda juga dapat menyembunyikan atribut dari UI dengan mengatur bidang hidden ke true.

interface FixedPolicy {
    type: "fixed";
    value: string | number | boolean;
    hidden?: boolean;
}

Contoh kebijakan ini memperbaiki versi Databricks Runtime dan menyembunyikan bidang dari UI pengguna:

{
  "spark_version": { "type": "fixed", "value": "auto:latest-lts", "hidden": true }
}

Kebijakan Terlarang

Kebijakan terlarang mencegah pengguna mengonfigurasi atribut. Kebijakan terlarang hanya kompatibel dengan atribut opsional.

interface ForbiddenPolicy {
    type: "forbidden";
}

Kebijakan ini melarang menghubungkan pool ke komputasi untuk node pekerja. Pool juga dilarang pada node driver, karena driver_instance_pool_id mewarisi kebijakan.

{
  "instance_pool_id": { "type": "forbidden" }
}

kebijakan daftar izin

Kebijakan daftar izin menentukan daftar nilai yang dapat dipilih pengguna ketika mengonfigurasi atribut.

interface AllowlistPolicy {
  type: "allowlist";
  values: (string | number | boolean)[];
  defaultValue?: string | number | boolean;
  isOptional?: boolean;
}

Contoh daftar izin ini memungkinkan pengguna untuk memilih antara dua versi Databricks Runtime:

{
  "spark_version": { "type": "allowlist", "values": ["13.3.x-scala2.12", "12.2.x-scala2.12"] }
}

Kebijakan Daftar Blokir

Kebijakan daftar blokir mencantumkan nilai yang tidak diizinkan. Karena nilai harus sama persis, kebijakan ini mungkin tidak berfungsi seperti yang diharapkan ketika atribut bersifat lenient dalam bagaimana nilai diwakili (misalnya, memungkinkan spasi di depan dan di belakang).

interface BlocklistPolicy {
  type: "blocklist";
  values: (string | number | boolean)[];
  defaultValue?: string | number | boolean;
  isOptional?: boolean;
}

Contoh ini memblokir pengguna untuk memilih 7.3.x-scala2.12 sebagai Databricks Runtime.

{
  "spark_version": { "type": "blocklist", "values": ["7.3.x-scala2.12"] }
}

Kebijakan Regex

Kebijakan regex membatasi nilai yang tersedia untuk nilai yang cocok dengan regex. Untuk keamanan, pastikan regex Anda ditambatkan ke awal dan akhir dari nilai string.

interface RegexPolicy {
  type: "regex";
  pattern: string;
  defaultValue?: string | number | boolean;
  isOptional?: boolean;
}

Contoh ini membatasi versi Databricks Runtime yang dapat dipilih pengguna dari:

{
  "spark_version": { "type": "regex", "pattern": "13\\.[3456].*" }
}

Kebijakan Jangkauan

Kebijakan rentang membatasi nilai ke rentang tertentu menggunakan bidang minValue dan maxValue. Nilai harus berupa angka desimal. Batas numerik harus dapat diwakili sebagai nilai titik mengambang ganda. Untuk menunjukkan kurangnya batas tertentu, Anda dapat menghilangkan minValue atau maxValue.

interface RangePolicy {
  type: "range";
  minValue?: number;
  maxValue?: number;
  defaultValue?: string | number | boolean;
  isOptional?: boolean;
}

Contoh ini membatasi jumlah maksimum pekerja hingga 10:

{
  "num_workers": { "type": "range", "maxValue": 10 }
}

Kebijakan Tidak Terbatas

Kebijakan tidak terbatas digunakan untuk membuat atribut yang diperlukan atau untuk mengatur nilai default di UI.

interface UnlimitedPolicy {
  type: "unlimited";
  defaultValue?: string | number | boolean;
  isOptional?: boolean;
}

Contoh ini menambahkan tag COST_BUCKET ke komputasi:

{
  "custom_tags.COST_BUCKET": { "type": "unlimited" }
}

Untuk mengatur nilai default untuk variabel konfigurasi Spark, tetapi juga memungkinkan menghilangkan (menghapus) variabel tersebut:

{
  "spark_conf.spark.my.conf": { "type": "unlimited", "isOptional": true, "defaultValue": "my_value" }
}

Bidang kebijakan pembatasan tambahan

Untuk membatasi jenis kebijakan, Anda dapat menentukan dua bidang tambahan:

  • defaultValue - Nilai yang secara otomatis terisi di UI pembuatan komputasi.
  • isOptional - Kebijakan pembatasan pada atribut secara otomatis membuatnya diperlukan. Untuk membuat atribut opsional, atur bidang isOptional ke true.

Nota

Nilai default tidak secara otomatis diterapkan ke komputasi yang dibuat dengan API Kluster . Untuk menerapkan nilai default menggunakan API, tambahkan parameter apply_policy_default_values ke definisi komputasi dan atur ke true.

Contoh kebijakan ini menentukan nilai default id1 untuk kumpulan simpul pekerja, tetapi menjadikannya opsional. Saat membuat komputasi, Anda dapat memilih kumpulan yang berbeda atau memilih untuk tidak menggunakannya. Jika driver_instance_pool_id tidak ditentukan dalam kebijakan atau saat membangun komputasi, kumpulan yang sama digunakan untuk simpul pekerja dan simpul pengendali.

{
  "instance_pool_id": { "type": "unlimited", "isOptional": true, "defaultValue": "id1" }
}

Menulis kebijakan untuk atribut array

Anda dapat menentukan kebijakan untuk atribut array dengan dua cara:

  • Batasan generik untuk semua elemen array. Batasan ini menggunakan simbol pengganti * dalam jalur kebijakan.
  • Batasan khusus untuk elemen array pada indeks tertentu. Pembatasan ini menggunakan angka pada jalur.

Misalnya, untuk atribut array init_scripts, jalur generik dimulai dengan init_scripts.* dan jalur tertentu dengan init_scripts.<n>, di mana <n> adalah indeks bilangan bulat dalam array (dimulai dengan 0). Anda dapat menggabungkan batasan generik dan spesifik, dalam hal ini batasan generik berlaku untuk setiap elemen array yang tidak memiliki batasan tertentu. Dalam setiap kasus, hanya satu batasan kebijakan yang akan berlaku.

Bagian berikut menunjukkan contoh contoh umum yang menggunakan atribut array.

Memerlukan entri yang spesifik untuk inklusi

Anda tidak dapat memerlukan nilai tertentu tanpa menentukan urutan. Misalnya:

{
  "init_scripts.0.volumes.destination": {
    "type": "fixed",
    "value": "<required-script-1>"
  },
  "init_scripts.1.volumes.destination": {
    "type": "fixed",
    "value": "<required-script-2>"
  }
}

Memerlukan nilai tetap dari seluruh daftar

{
  "init_scripts.0.volumes.destination": {
    "type": "fixed",
    "value": "<required-script-1>"
  },
  "init_scripts.*.volumes.destination": {
    "type": "forbidden"
  }
}

Melarang penggunaan sama sekali

{
  "init_scripts.*.volumes.destination": {
    "type": "forbidden"
  }
}

Perbolehkan entri yang mengikuti pembatasan tertentu

{
  "init_scripts.*.volumes.destination": {
    "type": "regex",
    "pattern": ".*<required-content>.*"
  }
}

Memperbaiki sekumpulan skrip init tertentu

Dalam kasus jalur init_scripts, array dapat berisi salah satu dari beberapa struktur dimana berbagai varian yang mungkin perlu ditangani tergantung pada kasus penggunaannya. Misalnya, untuk memerlukan serangkaian skrip init tertentu, dan melarang varian apa pun dari versi lain, Anda dapat menggunakan pola berikut:

{
  "init_scripts.0.volumes.destination": {
    "type": "fixed",
    "value": "<volume-paths>"
  },
  "init_scripts.1.volumes.destination": {
    "type": "fixed",
    "value": "<volume-paths>"
  },
  "init_scripts.*.workspace.destination": {
    "type": "forbidden"
  },
  "init_scripts.*.abfss.destination": {
    "type": "forbidden"
  },
  "init_scripts.*.file.destination": {
    "type": "forbidden"
  }
}

Contoh kebijakan

Bagian ini mencakup contoh kebijakan yang dapat Anda gunakan sebagai referensi untuk membuat kebijakan Anda sendiri. Anda juga dapat menggunakan keluarga kebijakan yang disediakan Azure Databricks sebagai templat untuk kasus penggunaan kebijakan umum.

Kebijakan komputasi umum

Kebijakan komputasi tujuan umum dimaksudkan untuk memandu pengguna dan membatasi beberapa fungsionalitas, sambil memerlukan tag, membatasi jumlah maksimum instans, dan memberlakukan batas waktu.

{
  "instance_pool_id": {
    "type": "forbidden",
    "hidden": true
  },
  "spark_version": {
    "type": "regex",
    "pattern": "12\\.[0-9]+\\.x-scala.*"
  },
  "node_type_id": {
    "type": "allowlist",
    "values": ["Standard_L4s", "Standard_L8s", "Standard_L16s"],
    "defaultValue": "Standard_L16s_v2"
  },
  "driver_node_type_id": {
    "type": "fixed",
    "value": "Standard_L16s_v2",
    "hidden": true
  },
  "autoscale.min_workers": {
    "type": "fixed",
    "value": 1,
    "hidden": true
  },
  "autoscale.max_workers": {
    "type": "range",
    "maxValue": 25,
    "defaultValue": 5
  },
  "autotermination_minutes": {
    "type": "fixed",
    "value": 30,
    "hidden": true
  },
  "custom_tags.team": {
    "type": "fixed",
    "value": "product"
  }
}

Menentukan batas pada komputasi alur DLT

Nota

Saat menggunakan kebijakan untuk mengonfigurasi komputasi DLT, Databricks merekomendasikan penerapan satu kebijakan ke komputasi default dan maintenance.

Untuk mengonfigurasi kebijakan untuk komputasi pipeline, buat kebijakan dengan bidang cluster_type disetel ke dlt. Contoh berikut membuat kebijakan minimal untuk komputasi DLT:

{
  "cluster_type": {
    "type": "fixed",
    "value": "dlt"
  },
  "num_workers": {
    "type": "unlimited",
    "defaultValue": 3,
    "isOptional": true
  },
  "node_type_id": {
    "type": "unlimited",
    "isOptional": true
  },
  "spark_version": {
    "type": "unlimited",
    "hidden": true
  }
}

Kebijakan berukuran sedang yang sederhana

Memungkinkan pengguna membuat komputasi berukuran sedang dengan konfigurasi minimal. Satu-satunya field yang wajib diisi saat pembuatan adalah nama komputasi; sisanya sudah diatur dan disembunyikan.

{
  "instance_pool_id": {
    "type": "forbidden",
    "hidden": true
  },
  "spark_conf.spark.databricks.cluster.profile": {
    "type": "forbidden",
    "hidden": true
  },
  "autoscale.min_workers": {
    "type": "fixed",
    "value": 1,
    "hidden": true
  },
  "autoscale.max_workers": {
    "type": "fixed",
    "value": 10,
    "hidden": true
  },
  "autotermination_minutes": {
    "type": "fixed",
    "value": 60,
    "hidden": true
  },
  "node_type_id": {
    "type": "fixed",
    "value": "Standard_L8s_v2",
    "hidden": true
  },
  "driver_node_type_id": {
    "type": "fixed",
    "value": "Standard_L8s_v2",
    "hidden": true
  },
  "spark_version": {
    "type": "fixed",
    "value": "auto:latest-ml",
    "hidden": true
  },
  "custom_tags.team": {
    "type": "fixed",
    "value": "product"
  }
}

Kebijakan yang hanya berfokus pada pekerjaan

Memungkinkan pengguna membuat perhitungan tugas untuk menjalankan pekerjaan. Pengguna tidak dapat membuat komputasi semua tujuan menggunakan kebijakan ini.

{
  "cluster_type": {
    "type": "fixed",
    "value": "job"
  },
  "dbus_per_hour": {
    "type": "range",
    "maxValue": 100
  },
  "instance_pool_id": {
    "type": "forbidden",
    "hidden": true
  },
  "num_workers": {
    "type": "range",
    "minValue": 1
  },
  "node_type_id": {
    "type": "regex",
    "pattern": "Standard_[DLS]*[1-6]{1,2}_v[2,3]"
  },
  "driver_node_type_id": {
    "type": "regex",
    "pattern": "Standard_[DLS]*[1-6]{1,2}_v[2,3]"
  },
  "spark_version": {
    "type": "unlimited",
    "defaultValue": "auto:latest-lts"
  },
  "custom_tags.team": {
    "type": "fixed",
    "value": "product"
  }
}

Kebijakan metastore eksternal

Memungkinkan pengguna membuat komputasi dengan metastore yang sudah ditentukan oleh admin dan terlampir. Ini berguna untuk memungkinkan pengguna membuat komputasi mereka sendiri tanpa memerlukan konfigurasi tambahan.

{
  "spark_conf.spark.hadoop.javax.jdo.option.ConnectionURL": {
    "type": "fixed",
    "value": "jdbc:sqlserver://<jdbc-url>"
  },
  "spark_conf.spark.hadoop.javax.jdo.option.ConnectionDriverName": {
    "type": "fixed",
    "value": "com.microsoft.sqlserver.jdbc.SQLServerDriver"
  },
  "spark_conf.spark.databricks.delta.preview.enabled": {
    "type": "fixed",
    "value": "true"
  },
  "spark_conf.spark.hadoop.javax.jdo.option.ConnectionUserName": {
    "type": "fixed",
    "value": "<metastore-user>"
  },
  "spark_conf.spark.hadoop.javax.jdo.option.ConnectionPassword": {
    "type": "fixed",
    "value": "<metastore-password>"
  }
}

Memastikan sumber daya komputasi tidak digunakan dengan pekerjaan

Kebijakan ini mencegah pengguna menggunakan komputasi untuk menjalankan pekerjaan. Pengguna hanya akan dapat menggunakan komputasi dengan notebook.

{
  "workload_type.clients.notebooks": {
    "type": "fixed",
    "value": true
  },
  "workload_type.clients.jobs": {
    "type": "fixed",
    "value": false
  }
}

Menghapus kebijakan penskalakan otomatis

Kebijakan ini menonaktifkan penskalaan otomatis dan memungkinkan pengguna untuk mengatur jumlah pekerja dalam rentang tertentu.

{
  "num_workers": {
    "type": "range",
    "maxValue": 25,
    "minValue": 1,
    "defaultValue": 5
  }
}

Penerapan tag kustom

Untuk menambahkan aturan tag komputasi ke kebijakan, gunakan atribut custom_tags.<tag-name>.

Misalnya, setiap pengguna yang menggunakan kebijakan ini perlu mengisi tag COST_CENTER dengan 9999, 9921, atau 9531 agar komputasi diluncurkan:

{ "custom_tags.COST_CENTER": { "type": "allowlist", "values": ["9999", "9921", "9531"] } }