Veri akışları ve veri akışı grafikleri için ifade referansları

Bu başvuru hem veri akışları hem de veri akışı grafikleri için geçerlidir. Her ikisi de eşleme, filtreleme ve zenginleştirme dönüşümleri için aynı ifade dilini kullanır. Veri akışı grafikleri, uygun olduğunda belirtilen dal ve pencere (birikme) dönüşümlerini de destekler.

Konumsal değişkenler

Her kuralın inputs dizisi içinde expressionkullanılabilen değişkenleri belirler. İlk giriş olur $1, ikincisi olur $2ve bu şekilde devam eder.

Girişler İfade Result
Position, Office $1 + ", " + $2 Konum ve Office'i virgülle birleştirir
temperature cToF($1) Santigrat'ı Fahrenheit'e dönüştürür
temperature, humidity $1 * $2 < 100000 İki alana karşı eşiği denetler

Yalnızca bir giriş belirtilirse ve ifade sağlanmazsa, bu girişte yer alan değer doğrudan çıkışa kopyalanır.

Operatörler

İfadeler, en yüksekten en düşük önceliğe kadar listelenen aşağıdaki işleçleri destekler:

Öncelik Operatörler Açıklama
1 ! Mantıksal NOT (birli)
2 ^ Üs alma
3 *, /, % Çarpma, bölme, modül
4 +, - Toplama / dize birleştirme, çıkarma
5 <, >, <=, >= Karşılaştırma
6 ==, != Eşitlik, eşitsizlik
7 && Mantıksal VE
8 \|\| Mantıksal VEYA

en + az bir işlenen bir dize olduğunda işleç dizeleri birleştirir. Varsayılan önceliği geçersiz kılmak için ayraç kullanın.

Önemli

Sembolik mantıksal operatörler && (AND), || (OR) ve ! (NOT) kullanılır. Anahtar kelime formları and, or, ve not desteklenmez. Örneğin, yerine $1 == "a" || $1 == "b"yazın$1 == "a" or $1 == "b".

Examples:

İfade Açıklama
$1 * 2 ^ 3 İlk olarak üs: $1 * 8
($1 * 2) ^ 3 Parantezleri geçersiz kılma: önce çarpma
-$1 * 2 Önce olumsuzlama, sonra çarpma
$1 > 100 && $2 > 200 Mantıksal AND ile zincirleme koşulları

Yerleşik işlevler

Birim dönüştürme işlevleri

Bu işlevler tek bir sayısal değer kabul edip bir float döndürür.

Function Conversion Formula
cToF(value) Santigrat'tan Fahrenheit'e F = (C × 9/5) + 32
fToC(value) Fahrenheit'ten Celsius'a C = (F - 32) × 5/9
psiToBar(value) Psi to bar bar = PSI × 0,0689476
barToPsi(value) Çubuk-PSI PSI = çubuk / 0,0689476
inToCm(value) Santimetreye inç cm = × 2,54
cmToIn(value) Santimetreden inçe in = cm / 2.54
ftToM(value) Metreler arası ayaklar m = ft × 0,3048
mToFt(value) Metreler arası ft = m / 0,3048
lbToKg(value) Kilodan kilograma kg = lb × 0,453592
kgToLb(value) Kilogramdan pounda lb = kg / 0,453592
galToL(value) LITREye ABD galonları L = gal × 3.78541
lToGal(value) Litreden ABD galonlarına gal = L / 3,78541

Ölçeklendirme ve yuvarlama işlevleri

Function Açıklama
scale(value, srcLo, srcHi, dstLo, dstHi) Kaynak aralıktan hedef aralığa doğrusal olarak ölçeklendirilir value . Beş bağımsız değişkenin de sayısal olması gerekir.
round_n(value, decimals) Bir kayan değeri belirtilen ondalık basamak sayısına yuvarlar (0- 15).

Matematik işlevleri

Bu işlevler yerleşik matematik kitaplığından gelir.

