Continuous Integration Style Validator

Validator Gaya Continuous Integration (CI) menerapkan standar coding LookML, konvensi penamaan, dan praktik terbaik struktural di seluruh project LookML Anda dengan menggunakan Linter Gaya LookML. Dengan memeriksa file LookML Anda berdasarkan serangkaian aturan gaya yang dapat dikonfigurasi, Validator Gaya membantu tim Anda mempertahankan codebase yang bersih, konsisten, dan mudah dibaca.

Untuk menjalankan Validator Gaya, Anda harus menambahkan file konfigurasi bernama lkmlstyle.yaml (atau lkmlstyle.yml) ke direktori root repositori project LookML Anda. Lihat bagian File konfigurasi di halaman ini untuk mengetahui detail tentang cara mengonfigurasi linter gaya.

Untuk mengetahui informasi tentang cara mengonfigurasi dan menjalankan Validator Gaya dalam rangkaian CI serta melihat output validasi, lihat halaman dokumentasi Membuat rangkaian Continuous Integration, Menjalankan rangkaian Continuous Integration, dan Melihat hasil eksekusi CI.

Sebelum memulai

Untuk menggunakan Validator Gaya di Integrasi Berkelanjutan, Anda memerlukan hal berikut:

File konfigurasi

File konfigurasi diperlukan untuk menjalankan Validator Gaya di CI Looker. Saat dijalankan, Validator Gaya akan otomatis memeriksa direktori root repositori project LookML Anda untuk menemukan file konfigurasi dalam urutan prioritas berikut:

  1. lkmlstyle.yaml
  2. lkmlstyle.yml

Jika kedua file ada di direktori root, lkmlstyle.yaml akan diprioritaskan dan lkmlstyle.yml akan diabaikan.

Jika lkmlstyle.yaml maupun lkmlstyle.yml tidak ditemukan di direktori root project (dan tidak ada konfigurasi kustom yang diteruskan melalui API), validasi gaya akan gagal dengan error "No style validator configuration provided".

Untuk menjalankan semua 25 aturan bawaan standar dengan setelan defaultnya, Anda dapat menggunakan informasi konfigurasi minimal berikut dalam file lkmlstyle.yaml:

schema_version: 1
ruleset_version: "all-v1.0"

Atau, Anda dapat menyesuaikan file konfigurasi. File konfigurasi dapat berisi parameter tingkat teratas berikut:

Parameter Jenis Wajib? Default Deskripsi
schema_version Bilangan bulat Ya Tidak ada Versi skema konfigurasi. Versi 1 adalah satu-satunya versi yang didukung dan harus ditentukan secara eksplisit.
ruleset_version String Ya Tidak ada Edisi set aturan dasar yang akan diwarisi. Nilai yang didukung: "all-v1.0", "none".
ignore_files Daftar string Tidak [] Pola glob file yang akan dikecualikan sepenuhnya dari validasi gaya.
rules Peta Tidak {} Penyesuaian global (severity dan version) untuk setiap aturan. Juga dapat mengaktifkan aturan bawaan yang tidak disertakan dalam set aturan dasar, dan mengubah tingkat keparahan aturan kustom. Lihat bagian Penyesuaian aturan untuk melihat contohnya.
overrides Daftar peta Tidak [] Penggantian aturan yang tercakup yang menyesuaikan atau mengaktifkan tingkat keparahan untuk jalur file yang cocok tertentu.
custom_rules Daftar peta Tidak [] Aturan kustom deklaratif yang ditentukan pengguna.

ruleset_version

Parameter ruleset_version menentukan dasar strategi validasi gaya Anda:

  • "all-v1.0" (Direkomendasikan): Mengaktifkan semua 25 aturan gaya LookML bawaan standar pada tingkat keparahan error. Opsi ini ideal untuk tim yang menginginkan penerapan kualitas komprehensif langsung.
  • "none": Dimulai dengan nol aturan bawaan yang diaktifkan. Opsi ini ideal untuk tim yang ingin menerapkan validasi gaya secara bertahap, memilih untuk menggunakan aturan tertentu satu per satu, atau hanya menjalankan aturan organisasi kustom. Untuk memilih ikut serta dalam aturan bawaan saat ruleset_version adalah "none", tetapkan tingkat keparahan warn atau error untuk aturan tersebut di blok rules atau di blok overrides.

