Azure Stream Analytics 'de Kullanıcı tanımlı JavaScript işlevleri

Azure Stream Analytics, JavaScript dilinde yazılmış kullanıcı tanımlı işlevleri destekler. JavaScript’in sağladığı String, RegExp, Math, Array ve Date yöntemlerinden oluşan zengin küme sayesinde Stream Analytics işleriyle karmaşık veri dönüşümlerini oluşturmak daha kolay hale gelir.

Genel Bakış

JavaScript Kullanıcı tanımlı işlevleri, dış bağlantı gerektirmeyen durum bilgisiz, yalnızca işlem olmayan skalar işlevleri destekler. Bir işlevin dönüş değeri yalnızca skaler (tek) değer olabilir. JavaScript kullanıcı tanımlı işlevini bir işe ekledikten sonra işlevi, yerleşik bir skaler değerli işlev gibi sorgunun herhangi bir yerinde kullanabilirsiniz.

JavaScript kullanıcı tanımlı işlevlerini yararlı bulabileceğiniz bazı senaryolar aşağıda verilmiştir:

  • Normal ifade işlevlerine sahip dizeleri ayrıştırma ve düzenleme; örneğin, Regexp_Replace() and Regexp_Extract()
  • İkili-onaltılık dönüşüm gibi verilerin kodunu çözme ve kodlama
  • JavaScript matematik işlevleriyle matematik ve hesaplamalar yapma
  • Sort, JOIN, Find ve Fill gibi dizi işlemleri yapma

Stream Analytics içinde JavaScript Kullanıcı tanımlı işleviyle yapaamıyoruz.

  • Dış REST uç noktalarını çağırma, örneğin ters IP araması yapma veya bir dış kaynaktan başvuru verileri çekme
  • Girdiler/çıktılar üzerinde özel durum serileştirme veya seri durumdan çıkarma işlemi gerçekleştirme
  • Özel toplam değerler oluşturma

Date. GetDate () veya Math. random () gibi işlevler işlevler tanımında engellenmese de, bunları kullanmaktan kaçının. Bu işlevler, her çağırdığınızda aynı sonucu döndürmez ve Azure Stream Analytics hizmeti, işlev etkinleştirmeleri ve döndürülen sonuçları günlüğe kaydetmez. Bir işlev aynı olaylar üzerinde farklı sonuçlar döndürürse, siz veya Stream Analytics hizmeti tarafından bir iş yeniden başlatıldığında yinelenebilirlik garanti edilmez.

İşinize Kullanıcı tanımlı JavaScript işlevi ekleme

Not

Bu adımlar, bulutta çalışmak üzere yapılandırılmış Stream Analytics işleri üzerinde çalışır. Stream Analytics işiniz Azure IoT Edge çalışacak şekilde yapılandırıldıysa, Visual Studio 'Yu kullanın ve C# kullanarak Kullanıcı tanımlı işlevi yazın.

Stream Analytics işte JavaScript Kullanıcı tanımlı bir işlev oluşturmak için Iş topolojisi altında işlevler ' i seçin. Ardından + açılan menü Ekle menüsünden JavaScript UDF ' ı seçin.

JavaScript UDF ekleme

Ardından aşağıdaki özellikleri sağlamanız ve Kaydet' i seçmeniz gerekir.

Özellik Açıklama
İşlev diğer adı Sorgunuzun işlevini çağırmak için bir ad girin.
Çıkış türü JavaScript Kullanıcı tanımlı işleviniz tarafından Stream Analytics sorgunuza döndürülecek tür.
İşlev tanımı UDF 'inizin Sorgunuzla çağrılması her seferinde yürütülecek JavaScript işlevinizin uygulanması.

JavaScript UDF 'Leri test etme ve sorunlarını giderme

JavaScript UDF mantığınızı herhangi bir tarayıcıda test edebilir ve hatalarını ayıklayabilirsiniz. Kullanıcı tanımlı bu işlevlerin mantığını hata ayıklama ve test etme işlemi şu anda Stream Analytics portalında desteklenmiyor. İşlev beklenen şekilde çalışırsa, yukarıda bahsedilen Stream Analytics işe ekleyebilirsiniz ve ardından doğrudan Sorgunuzla çağırabilirsiniz. Visual Studio için Stream Analytics araçları'nı kullanarak sorgu mantığınızı JavaScript UDF ile test edebilirsiniz.

JavaScript çalışma zamanı hataları önemli kabul edilir ve Etkinlik günlüğünde öne çıkarılır. Günlüğü almak için Azure portalında işinize gidin ve Etkinlik günlüğü’nü seçin.

Bir sorguda JavaScript kullanıcı tanımlı işlevi çağırma

Udf ile önekli işlev diğer adını kullanarak sorgunuzda JavaScript işlevinizi kolayca çağırabilirsiniz. Onaltılık değerleri bir Stream Analytics sorgusunda Çağrılmakta olan tamsayıya dönüştüren bir JavaScript UDF örneği aşağıda verilmiştir.

    SELECT
        time,
        UDF.hex2Int(offset) AS IntOffset
    INTO
        output
    FROM
        InputStream

Desteklenen JavaScript nesneleri

Azure Stream Analytics JavaScript kullanıcı tanımlı işlevleri standart, yerleşik JavaScript nesnelerini destekler. Bu nesnelerin bir listesi için bkz. Genel Nesneler.