Function Açıklama
floor(value) Bir sayıya eşit veya ondan küçük en büyük tamsayı
round(value) En yakın tamsayı, yarım yollu servis taleplerini 0,0'dan uzağa yuvarlama
ceil(value) Bir sayıdan büyük veya buna eşit en küçük tamsayı
math::abs(value) Mutlak değer
math::sqrt(value) Karekök (negatif sayılar için NaN döndürür)
math::cbrt(value) Küp kökü
math::ln(value) Doğal logaritma
math::log2(value) Temel 2 logaritması
math::log10(value) Temel 10 logaritması
math::log(value, base) Rastgele temele sahip logaritma
math::exp(value) e değerin gücüne yükseltildi
math::exp2(value) 2 değerin gücüne yükseltildi
math::pow(base, exp) Üssü exp'in gücüne yükseltir
math::cos(value) Kosinüs (radyan)
math::sin(value) Sinüs (radyan)
math::tan(value) Tanjant (radyan)
math::acos(value) Arkkosinüs (radyan verir)
math::asin(value) Arksinüsü (radyan verir)
math::atan(value) Arktanjant (radyan verir)
math::atan2(y, x) Dört çeyrekli arktanjant (radyan verir)
math::hypot(a, b) A ve b taraflarından hipotenüs uzunluğu

Dize işlevleri

Function Açıklama
len(string) Dizenin karakter uzunluğu veya tanımlama grubu öğe sayısı
str::to_lowercase(string) Küçük harfe dönüştürür
str::to_uppercase(string) Büyük harfe dönüştürür
str::trim(string) Baştaki ve sondaki boşluğu kaldırır
str::from(value) Bir değeri dize gösterimine dönüştürür
str::substring(string, start, end) Bir alt dizeyi karakter dizinine göre ayıklar
str::regex_matches(string, pattern) Dize regex deseni ile eşleşiyorsa true döndürür. Yalnızca veri akışı grafiklerinde kullanılabilir.
str::regex_replace(string, pattern, replacement) Tüm regex eşleşmelerini değiştirme dizesiyle değiştirir. Yalnızca veri akışı grafiklerinde kullanılabilir.

Tarih ve saat işlevleri

Tarih ve zaman fonksiyonları yalnızca veri akışı grafiklerinde mevcuttur. Zaman parse_timestampdamgasını kabul eden fonksiyonlar hariç, RFC 3339 dizisi gerektirir. Dize, Koordineli Evrensel Zaman'dan (UTC) açık bir ofset içermelidir, örneğin 2026-06-17T12:00:00Z veya 2026-06-17T12:00:00-08:00. Sütun, Returns kavramsal sonuç tipini listeler; bu tür typeof küçük harflerle "float", "int", veya "string".

Function İadeler Açıklama
duration_between(start, end, unit) float Milisaniye hassasiyetiyle hesaplar end - start . Desteklenen birimler "seconds", "millis", "minutes", "hours", ve "days". Bir milisaniyeden kısa farklar geri dönüş 0sağlar. Sonuç negatiftir çünkü end en az bir milisaniye öncesi start.
day_of_week(timestamp) int Haftanın gününü döndürür, Pazar 0 ve Cumartesi 6olduğu yer.
hour_of_day(timestamp) int Saati döndürüyor0.23
year_of(timestamp) int Takvim yılını döndürür.
month_of(timestamp) int Ayı döndürüyor 112.
day_of_month(timestamp) int Ayın gününü döndürür.131
minute_of_hour(timestamp) int Dakikayı döndürür 059.
second_of_minute(timestamp) int Ikincisini döndürür0.59
timezone_offset(timestamp) int UTC'den zaman damgasının ofsetini dakikalar içinde döndürür. Örneğin, -08:00 döndürür -480 ve +05:30 döndürür 330.
now() string Mevcut UTC zamanını milisaniye hassasiyetiyle RFC 3339 zaman damgası olarak döndürür.
format_timestamp(timestamp, pattern) string RFC 3339 zaman damgasını bir strftime desen kullanarak biçimlendirir.
parse_timestamp(value, pattern) string Bir strftime değeri bir desen kullanarak ayrıştırır ve milisaniye hassasiyetiyle RFC 3339 UTC zaman damgasını döndürür.
from_epoch(value, unit) string Unix dönem değerini milisaniye hassasiyetiyle RFC 3339 UTC zaman damgasına dönüştürür. Desteklenen birimler "seconds", "millis", ve "micros". Değer bir int veya floatolabilir.
to_epoch(timestamp, unit) int RFC 3339 zaman damgasını Unix dönemi tamsayısına dönüştürür. Desteklenen birimler "seconds", "millis", ve "micros".

now() fonksiyon her çalıştığında veri akışı iş yükünü barındıran Kubernetes düğümünün sistem saatini okur. Aynı ifadedeki çağrılar farklı değerler döndürebilir. Birikim kuralında, now() pencerenin işlendiği zamanı döndürür, giriş mesajının geldiği zaman değil. Küme düğümleri arasında saat sapkınlığını azaltmak için, her düğüm saatini güvenilir bir zaman kaynağı olan bir ağ zaman protokolü sunucusuyla senkronize edin.