ignore_files

Parameter ignore_files menerima daftar pola glob untuk file yang ingin Anda lewati sepenuhnya selama validasi gaya. File yang cocok dengan pola ini tidak diperiksa untuk aturan bawaan atau kustom.

Sintaksis karakter pengganti yang didukung mencakup hal berikut:

  • *: Mencocokkan urutan karakter non-pemisah apa pun dalam satu tingkat direktori.
  • **: Cocok dengan urutan karakter apa pun di beberapa tingkat direktori bertingkat.
  • ?: Mencocokkan karakter tunggal apa pun.
  • {a,b} dan [abc]: Mencocokkan alternatif dan class karakter (sintaksis glob Java).

Aturan pencocokan jalur berikut berlaku untuk setiap pola glob dalam file konfigurasi, termasuk ignore_files tingkat teratas serta files dan ignore_files dalam overrides:

  • Jalur bersifat relatif terhadap direktori root project. ./ atau / di awal akan diabaikan.
  • Pola tanpa garis miring (/) cocok di kedalaman direktori mana pun. Misalnya, *.ignore.lkml cocok dengan x.ignore.lkml dan views/x.ignore.lkml.
  • Pola yang diakhiri dengan / cocok dengan semua hal di direktori tersebut.
  • Pola yang diakhiri dengan .lkml atau .lookml juga cocok dengan ekstensi gabungan. Misalnya, *.ignore.lkml cocok dengan x.ignore.view.lkml.

Contoh berikut mengecualikan file vendor, file LookML lama, dan dasbor LookML:

ignore_files:
  - "vendor/**"
  - "legacy/**/*.lkml"
  - "*.ignore.lkml"
  - "dashboards/*.dashboard.lookml"

rules

Anda dapat menggunakan blok rules untuk menyesuaikan tingkat keparahan diagnostik setiap aturan di seluruh project Anda:

rules:
  boolean-dimension-name-prefix:
    severity: warn
  view-dimension-order:
    severity: disabled
  numeric-measure-value-format-presence:
    severity: error

Setiap aturan bawaan yang tercantum di rules (atau di blok overrides) dengan tingkat keparahan warn atau error akan aktif, meskipun ruleset_version disetel ke "none". Misalnya, konfigurasi awal berikut dimulai dengan ruleset_version: "none" dan hanya mengaktifkan dua aturan bawaan:

schema_version: 1
ruleset_version: "none"

rules:
  join-relationship-presence:
    severity: error
  explore-label-presence:
    severity: warn

Anda juga dapat menggunakan blok rules untuk mengubah tingkat keparahan aturan kustom dengan merujuk ke namanya.

severity

Setiap aturan dapat dikonfigurasi dengan salah satu tingkat keparahan yang tidak peka huruf besar/kecil berikut:

  • error: Dianggap sebagai pelanggaran berat. Error menyebabkan proses CI gagal.
  • warn: Dipancarkan sebagai peringatan non-pemblokiran. Peringatan muncul dalam laporan eksekusi CI, tetapi tidak menyebabkan eksekusi CI gagal.
  • disabled: Menonaktifkan aturan sepenuhnya dan melewatinya selama validasi.

overrides

Anda dapat menggunakan parameter overrides untuk mengubah tingkat keparahan aturan untuk file atau direktori tertentu tanpa mengubah tingkat keparahan di seluruh project LookML Anda. Misalnya, Anda dapat menggunakan overrides untuk melonggarkan aturan untuk tampilan staging atau model lama, memperketat aturan untuk jalur penting, atau mengaktifkan aturan tertentu hanya untuk direktori tertentu saat ruleset_version adalah "none".

Setiap entri dalam daftar overrides mendukung kolom berikut:

Kolom Jenis Wajib? Deskripsi
files Daftar string Ya Pola glob yang cocok dengan file tempat blok penggantian ini diterapkan. Tidak boleh kosong.
ignore_files Daftar string Tidak Pola glob yang akan dikecualikan dari blok penggantian spesifik ini.
rules Peta Ya Peta nama aturan ke konfigurasi tingkat keparahan. Tidak boleh kosong. Hanya severity yang diizinkan (dan diperlukan) dalam blok penggantian. Nama aturan harus berupa nama aturan bawaan atau kustom yang valid.

Contoh berikut menonaktifkan pemeriksaan pengurutan dimensi dan menurunkan error deskripsi yang tidak ada menjadi peringatan untuk dasbor dan tampilan lama:

overrides:
  - files:
      - "views/legacy/**"
      - "dashboards/*.dashboard.lookml"
    ignore_files:
      - "views/legacy/core_*.view.lkml"
    rules:
      view-dimension-order:
        severity: disabled
      visible-dimension-description-presence:
        severity: warn

custom_rules

Anda dapat menentukan aturan kustom deklaratif di bagian custom_rules pada file konfigurasi untuk menerapkan konvensi penamaan khusus organisasi, pola arsitektur yang diperlukan, dan tata kelola struktural.

Setiap definisi aturan kustom mendukung parameter umum berikut:

Kolom Jenis Wajib? Deskripsi
name String Ya ID unik, dalam format dash-case berdasarkan konvensi, seperti finance-measure-prefix. Tidak boleh bertentangan dengan nama aturan bawaan atau aturan kustom lainnya.
title String Ya Pesan yang dapat dibaca manusia yang dilaporkan saat terjadi pelanggaran, diformat sebagai (<rule-name>) <title>.
rule_type String Ya Arketipe aturan: pattern_match, property, order, first_child, atau unique. Tidak peka huruf besar/kecil; pattern diterima sebagai alias untuk pattern_match.
severity String Tidak Tingkat diagnostik: error (default), warn, atau disabled. Dapat diganti oleh rules dan overrides.
rationale String Tidak Mendokumentasikan alasan aturan tersebut ada.
select String atau daftar Tidak Jalur node abstract syntax tree (AST) ke target, seperti "view.dimension", "explore", atau ["dimension", "dimension_group"]. Jika tidak disertakan, aturan akan menargetkan setiap node yang cocok dengan filters.
filters Peta Tidak Filter properti yang harus cocok pada node yang ditargetkan, seperti primary_key: true.
parent_filters Peta Tidak Filter properti yang harus cocok dengan induk langsung dari node yang ditargetkan.

Setiap jenis aturan hanya menerima kunci khusus jenisnya sendiri. Kunci yang tidak diketahui, atau kunci yang termasuk dalam jenis aturan yang berbeda (seperti order_by pada aturan pattern_match), akan menyebabkan error konfigurasi.

select

Parameter select menentukan elemen LookML mana yang dievaluasi oleh aturan kustom:

  • Elemen langsung: Menargetkan jenis elemen LookML tertentu, seperti select: "dimension", select: "measure", select: "view", select: "explore", select: "join", select: "model", atau select: "include".
  • Jalur induk-turunan bertingkat: Menargetkan elemen yang ditentukan dalam induk langsung tertentu, seperti select: "view.dimension" (dimensi yang ditentukan dalam tampilan) atau select: "explore.join" (gabungan yang ditentukan dalam Eksplorasi). Induk harus berupa induk langsung, dan hanya dua segmen terakhir dari jalur yang digunakan (sehingga a.b.c berperilaku seperti b.c).
  • Beberapa target: Menargetkan beberapa jenis elemen menggunakan string atau daftar yang dipisahkan koma, seperti select: "dimension, dimension_group" atau select: ["dimension", "dimension_group"].

Nama pemilih, filter, dan turunan adalah kata kunci LookML yang tepat dan peka huruf besar/kecil. Nama yang salah eja tidak dilaporkan sebagai error konfigurasi; sebagai gantinya, aturan tidak pernah cocok.

filters dan parent_filters