Stream Analytics ve JavaScript tür dönüşümü

Stream Analytics sorgu dili ile JavaScript’in desteklediği türler arasında farklılıklar vardır. Bu tabloda ikisi arasındaki dönüştürme eşlemeleri listelenmektedir:

Stream Analytics JavaScript
bigint Sayı (JavaScript yalnızca tam olarak 2^53’e kadar tamsayıları temsil edebilir)
DateTime Tarih (JavaScript yalnızca milisaniye birimini destekler)
double Sayı
nvarchar(MAX) Dize
Kayıt Nesne
Dizi Dizi
NULL Null

JavaScript’ten Stream Analytics’e dönüşümler aşağıda verilmiştir:

JavaScript Stream Analytics
Sayı Bigint (sayı yuvarlak ve long.MinValue ile long.MaxValue arasındaysa; aksi takdirde iki katıdır)
Tarih DateTime
Dize nvarchar(MAX)
Nesne Kayıt
Dizi Dizi
Null, Tanımsız NULL
Başka bir tür (örneğin, bir işlev veya hata) Desteklenmiyor (çalışma zamanı hatası ile sonuçlanır)

JavaScript dili, büyük/küçük harfe duyarlıdır ve JavaScript kodundaki nesne alanlarının büyük küçük harf ayrımına uymalıdır. Uyumluluk düzeyi 1,0 olan işler, SQL SELECT deyimindeki alanları küçük harfe dönüştürür. Uyumluluk düzeyi 1,1 ve üzeri sürümlerde, SELECT deyimindeki alanlar SQL sorgusunda belirtilen büyük küçük harflere sahip olacaktır.

Diğer JavaScript kullanıcı tanımlı işlev desenleri

Çıktıya iç içe geçmiş JSON yazma

Girdi olarak bir Stream Analytics iş çıktısını kullanan bir takip işleme adımınız varsa ve bir JSON biçimi gerektiriyorsa, çıktıya bir JSON dizesi yazabilirsiniz. Aşağıdaki örnekte girdinin tüm ad/değer çiftlerini paketlemek ve sonra bunları çıktıda tek bir dize olarak yazmak için JSON.stringify() işlevi çağrılmaktadır.

JavaScript kullanıcı tanımlı işlev tanımı:

function main(x) {
return JSON.stringify(x);
}

Örnek sorgu:

SELECT
    DataString,
    DataValue,
    HexValue,
    UDF.jsonstringify(input) As InputEvent
INTO
    output
FROM
    input PARTITION BY PARTITIONID

Dizeyi işlenecek JSON nesnesine yayınla

JSON olan bir dize alanınız varsa ve bunu bir JavaScript UDF 'de işlenmek üzere bir JSON nesnesine dönüştürmek istiyorsanız, daha sonra kullanılabilecek bir JSON nesnesi oluşturmak için JSON. Parse () işlevini kullanabilirsiniz.

JavaScript kullanıcı tanımlı işlev tanımı:

function main(x) {
var person = JSON.parse(x);  
return person.name;
}

Örnek sorgu:

SELECT
    UDF.getName(input) AS Name
INTO
    output
FROM
    input

Hata işleme için try/catch kullanın

Try/catch blokları, JavaScript UDF 'e geçirilen hatalı biçimlendirilmiş giriş verileriyle ilgili sorunları belirlemenize yardımcı olabilir.

JavaScript kullanıcı tanımlı işlev tanımı:

function main(input, x) {
    var obj = null;

    try{
        obj = JSON.parse(x);
    }catch(error){
        throw input;
    }
    
    return obj.Value;
}

Örnek sorgu: bir hata olduğunda dönebilmesi için kaydın tamamını ilk parametre olarak geçirin.

SELECT
    A.context.company AS Company,
    udf.getValue(A, A.context.value) as Value
INTO
    output
FROM
    input A

toLocaleString ()

JavaScript 'teki toLocaleString yöntemi, bu yöntemin çağrıldığı tarih saat verilerini temsil eden dile duyarlı bir dize döndürmek için kullanılabilir. Azure Stream Analtycs yalnızca UTC Tarih saatini sistem zaman damgası olarak kabul etse de, bu yöntem sistem zaman damgasını başka bir yerel ayara ve saat dilimine birlikte almak için kullanılabilir. Bu yöntem, Internet Explorer 'da bulunan ile aynı uygulama davranışını izler.

JavaScript kullanıcı tanımlı işlev tanımı:

function main(datetime){
    const options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
    return event.toLocaleDateString('de-DE', options);
}

Örnek sorgu: tarih/saati giriş değeri olarak geçirme

SELECT
    udf.toLocaleString(input.datetime) as localeString
INTO
    output
FROM
    input

Bu sorgunun çıktısı, belirtilen seçeneklerle birlikte de giriş tarih/saat olarak da kullanılır .

Samstag, 28. Dezember 2019

Kullanıcı günlüğü

Günlüğe kaydetme mekanizması, bir iş çalışırken özel bilgileri yakalamanızı sağlar. Hata ayıklamak veya gerçek zamanlı olarak özel kodun doğruluğunu değerlendirmek için günlük verilerini kullanabilirsiniz. Bu mekanizma, Console. log () yöntemi aracılığıyla kullanılabilir.

console.log('my error message');

Günlük iletilerine tanılama günlükleriaracılığıyla erişebilirsiniz.

Sonraki adımlar