Takvim ve saat fonksiyonları, örneğin day_of_week, hour_of_day, ve year_of, giriş zaman damgasındaki ofseti kullanır. Önce değeri UTC'ye çevirmezler. Aşağıdaki örnekler bu davranışı göstermektedir.

İfade Result
hour_of_day("2026-06-17T23:30:45-08:00") 23
day_of_week("2026-06-17T23:30:45-08:00") 3 (Çarşamba)
timezone_offset("2026-06-17T23:30:45-08:00") -480
duration_between("2026-06-09T12:00:00Z", "2026-06-09T14:30:00Z", "hours") 2.5

Format ve zaman damgalarını ayrıştırma

ve format_timestampparse_timestamp fonksiyonları kalıplar kullanır strftime . Aşağıdaki tablo yaygın belirticileri listelemektedir.

Tanımlayıcı Value
%Y Dört haneli yıl
%m İki basamaklı ay
%d Ayın iki haneli günü
%H 24 saatlik biçimde saat
%M Dakika
%S Second
%f Son tam saniyeden beri nanosaniyeler, ondalık nokta olmadan
%.f Kesirli saniyeler, ondalık nokta dahil
%z Sayısal UTC ofkümü, örneğin +0200
%:z Noktalı UTC kayışı, örneğin +02:00

Tüm desteklenen belirticiler için Chrono strftime dokümantasyonuna bakınız.

format_timestamp Giriş zaman damgasının ofsetini korur. Örneğin, format_timestamp("2026-06-09T14:00:00+02:00", "%Y-%m-%d %H:%M %:z") döndürür "2026-06-09 14:00 +02:00".

parse_timestamp girdileri aşağıdaki sırayla işler:

  1. Sayısal bir ofset ile bir tarih ve saat. Fonksiyon ofseti onurlandırır ve sonucu UTC'ye normalleştirir.
  2. Bir tarih ve saat, ofset olmadan. Fonksiyon UTC'yi varsayıyor.
  3. Zamanı olmayan bir randevu. Fonksiyon gece yarısı UTC olduğunu varsayıyor.

Aşağıdaki örnekler, her girdi türünün nasıl parse_timestamp işlendiğini gösterir.

İfade Result
parse_timestamp("2026-06-17 12:00:00 +0200", "%Y-%m-%d %H:%M:%S %z") "2026-06-17T10:00:00.000Z"
parse_timestamp("2026-06-17 12:00:00", "%Y-%m-%d %H:%M:%S") "2026-06-17T12:00:00.000Z"
parse_timestamp("2026-06-17", "%Y-%m-%d") "2026-06-17T00:00:00.000Z"

Önemli

parse_timestamp sadece zaman değerlerini veya saat dilimi kısaltmalarını desteklemez, örneğin PST. Yerine veya %z sayısal bir ofset %:zile %Z kullanın. Ayrıştırma zaman damgalarını UTC'ye normalleştirir, ancak biçimlendirme giriş ofsetini korur. Bu nedenle, sıfır olmayan bir ofset içeren değerler için iki fonksiyon tam tersi değildir.

Unix dönem değerlerini dönüştürün

Unix dönem değerleri ile RFC 3339 zaman damgaları arasında dönüştürmek için ve from_epochto_epoch kullanın.

İfade Result
from_epoch(1781568000, "seconds") "2026-06-16T00:00:00.000Z"
from_epoch(1781568000.5, "seconds") "2026-06-16T00:00:00.500Z"
to_epoch("2026-06-16T00:00:00.123Z", "millis") 1781568000123

from_epoch 1 Ocak 1970 öncesi tarihler için negatif değerleri kabul eder. Çıkışı milisaniye hassasiyetine sahiptir, bu yüzden epoch mikrosaniyeleri zaman damgasına çevirmek, bir milisaniyenin altında olan hassasiyeti ortadan kaldırır. to_epoch zaman damgasının UTC ofsetini hesaba katır ve 1970 öncesi değerleri seçilen birim için bir sonraki alt tam sayıya yuvarlar.

Tarih ve saat fonksiyonları oluşturulabilir. Örneğin, duration_between($1, now(), "days") ilk kural girdisi olarak verilen RFC 3339 zaman damgasının yaşını gün cinsinden hesaplar. Bir zaman damgasını UTC'ye dönüştürdükten sonraki saatini okumak için hour_of_day(from_epoch(to_epoch($1, "micros"), "micros")).