Anda dapat menggunakan filters dan parent_filters untuk menyempurnakan node yang ditargetkan berdasarkan properti LookML yang dideklarasikan secara eksplisit dalam file LookML.

  • Kesamaan Boolean: Mencocokkan properti Boolean yang dideklarasikan secara eksplisit, seperti primary_key: true atau hidden: true.
  • Kesamaan string: Mencocokkan nilai string yang persis, seperti type: "yesno" atau type: "count".
  • Daftar salah satu dari: Mencocokkan nilai apa pun dalam daftar, seperti type: ["string", "number", "date"].
  • Pemeriksaan kehadiran: Periksa apakah blok atau properti ada dengan meneruskan string kosong, seperti derived_table: "".
  • Negasi: Tambahkan awalan ! pada kunci atau nilai untuk meniadakan filter. Kunci yang dinegasikan harus diapit tanda kutip karena ! di awal yang tidak diapit tanda kutip adalah sintaksis tag YAML dan menyebabkan file konfigurasi gagal diuraikan:
    • "!hidden": true atau hidden: "!true" cocok dengan item yang terlihat (tidak tersembunyi), termasuk kolom yang tidak mendeklarasikan hidden.
    • type: ["!yesno", "!date"] cocok dengan jenis yang bukan yesno maupun date.

rule_type

Setiap aturan kustom harus menentukan salah satu dari lima arketipe aturan berikut untuk parameter rule_type:

pattern_match

Menerapkan pola ekspresi reguler pada nama entity LookML atau nilai properti. Anda harus menentukan tepat satu dari match atau should_not_match (jika keduanya ditetapkan, hanya match yang diterapkan dan should_not_match diabaikan tanpa pemberitahuan):

  • match (String, ekspresi reguler): Pola yang harus cocok dengan target.
  • should_not_match (String, ekspresi reguler): Pola yang tidak boleh cocok dengan target.

Pola adalah ekspresi reguler Java yang divalidasi saat file konfigurasi dimuat. Pencocokan tidak berlabuh (kecocokan substring); misalnya, match: "fin_" lulus untuk my_fin_total. Gunakan ^ dan $ untuk mencocokkan seluruh nilai.

Jika select menargetkan properti, bukan entity (misalnya, select: "measure.sql" atau select: "dimension.label"), ekspresi reguler dievaluasi terhadap nilai properti, bukan nama entity. Aturan measure-sql-table-reference dan dimension-label-redundant-yes-no bawaan beroperasi dengan cara ini.

Contoh yang memastikan bahwa ukuran mata uang diakhiri dengan _usd atau _eur:

- name: currency-measure-suffix
  title: "Currency measures must end with a currency code like _usd or _eur"
  rule_type: pattern_match
  severity: error
  select: "view.measure"
  filters:
    value_format_name: ["usd", "usd_0", "eur", "eur_0"]
  match: "^.*_(usd|eur)$"

Contoh yang melarang dimensi sementara atau draf:

- name: forbid-temporary-dimensions
  title: "Dimensions must not start with 'tmp_' or 'test_'"
  rule_type: pattern_match
  severity: error
  select: "dimension"
  should_not_match: "^(tmp|test)_.*"
property

Menerapkan kehadiran atau larangan wajib properti turunan tertentu dalam objek LookML. Anda harus menentukan tepat satu dari requires_child atau forbidden_child (jika keduanya ditetapkan, hanya requires_child yang diterapkan dan forbidden_child diabaikan tanpa pemberitahuan):

  • requires_child (String atau daftar): Nama atau nama properti turunan yang harus ada. Saat Anda menentukan daftar, aturan akan terpenuhi jika salah satu turunan yang tercantum ada.
  • forbidden_child (String atau daftar): Nama atau nama properti turunan yang tidak boleh ada. Saat Anda menentukan daftar, node akan ditandai jika salah satu turunan yang tercantum ada.
  • child_filters (Peta, opsional): Filter properti tambahan yang harus dipenuhi oleh turunan wajib.

Contoh yang memerlukan deskripsi pada semua dimensi yang terlihat:

- name: require-visible-dimension-description
  title: "Visible dimensions must specify a description"
  rule_type: property
  severity: warn
  select: "view.dimension"
  filters:
    "!hidden": true
  requires_child: "description"

Contoh yang melarang sql_table_name pada tabel turunan:

- name: forbid-sql-table-name-on-derived-views
  title: "Derived table views cannot specify sql_table_name"
  rule_type: property
  severity: error
  select: "view"
  filters:
    derived_table: ""
  forbidden_child: "sql_table_name"
order

Menerapkan pengurutan alfabetis elemen seinduk dalam penampung.

  • order_by (String, wajib): Jenis LookML dari turunan saudara kandung yang akan diurutkan, biasanya "dimension" atau "measure". Hanya turunan langsung dari node yang dipilih yang dibandingkan, dan turunan dimension_group tidak disertakan dalam "dimension".

Nama dibandingkan dengan memperhatikan huruf besar/kecil berdasarkan kode karakter: huruf besar diurutkan sebelum huruf kecil, dan _ diurutkan di antaranya.

Contoh yang mengharuskan dimensi dicantumkan dalam urutan abjad dalam tampilan:

- name: custom-alphabetical-dimensions
  title: "Dimensions must be kept in alphabetical order within views"
  rule_type: order
  severity: error
  select: "view"
  order_by: "dimension"
first_child

Memastikan bahwa elemen yang cocok dengan filter tertentu muncul sebagai turunan pertama dari kategorinya.

  • position (String, opsional): Batasan posisi. Harus berupa "first" (defaultnya adalah "first").

Untuk aturan first_child, select harus menggunakan formulir parent.child_type, seperti "view.dimension". Parameter filters mengidentifikasi turunan yang harus muncul terlebih dahulu; parameter ini tidak mempersempit node induk mana yang diperiksa. Parameter parent_filters diterima oleh skema, tetapi diabaikan untuk jenis aturan ini.

Contoh yang mengharuskan dimensi kunci utama dideklarasikan terlebih dahulu dalam tampilan:

- name: custom-primary-key-first-dimension
  title: "Primary key dimension must be the first dimension in the view"
  rule_type: first_child
  severity: error
  select: "view.dimension"
  filters:
    primary_key: true
  position: first
unique

Menerapkan keunikan nilai properti di semua node yang cocok dalam file yang divalidasi selama menjalankan CI.

  • unique_property (String, wajib): Nama properti yang harus memiliki nilai unik di seluruh node yang cocok, seperti "sql_table_name" atau "label".

Nilai dibandingkan sebagai string yang sama persis, dan kemunculan pertama serta setiap duplikat dilaporkan. Jika proses validasi hanya memeriksa sebagian kecil file project, duplikat dalam file di luar subset tersebut tidak akan terdeteksi.

Contoh yang memastikan nama tabel unik di semua tampilan:

- name: custom-sql-table-name-uniqueness
  title: "Each view must reference a unique sql_table_name"
  rule_type: unique
  severity: error
  select: "view"
  unique_property: "sql_table_name"

Batasan aturan kustom

Saat membuat aturan kustom, patuhi batasan berikut:

  1. Tidak ada konflik dengan nama aturan bawaan: Aturan kustom tidak dapat menggunakan kembali nama apa pun dari katalog aturan bawaan, seperti boolean-dimension-name-prefix atau sql-table-name-uniqueness.
  2. Nama kustom yang unik: Setiap aturan kustom harus memiliki nama yang berbeda dalam daftar custom_rules.
  3. Format dash-case: Nama aturan harus menggunakan format dash-case (lowercase-words-with-hyphens).

Urutan evaluasi konfigurasi

Saat Style Validator mengevaluasi file LookML, aturan konfigurasi diterapkan dalam urutan berikut:

  1. Pengecualian file: Jika file cocok dengan pola apa pun di ignore_files, file akan dilewati sepenuhnya.
  2. Aturan aktif: Aturan aktif untuk file terdiri dari aturan dari ruleset_version (all-v1.0 atau none), ditambah aturan bawaan yang diberi tingkat keparahan warn atau error di rules atau di blok overrides yang cocok, ditambah semua aturan yang ditentukan di custom_rules.
  3. Penyelesaian tingkat ketidakefektifan: Untuk setiap aturan aktif, setelan pertama berikut yang menentukan tingkat ketidakefektifan akan diprioritaskan: blok overrides yang terakhir cocok, lalu blok rules global, kemudian severity aturan kustom, dan terakhir tingkat ketidakefektifan default (error).
  4. Aturan yang dinonaktifkan: Aturan yang tingkat keparahannya yang telah diselesaikan adalah disabled dilewati untuk file tersebut.

