Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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:
- Sayısal bir ofset ile bir tarih ve saat. Fonksiyon ofseti onurlandırır ve sonucu UTC'ye normalleştirir.
- Bir tarih ve saat, ofset olmadan. Fonksiyon UTC'yi varsayıyor.
- 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".ValueBir 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ılanRecordsbir alan için :Bunu yapın Bu değil Records.TagNameRecords."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 sadeceTagName.Ç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 wavediki alanı tanımlar:PayloadveHe 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, yolPayload.He said: "No. It is done",PayloadveHe said: "NosegmentlerineIt 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 (gibiSensor*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.
İlgili içerik
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.