Koşullu ve koleksiyon işlevleri

Function Açıklama
if(condition, trueVal, falseVal) Koşul true olduğunda döndürür trueVal , aksi takdirde falseVal
min(values) En az bir veya daha fazla sayısal değer veya dizi
max(values) En fazla bir veya daha fazla sayısal değer veya dizi
contains(tuple, value) Tanımlama grubu değeri içeriyorsa true döndürür
contains_any(tuple, candidates) Tanımlama grubu adaylar demetinden herhangi bir değer içeriyorsa true döndürür
typeof(value) Türü dize olarak döndürür: "string", "float", "int", "boolean", "tuple"veya "empty"

Toplama işlevleri (yalnızca pencere dönüşümleri)

Bu işlevler yalnızca pencere dönüşümleri içindeki birikmesi kurallarında kullanılabilir. Her birinin tek bir konumsal değişkeni vardır.

Function İadeler Boş pencere davranışı
average($n) Sayısal değerlerin ortalaması Error
sum($n) Sayısal değerlerin toplamı 0,0
min($n) En düşük sayısal değer Error
max($n) En büyük sayısal değer Error
count($n) Alanın bulunduğu iletilerin sayısı 0
first($n) Penceredeki ilk değer Error
last($n) Penceredeki son değer Error

Toplama işlevlerini kullanma hakkında ayrıntılı bilgi için bkz. Zaman içinde verileri toplama.

Koşullu mantık

İşlevi if kullanarak bir ifadenin içindeki mantığı dallara aktarın:

İfade Açıklama
if($1 > 100, "high", "normal") Sıcaklık 100'ü aştığında "yüksek" döndürür
if($2 == (), $1, $1 * $2) $2 eksik olduğunda 1 ABD dolarına geri döner
if($1 > 5, true, false) Eşik temelinde boole döndürür

Eksik alanları algılamak için karşılaştırmalarda (boş değer) kullanın () .

Tip

Eksik bir alan için yalnızca statik geri dönüşe ihtiyacınız varsa söz ?? <default> dizimi daha basittir. Bkz. Varsayılan değerler. Hesaplanan değerler arasında seçim yapmanız gereken durumlar için ayırın if .

Meta veri alanları

Bir kuralın veya $metadata. alanlarındaki inputs ön eki kullanarak ileti meta verilerinden okuma ve ileti meta verilerine output yazma. Meta veri başvuruları, ifadenin kendisine değil alan yoluna gider.

Mera veri özellikleri

  • Konu: Hem MQTT hem de Kafka için uygundur. İletinin yayımlandığı dizeyi içerir. Örnek: $metadata.topic.
  • Kullanıcı özelliği: MQTT'de bu, bir MQTT iletisinin taşıyabileceği serbest biçimli anahtar/değer çiftlerine başvurur. Örneğin, MQTT iletisi "priority" anahtarı ve değeri "yüksek" olan bir kullanıcı özelliğiyle yayımlandıysa $metadata.user_property.priority , başvuru "yüksek" değerini tutar. Kullanıcı özellik anahtarları rastgele dizeler olabilir ve kaçış gerektirebilir: $metadata.user_property."weird key" "garip anahtar" anahtarını (boşlukla birlikte) kullanır.
  • Sistem özelliği: Bu terim, kullanıcı özelliği olmayan her özellik için kullanılır. Şu anda yalnızca tek bir sistem özelliği desteklenmektedir: $metadata.system_property.content_typeMQTT iletisinin içerik türü özelliğini okuyan (ayarlandıysa).
  • Üst bilgi: Bu, MQTT kullanıcı özelliğinin Kafka eşdeğeridir. Kafka anahtar için herhangi bir ikili değeri kullanabilir, ancak veri akışları yalnızca UTF-8 dize anahtarlarını destekler. Örnek: $metadata.header.priority. Bu işlev, kullanıcı özelliklerine benzer.
Alan Açıklama
$metadata.topic İletinin MQTT konusu
$metadata.user_property.<key> İletideki anahtarla tanımlanan bir kullanıcı özelliği
$metadata.system_property.content_type İçerik türü sistem özelliği
$metadata.header.<key> Anahtarla tanımlanan Kafka üst bilgi değeri

Meta verilerden okuma

Bir ifadedeki kaynak konuya ve kullanıcı özelliğine başvurmak için bunları giriş olarak listeleyin:

Giriş Variable
$metadata.topic $1
$metadata.user_property.device_id $2