Contoh file konfigurasi

Contoh berikut menunjukkan file lkmlstyle.yaml lengkap yang menunjukkan pemilihan set aturan dasar, pengecualian file, penyesuaian aturan global, penggantian yang tercakup, dan aturan kustom:

# Schema version
schema_version: 1

# Baseline ruleset edition (all-v1.0 or none)
ruleset_version: "all-v1.0"

# Files completely ignored by the style validator
ignore_files:
  - "vendor/**"
  - "*.ignore.lkml"
  - "legacy_dashboards/*.dashboard.lookml"

# Built-in rule customizations
rules:
  view-dimension-order:
    severity: warn
  numeric-measure-value-format-presence:
    severity: warn
  sql-table-name-uniqueness:
    severity: error
  # Replaced by the custom first_child rule below
  primary-key-first-dimension:
    severity: disabled

# Directory/file scoped overrides
overrides:
  - files:
      - "views/staging/**"
    rules:
      visible-dimension-description-presence:
        severity: disabled
      primary-key-visibility:
        severity: warn

# Custom rules catalog
custom_rules:
  # 1. Pattern Match: Finance dimensions must start with fin_
  - name: finance-dimension-prefix
    title: "Finance dimensions must be prefixed with fin_"
    rule_type: pattern_match
    severity: error
    rationale: "Ensures clarity in the field picker for finance metrics."
    select: "view.dimension"
    filters:
      view_label: "Finance"
    match: "^fin_[a-z0-9_]+$"

  # 2. Pattern Match: Forbid draft or test views
  - name: forbid-draft-views
    title: "Views cannot be named with draft_ or test_ prefixes"
    rule_type: pattern_match
    severity: error
    select: "view"
    should_not_match: "^(draft|test)_.*"

  # 3. Property: Require explicit relationship on joins
  - name: require-join-relationship
    title: "All joins must declare an explicit relationship"
    rule_type: property
    severity: error
    select: "explore.join"
    requires_child: "relationship"

  # 4. Property: Explores must not use sql_always_where
  - name: forbid-sql-always-where
    title: "Explores should use always_filter instead of sql_always_where"
    rule_type: property
    severity: warn
    select: "explore"
    forbidden_child: "sql_always_where"

  # 5. Order: Dimension groups inside views must be alphabetical
  - name: view-dimension-groups-alphabetical
    title: "Dimension groups must appear in alphabetical order within views"
    rule_type: order
    severity: warn
    select: "view"
    order_by: "dimension_group"

  # 6. First Child: Primary key must be the first dimension
  - name: custom-primary-key-first-dimension
    title: "The primary key must be defined as the first dimension in the view"
    rule_type: first_child
    severity: error
    select: "view.dimension"
    filters:
      primary_key: true
    position: first

  # 7. Unique: Views must not share the same label
  - name: unique-view-labels
    title: "Views must have unique labels"
    rule_type: unique
    severity: warn
    select: "view"
    unique_property: "label"

Cakupan dan hasil validasi

Bagian berikut menjelaskan file yang diperiksa oleh Validator Gaya dan cara hasil validasi dilaporkan:

File divalidasi

  • Hanya file .lkml dan .lookml di project root yang divalidasi. Project dependensi yang diimpor (lokal atau jarak jauh) tidak divalidasi.
  • Setiap file divalidasi berdasarkan kontennya sendiri. Pernyataan include: tidak diikuti, dan objek yang ditarik melalui pernyataan include: tidak divalidasi sebagai bagian dari file yang disertakan.
  • CI yang dijalankan oleh dbt Cloud CI jobs memvalidasi cabang LookML produksi, bukan cabang pengembangan.