İfade: $1 + "/" + $2

Aşağıdaki örnekte, MQTT topic özelliği çıktıdaki origin_topic alana eşlenir:

Giriş Çıkış
$metadata.topic origin_topic

MQTT iletisinde kullanıcı özelliği priority varsa, aşağıdaki örnekte bunu bir çıkış alanıyla eşleme işlemi gösterilmektedir:

Giriş Çıkış
$metadata.user_property.priority priority

Meta veriye yazma

Çıkış iletisinde bir kullanıcı özelliği ayarlamak için çıkış alanı olarak kullanın $metadata.user_property.<key> .

Meta veri alanını boş bir değere (()) ayarlamak, alanı kaldırır. Kullanıcı özellikleri için yinelenen anahtarlara izin verilir.

Meta veri özelliklerini bir çıkış üst bilgisi veya kullanıcı özelliğiyle de eşleyebilirsiniz. Aşağıdaki örnekte MQTT topic , çıkışın origin_topic kullanıcı özelliğindeki alana eşlenir:

Giriş Çıkış
$metadata.topic $metadata.user_property.origin_topic

Gelen yük bir priority alan içeriyorsa, aşağıdaki örnek, bunun bir MQTT kullanıcı özelliğiyle nasıl eşleştirileceğini göstermektedir.

Giriş Çıkış
priority $metadata.user_property.priority

Kafka için de aynı örnek:

Giriş Çıkış
priority $metadata.header.priority

Meta veri alanları eşleme, filtre ve dal kurallarında desteklenir. Bunlar pencere (birikmesi) kurallarında kullanılamaz.

Bilinen son değer

Çalışma zamanına bu ? $last alan için en son değeri hatırlamasını bildirmek için girişte son eki kullanın. Geçerli iletide alan eksikse, bunun yerine bilinen son değer kullanılır.

Giriş Davranış
temperature ? $last Geçerli iletide alan yoksa temperature bilinen son sıcaklığı kullanır

yönergesi ? $last büyük/küçük harfe duyarlı değildir ve esnek boşluğu destekler.

Önemli

Bilinen son değerler yalnızca bellekte depolanır. Pod yeniden başlatıldığında kaybolurlar ve çoğaltmalar arasında paylaşılamazlar.

Bilinen son değer eşleme, filtre ve dal kurallarında desteklenir. Pencere (birikmesi) kurallarında kullanılamaz.

Varsayılan değerler

?? <default> Alan eksik olduğunda bir geri dönüş değeri sağlamak için girişte son eki kullanın. Desteklenen varsayılan türler: integer, float, boolean, string ve null.

Uyarı

Söz ?? <default> dizimi yalnızca veri akışı grafiklerinde kullanılabilir. Veri akışı builtInTransformation girişlerinde desteklenmez.

Giriş Geri dönüş
temperature ?? 0 Tamsayı 0
status ?? "unknown" Dize "bilinmiyor"
threshold ?? 98.6 Kayan Nokta 98.6
enabled ?? true Boole değeri true

Bilinen son değeri ve varsayılanı birleştirme

ve ? $lastöğesini birleştirebilirsiniz?? <default>. Çalışma zamanı önce geçerli iletiyi, ardından bilinen son değeri ve ardından varsayılanı denetler. kullanmadan ?? <default>kullanıyorsanız? $last, çalışma zamanı geçerli iletiyi ve ardından varsayılanı doğrudan denetler.

Giriş Değerlendirme sırası
temperature ?? 0 Geçerli değer, ardından varsayılan (0)
temperature ? $last ?? 0 Geçerli değer, sonra son bilinen, sonra varsayılan (0)

Varsayılan değerler eşleme, filtre ve dal kurallarında desteklenir. Bunlar pencere (birikmesi) kurallarında kullanılamaz.

Veri türleri

Türü Açıklama Example
Int 64 bit işaretli tamsayı 42, -7
Yüzmek 64 bit kayan nokta 3.14, -0.5
Dize UTF-8 metni "hello"
Boole Boolean true, false
Tuple İlkel değerler dizisi (1, 2, 3)
Boş Eksik veya null değer ()
JSON Geçirilen JSON nesnesi (ifadelerde kullanılamaz)

JSON nesneleri ve dizileri, alanlar ifade olmadan kopyalandığında as-is korunur, ancak ifade değerlendirmesine giriş olarak kullanılamaz.

Dönüştürme türüne göre özellik desteği

Aynı ifade dili dönüşümler üzerinde çalışır, ancak bir ifadenin sonucu her birinde farklı bir anlam taşır:

Dönüşüm İfade sonucu ne yapar
Harita Yazılmış değeri üretir output
Filtre Doğru olduğunda, mesaj bırakılır. Mesajları eşleştirmek için ifadeyi tersine çevirin.
Şube Mesajı or true yoluna false yönlendirir. Hiçbir şey bırakılmaz.
Pencere (birikmiş) Pencere için toplu değeri üretir
Özellik Harita Filtre Şube Pencere (birikmiş)
Konumsal değişkenler Evet Evet Evet Evet
Operatörler Evet Evet Evet Evet
Yerleşik işlevler Evet Evet Evet Evet
Toplama işlevleri Hayır Hayır Hayır Evet
$metadata Erişim Evet Evet Evet Hayır
$context Zengin -leştirme Evet Evet Evet Hayır
? $last Evet Evet Evet Hayır
?? <default> ¹ Evet Evet Evet Hayır
str::regex_matches / str::regex_replace ¹ Evet Evet Evet Hayır
Joker karakterler Evet Hayır Hayır Hayır

¹ Yalnızca veri akışı grafiklerinde kullanılabilir. Veri akışı builtInTransformation girişlerinde desteklenmez.

Nokta gösterimi ve kaçış

Nokta gösterimi, iç içe yerleştirilmiş alanlara başvurmak için yaygın olarak kullanılır. Standart bir noktalı notasyon yolu gibi Person.Address.Street.Numbergörünür.

Veri akışında, nokta gösterimiyle açıklanan bir yol, kaçışa gerek kalmadan dizeleri ve bazı özel karakterleri içerebilir, örneğin Person.Date of Birth.

Diğer durumlarda, kaçış gereklidir, örneğin: nsu=http://opcfoundation.org/UA/Plc/Applications;s=RandomSignedInt32. Bu yol, diğer özel karakterlerin arasında alan adının içinde noktalar içerir. Kaçış olmadan, alan adı nokta gösteriminde ayırıcı işlevi görecektir.

Veri akışı bir yolu ayrıştırsa da yalnızca iki karakteri özel olarak görür:

  • Noktalar (.), alan ayırıcıları olarak hareket eder.
  • Çift tırnak işaretleri, bir bölümün başında veya sonunda yerleştirildiğinde, noktaların alan ayırıcısı olarak kabul edilmediği bir kaçış bölümü başlar.

Diğer karakterler alan adının bir parçası olarak değerlendirilir. Bu esneklik, alan adlarının rastgele dizeler olabileceği JSON gibi biçimlerde kullanışlıdır.

Yol tanımı, yapılandırma biçiminin kurallarına da uymalıdır. Yola özel anlamı olan bir karakter eklendiğinde, doğru alıntı yapılması gerekir. Örneğin, iki nokta üst üste (gibi :Person:.:name:) ile başlayan veya ardından bir sayı (örneğin 100 celsius.hot) ile başlayan alan adlarının yapılandırmada dize olarak doğru yorumlanması için alıntı yapılması gerekir.

Kaçış

Noktalı notlu bir yolda kaçışın birincil işlevi, ayırıcılar yerine alan adlarının parçası olan noktaların kullanımını barındırmaktır. Örneğin, yol Payload."Tag.10".Value üç bölümden oluşur: Payload, Tag.10ve Value. Etrafındaki Tag.10 çift tırnak işaretleri, noktanın ayırıcı işlevi görmesini engeller.

Nokta gösteriminde kaçış kuralları

  • Her segmenti ayrı olarak işaretleyin: Eğer birden fazla segment nokta içeriyorsa, bu segmentleri çift tırnak içine alın. Diğer segmentler de alıntılanabilir, ancak yol yorumunu etkilemez. Örneğin: Payload."Tag.10".Measurements."Vibration.$12".Value

  • Bir segmenti sadece kaçması gerektiğinde alıntılayın. Bir segmentin etrafına yalnızca bir nokta (veya aksi takdirde ayırıcı olarak yanlış okunacak başka bir karakter) varsa çift tırnak ekleyin. Sıradan bir alan adını alıntılamayın.

    Örneğin, içinde TagNameadlandırılan Records bir alan için :

    Bunu yapın Bu değil
    Records.TagName Records."TagName"

    Fazladan tırnak işaretleri yardımcı olmuyor ve bazı araçlarda, örneğin operasyon deneyimi veri akışı düzenleyicisinde, alan adının bir parçası haline geliyor. Eşleme, varlığını olmayan (tırnak dahil) bir alan arar "TagName" , yani hiçbir şey eşleşmez. Bunu, dışa aktarılan veri akışı tanımında görebilirsiniz; burada isim kaçış tırnak ile birlikte görünür, örneğin \"TagName\". Bunu düzeltmek için, tırnak işaretlerini kaldırın, böylece isim sadece TagName.

  • Çift tırnak işaretlerinin doğru kullanımı: Çift tırnak işaretleri, escape edilmiş segmenti açmalı ve kapatmalıdır. Segmentin ortasındaki tırnak işaretleri alan adının bir parçası olarak kabul edilir. Örneğin, yol Payload.He said: "Hello", and waved iki alanı tanımlar: Payload ve He said: "Hello", and waved. Bu koşullar altında bir nokta göründüğünde ayırıcı olarak çalışmaya devam eder. Örneğin, yol Payload.He said: "No. It is done" , Payloadve He said: "No segmentlerine It is done"bölünür (boşlukla başlar).

Segmentasyon algoritması

  • Bir segmentin ilk karakteri tırnak işareti olduğunda, ayrıştırıcı bir sonraki tırnak işaretini bulmak için arama yapar. Bu tırnak işaretleri arasına alınmış dize tek bir bölüm olarak kabul edilir.
  • Segment bir tırnak işaretiyle başlamıyorsa, çözücü, bir sonraki noktayı ya da yolun bitişini arayarak segmentleri tanımlar.

Joker karakterler

Aynı anda birden çok alanı eşleştirmek için giriş ve çıkış yollarında joker karakter (*) kullanın. Bu, çıkış girişe yakından benzediğinde veya her birini listelemeden aynı dönüşümü birçok alana uygulamanız gerektiğinde kullanışlıdır.

Önemli

Bu bölümdeki joker örnekler, girdideki alanlardan geçer. MQTT, Kafka ve diğer JSON çıktıları için bu sorun değil. Parquet veya Delta serileştirmesi olan bir depolama hedefi için, çıkış şeması joker kartın genişlediği her yaprak ilan etmelidir. Eğer çalışma zamanı yükünde şema bildirmediği bir alan varsa, kayıt düşürülür. Şemayı temsilci örnek veriden oluşturun ve Depolama serileştirme davranışına bakınız.

Tüm alanları kopyala

Her alanı değişmeden geçirmek için:

Giriş Çıkış
* *

girişindeki * her alan yolunu eşleştirir ve çıkışta aynı yola yerleştirir. Yolun * eşleşen bölümü yakalanan kesim olarak adlandırılır. Çıktıda, yakalanan kesim öğesinin *yerini alır.

İç içe alanları düzleştirme

Alanları iç içe nesnenin kök düzeyine taşımak için ön eki girişe ve * çıkışa yerleştirin:

Giriş Çıkış
Sensors.* *
Metadata.* *

Bu giriş göz önüne alındığında:

{
  "Sensors": { "Temperature": 72.5, "Pressure": 14.7 },
  "Metadata": { "LineId": "Line-3", "Shift": "A" }
}

Çıkış her iki nesneyi de düzleştirmeyi sağlar:

{
  "Temperature": 72.5,
  "Pressure": 14.7,
  "LineId": "Line-3",
  "Shift": "A"
}

Alanları yeniden yapılandırma

Alanları yeni bir üst öğe altına taşımak için girişi girin * ve çıktıya bir ön ek ekleyin:

Giriş Çıkış
* Telemetry.*

Bu, tüm üst düzey alanları bir Telemetry nesnenin içine sarmalar.

Joker karakter yerleştirme kuralları

  • Giriş veya çıkış yolu başına yalnızca bir taneye* izin verilir.
  • tam * bir kesimle eşleşmelidir (gibi Sensor*kısmi bir kesimle eşleşmemelidir).
  • , * bir yolun başında (*.Value), ortasında (Sensors.*.Reading) veya sonunda (Sensors.*) görünebilir.

Çok girişli joker karakterler

Bir kuralın joker karakter içeren birden çok girişi olduğunda, * tüm girişlerde aynı kesimi yakalaması gerekir. Çalışma zamanı, ilk girişten öğesini * çözümler ve ardından diğer girişlerde eşleşen yolları arar.

Örneğin, her algılayıcının maksimum ve en düşük okumalarının ortalamasını almak için:

Giriş Çıkış İfade
*.Max ($1)
*.Min ($2)
Averaged.* ($1 + $2) / 2

Bu giriş göz önüne alındığında:

{
  "Temperature": { "Max": 85.3, "Min": 62.1 },
  "Pressure": { "Max": 15.2, "Min": 14.1 }
}

İlk olarak * yakalarTemperature, böylece kural hem hem Temperature.Maxde Temperature.Min öğesini arar. Ardından ve öğesini yakalar Pressure ve arar Pressure.MaxPressure.Min. Çıktı şudur:

{
  "Averaged": { "Temperature": 73.7, "Pressure": 14.65 }
}

Yakalanan bir segment için herhangi bir giriş çözümlenemezse (örneğin, *.Mid.Avg alan farklı iç içe yerleştirildiğinde), bu segment atlanır. Tüm girişlerdeki yolların verilerin gerçek yapısını yansıtdığından emin olun.

Belirli alanlar için joker karakteri geçersiz kılma

Joker karakter kuralını belirli kurallarla birleştirebilirsiniz. Belirli kurallar daha düşük bir kapsama sahip olduğunda önceliklidir (ile *eşleşen daha az kesim). Buna uzmanlık denir.

Giriş Çıkış İfade
*.Max ($1)
*.Min ($2)
Averaged.* ($1 + $2) / 2
Pressure.Max ($1)
Pressure.Min ($2)
Averaged.PressureAdj ($1 + $2 + 1.0) / 2

İlk kural tüm alanlara uygulanır. İkinci kural yalnızca için Pressure geçersiz kılar, çünkü Pressure.Max daha belirgindir *.Max (kapsam 0 ile kapsam 1).

Bir alanı tamamen dışlamak için boş bir çıkış kullanın:

Giriş Çıkış
Pressure.Max, Pressure.Min (boş)

Boş bir çıkış, alanı sonuçtan bırakır. Bu, aksi takdirde bu kuralı içerecek joker karakterleri geçersiz kılar.

Aynı girişlerde birden çok kural

İki kural aynı veya daha yüksek kapsama sahipse, her ikisi de geçerlidir. Bu, aynı girişlerden birden çok türetilmiş değeri hesaplamanıza olanak tanır:

Giriş Çıkış İfade
*.Max ($1)
*.Min ($2)
Stats.*.Avg ($1 + $2) / 2
*.Max ($1)
*.Min ($2)
Stats.*.Range $1 - $2

Her iki kural da yakalanan her segment için yürütülür ve sensör başına iki çıkış alanı oluşturur.

Bağlamsallaştırma veri kümelerindeki joker karakterler

Bir veri kümesindeki tüm alanları kopyalamak için başvurularla $context joker karakterler kullanabilirsiniz:

Giriş Çıkış
$context(assetMeta).* Asset.*

Bu, veri kümesindeki assetMeta her alanı çıkışın Asset bölümüne kopyalar.

Bağlamsallaştırma veri kümeleri

Bağlamsallaştırma veri kümeleri, eşlemelerin dış veritabanlarından ek verileri tümleştirmesine olanak sağlar. Bir veri kümesindeki $context(datasetName) alanlara başvurmak için ön eki kullanın. Örneğin, $context(position).BaseSalary adlı BaseSalarybir veri kümesinden alanını okurposition.

Bağlamsallaştırma veri kümelerini yapılandırma hakkında ayrıntılı bilgi için bkz . Veri akışlarını kullanarak verileri zenginleştirme ve Veri akışı grafiklerinde dış verilerle zenginleştirme.

Buraya belirli bir dönüşümde kullanılan sözdizimi arıyorsanız, bu makaleler ifadeleri bağlamda gösterir:

Bunu yapmak için Bkz:
Alanları yeniden adlandırmak, yeniden yapılandırmak veya hesaplamak, örneğin birim dönüşümleri dahil olmak üzere cToF Veri akışı grafiklerinde harita ile verileri dönüştürme
Mesajları bırakmak veya farklı yollara yönlendirmek için bir şartla Veri akışı grafiklerindeki verileri filtreleme ve yönlendirme
Bir zaman aralığında ortalamaları hesaplar, toplamlar veya sayarlar Zaman içinde verileri toplama
Durum deposundan referans verilerini arayın Dış verilerle zenginleştirme
Mesaj içeriğinden çıktı MQTT konusunu ayarlayın İletileri farklı konulara yönlendirme
Bu dönüşümleri içeren boru hattını oluşturun Veri akış grafikleriyle veri işleme

Veri akışları için, bkz. Veri akışını kullanarak veri akışını haritalayacak ve veri akışında veri filtrele.