Perilaku dan output lulus atau gagal

  • Validasi Gaya gagal dijalankan hanya jika setidaknya ada satu diagnostik dengan tingkat keparahan error. Peringatan saja tidak menyebabkan proses berjalan gagal.
  • Di halaman hasil eksekusi CI, setiap hasil diagnostik mencakup nama aturan, jalur, nomor baris, cuplikan konteks, dan link ke dokumentasi aturan. Untuk mengetahui informasi selengkapnya tentang menjalankan rangkaian pengujian dan melihat hasil, lihat Menjalankan rangkaian pengujian Continuous Integration dan Melihat hasil eksekusi CI.
  • File konfigurasi yang tidak valid akan menghasilkan satu error invalid-config pada file konfigurasi di baris 1, dan validasi gagal.

Validasi inkremental

Anda dapat mengaktifkan validasi inkremental untuk Validator Gaya dengan mencentang kotak Hanya error inkremental (diaktifkan secara default) di bagian Validator Gaya saat Anda membuat atau mengedit rangkaian continuous integration.

Jika validasi inkremental diaktifkan, Validator Gaya hanya melaporkan pelanggaran yang baru di cabang pengembangan Anda:

  1. Tindakan ini memvalidasi cabang pengembangan.
  2. Tindakan ini memvalidasi cabang target menggunakan file konfigurasi cabang pengembangan.
  3. Laporan ini hanya melaporkan pelanggaran yang belum ada di cabang target.

Perhatikan perilaku berikut saat validasi inkremental diaktifkan:

  • Pelanggaran yang sudah ada di cabang target tidak menyebabkan eksekusi gagal.
  • Karena file konfigurasi cabang pengembangan digunakan untuk memvalidasi kedua cabang, perubahan konfigurasi pada cabang pengembangan tidak dapat menyembunyikan pelanggaran yang sudah ada atau membuat LookML yang sudah ada muncul sebagai pelanggaran baru dengan sendirinya.
  • Cabang pengembangan harus berisi file konfigurasi lkmlstyle.yaml (atau lkmlstyle.yml); jika tidak, proses akan gagal dengan error konfigurasi tidak ada.

Jika Hanya error inkremental dinonaktifkan, setiap pelanggaran yang ditemukan di cabang yang divalidasi akan dilaporkan.

Katalog aturan bawaan

Tabel berikut mencantumkan semua 25 aturan bawaan standar yang tersedia di set aturan all-v1.0:

Nama aturan Entitas target Ringkasan aturan
average-measure-name-prefix Ukur Ukuran dengan type: average atau average_distinct harus dimulai dengan avg_ atau average_.
boolean-dimension-name-prefix Dimensi Dimensi yesno harus dimulai dengan is_, has_, atau does_.
count-measure-name-prefix Ukur Pengukuran dengan type: count atau count_distinct harus dimulai dengan count_.
dimension-group-name-suffix Grup dimensi Grup dimensi tidak boleh diakhiri dengan _at, _date, atau _time.
dimension-label-redundant-yes-no Dimensi Label dimensi yesno tidak boleh menyertakan penanda ya/tidak seperti (Yes / No) atau (yes/no) (huruf besar atau spasi apa pun).
dimension-name-snake-case Dimensi Nama dimensi dan grup dimensi harus menggunakan huruf kecil snake_case.
explore-fields-presence Jelajahi Eksplorasi harus menentukan properti fields:.
explore-label-presence Jelajahi Eksplorasi harus menentukan properti label: yang eksplisit.
includes-wildcard-usage Sertakan Pernyataan include: tidak boleh menggunakan karakter pengganti untuk file tampilan (seperti *.view.lkml atau /views/*.view). Karakter pengganti lainnya tidak ditandai.
join-relationship-presence Gabung Pernyataan eksplorasi join: harus menentukan relationship:.
measure-name-snake-case Ukur Nama pengukuran harus dalam huruf kecil snake_case.
measure-sql-table-reference Ukur Ukuran harus mereferensikan dimensi menggunakan ${dimension_name}, bukan ${TABLE}.column.
numeric-measure-value-format-presence Ukur Pengukuran dengan type: count, sum, average, atau number harus menentukan value_format: atau value_format_name:.
pdt-view-name-prefix Lihat Tabel turunan persisten (PDT) harus dimulai dengan pdt_. Tampilan dihitung sebagai PDT jika derived_table-nya menetapkan datagroup_trigger, sql_trigger_value, interval_trigger, atau persist_for, atau menetapkan materialized_view: yes.
primary-key-first-dimension Dimensi Dimensi kunci utama harus menjadi dimensi pertama yang ditentukan dalam tampilan.
primary-key-visibility Dimensi Dimensi kunci utama harus disembunyikan (hidden: yes).
sql-table-name-uniqueness Lihat Beberapa tampilan tidak boleh mengarah ke sql_table_name yang sama persis.
sum-measure-name-prefix Ukur Ukuran dengan type: sum atau sum_distinct harus dimulai dengan sum_ atau total_.
view-dimension-order Lihat Dimensi dalam tampilan harus disusun dalam urutan abjad.
view-label-presence Lihat Tampilan harus menentukan label: eksplisit.
view-measure-order Lihat Ukuran dalam tampilan harus diatur dalam urutan abjad.
view-name-snake-case Lihat Nama tampilan harus menggunakan huruf kecil snake_case (+ di awal untuk penyempurnaan diizinkan).
view-primary-key-presence Lihat Tampilan dengan sql_table_name atau derived_table (dan tanpa extends) harus menentukan kunci utama.
visible-dimension-description-presence Dimensi Dimensi yang terlihat harus memiliki description:.
visible-measure-description-presence Ukur Ukuran yang terlihat harus memiliki description:.

Pemecahan masalah

Bagian berikut menjelaskan masalah konfigurasi umum dan variasi sintaksis yang didukung saat memecahkan masalah Validator Gaya:

Kesalahan konfigurasi

Masalah berikut ditolak saat file konfigurasi dimuat dan dilaporkan sebagai error invalid-config:

  • Kunci tingkat teratas yang tidak diketahui atau kunci yang tidak diketahui di dalam konfigurasi aturan.
  • schema_version atau ruleset_version tidak ada, atau nilai yang tidak didukung untuk salah satu parameter.
  • Tingkat keparahan skalar singkat, seperti rule-name: warn.
  • Blok penggantian dengan files atau rules yang tidak ada atau kosong, atau konfigurasi aturan di dalam blok penggantian tanpa severity.
  • Nama aturan yang tidak diketahui dalam blok penggantian.
  • Aturan kustom yang namanya sama dengan aturan kustom lain atau aturan bawaan.
  • Kunci khusus jenis yang digunakan pada rule_type yang salah (misalnya, order_by pada aturan pattern_match).
  • Ekspresi reguler tidak valid.
  • Parameter order_by tidak ada (untuk aturan order) atau parameter unique_property tidak ada (untuk aturan unique).
  • Nilai position selain first (untuk aturan first_child).
  • ! di awal kunci filter yang tidak diapit tanda petik, seperti !hidden: true, yang merupakan sintaksis tag YAML tidak valid dan menyebabkan file konfigurasi gagal diuraikan.

Masalah konfigurasi senyap

  • Nama aturan yang salah eja dalam blok rules global akan diabaikan tanpa pemberitahuan.
  • Nama jenis LookML yang salah eja di select, filters, parent_filters, requires_child, forbidden_child, atau order_by tidak akan memunculkan error. Sebagai gantinya, aturan tidak pernah cocok (atau, untuk requires_child, selalu gagal).
  • Menentukan match dan should_not_match, atau requires_child dan forbidden_child: hanya parameter pertama dari setiap pasangan yang diterapkan, dan yang kedua diabaikan.
  • Menentukan parent_filters pada aturan first_child tidak akan berpengaruh dan diabaikan.
  • Filter hanya mencocokkan properti yang dideklarasikan secara eksplisit dalam file LookML, bukan nilai default LookML (lihat Sintaksis pemfilteran).
  • Pola ekspresi reguler dalam aturan pattern_match adalah kecocokan substring yang tidak berlabuh kecuali Anda melabuhkannya dengan ^ dan $ (lihat pattern_match).

Variasi sintaksis yang diterima

  • Nilai untuk severity dan rule_type tidak peka huruf besar/kecil.
  • rule_type: pattern diterima sebagai alias untuk pattern_match.
  • Spasi kosong di awal dan akhir ruleset_version diabaikan.