Bagikan melalui


TIMESTAMP BY

✅ Azure Stream Analytics

Semua peristiwa aliran data memiliki tanda waktu yang terkait dengannya. Secara default, peristiwa dari Event Hub dan IoT Hub diberi tanda waktu berdasarkan kapan peristiwa diterima oleh Event Hub atau IoT Hub; peristiwa dari penyimpanan Blob ditandai oleh waktu modifikasi terakhir blob. Tanda waktu peristiwa tidak berubah jika Anda memulai kembali atau menjalankan kembali pekerjaan Anda.

Banyak aplikasi streaming memerlukan penggunaan tanda waktu yang tepat bahwa suatu peristiwa terjadi, bukan waktu kedatangan. Misalnya, dalam aplikasi Point of Sales, seseorang mungkin memerlukan tanda waktu peristiwa yang sesuai dengan waktu pembayaran dicatat, daripada waktu peristiwa pembayaran mencapai layanan penyerapan peristiwa. Selain itu, sistem terdistribusi geografis dan latensi jaringan dapat berkontribusi pada waktu kedatangan yang tidak dapat diprediksi, membuat penggunaan waktu aplikasi lebih andal dalam aplikasi streaming. Untuk kasus ini, klausa TIMESTAMP BY memungkinkan menentukan nilai tanda waktu kustom. Nilainya bisa berupa bidang apa pun dari payload peristiwa atau ekspresi jenis DATETIME. Nilai string yang sesuai dengan salah satu format ISO 8601 juga didukung.

Perhatikan bahwa menggunakan tanda waktu kustom (klausul TIMESTAMP BY) dapat menyebabkan Azure Stream Analytics menyerap peristiwa secara tidak berurutan sehubungan dengan tanda waktu mereka karena dua alasan:

  • Masing-masing produsen peristiwa mungkin memiliki jam sistem yang berbeda (dan condong).
  • Peristiwa dari produsen peristiwa individu dapat tertunda saat transit, misalnya, oleh tidak tersedianya jaringan di situs produsen.

Meskipun gangguan antara produsen peristiwa mungkin besar, gangguan dalam peristiwa dari satu produsen umumnya kecil atau bahkan tidak ada. Jika kueri hanya memproses data dari setiap produsen peristiwa secara independen, menangani peristiwa dari setiap produsen dalam garis waktunya sendiri lebih efisien daripada mengelola penyimpangan waktu antar produsen. Azure Stream Analytics mendukung sub-aliran dengan menentukan OVER <melalui sub-klausul spesifikasi> untuk mengaktifkan pemrosesan peristiwa di garis waktu independen. Lihat 'Klausa OVER berinteraksi dengan pengurutan peristiwa' untuk dampak penggunaan klausul OVER pada pemrosesan pekerjaan.

Syntax

TIMESTAMP BY scalar_expression [OVER <over spec> ]  
      
<over spec> ::= 
      { column_name | expression } [,...n ]  

Remarks

Mengambil tanda waktu peristiwa

Tanda waktu peristiwa dapat diambil dalam pernyataan SELECT di bagian mana pun dari kueri menggunakan properti System.Timestamp().

Klausa OVER berinteraksi dengan pengurutan peristiwa

Saat klausa OVER digunakan, beberapa aspek pemrosesan peristiwa oleh Azure Stream Analytics dimodifikasi:

  1. Toleransi di luar urutan maksimum diterapkan dalam satu nilai tuple dari <spesifikasi> atas. Artinya, peristiwa dianggap tidak berurutan hanya jika tiba terlalu banyak di luar urutan sehubungan dengan peristiwa lain dari produser peristiwa yang sama.

    Misalnya, nilai '0' dapat digunakan jika peristiwa dari produsen peristiwa yang sama selalu dipesan dan akan menghasilkan pemrosesan segera. Di sisi lain, menggunakan nilai besar di sini akan memperkenalkan penundaan pemrosesan, sambil menunggu peristiwa yang tidak berurutan untuk dirakit.

  2. Toleransi kedatangan terlambat maksimum diterapkan secara global (seolah-olah OVER tidak digunakan). Artinya, peristiwa dianggap terlambat tiba jika tanda waktu yang dipilih (dalam klausul TIMESTAMP BY) terlalu jauh dari waktu kedatangannya.

    Perhatikan bahwa menggunakan nilai besar di sini tidak akan memperkenalkan penundaan pemrosesan dan peristiwa masih akan segera diproses (atau sesuai dengan toleransi di luar urutan maksimum). Nilai beberapa hari tidak masuk akal. Namun, menggunakan nilai yang sangat panjang mungkin berdampak pada jumlah memori yang diperlukan untuk memproses pekerjaan.

  3. Peristiwa output untuk setiap produsen peristiwa dihasilkan saat dihitung, yang berarti bahwa peristiwa output mungkin memiliki tanda waktu yang tidak berurutan; namun, mereka akan berurutan dalam satu nilai tuple dari <atas spesifikasi>.

Batasan dan Pembatasan

Klausa TIMESTAMP BY OVER memiliki batasan penggunaan berikut:

  1. Klausa TIMESTAMP BY OVER harus digunakan untuk semua input kueri atau tidak digunakan untuk salah satunya.

  2. Klausa TIMESTAMP BY OVER hanya didukung dengan pekerjaan yang sepenuhnya paralel atau pekerjaan partisi tunggal.

  3. Jika aliran input memiliki lebih dari satu partisi, klausa OVER harus digunakan bersama dengan klausa PARTITION BY. Kolom PartitionId harus ditentukan sebagai bagian dari kolom TIMESTAMP BY OVER.

  4. Jika klausa TIMESTAMP BY OVER digunakan, nama kolom dari klausul harus digunakan sebagai kunci pengelompokan dalam pernyataan GROUP BY dan di semua predikat JOIN saat bergabung di antara aliran.

  5. Kolom yang dibuat dalam pernyataan SELECT atau dalam klausa kueri lainnya tidak dapat digunakan dalam klausa TIMESTAMP BY, bidang dari payload input harus digunakan. Misalnya, hasil CROSS APPLY tidak dapat digunakan sebagai nilai target TIMESTAMP BY. Namun, Anda dapat menggunakan satu pekerjaan Azure Stream Analytics yang melakukan CROSS APPLY, dan menggunakan pekerjaan kedua untuk melakukan TIMESTAMP BY.

  6. System.Timestamp() tidak dapat digunakan dalam TIMESTAMP BY, karena TIMESTAMP BY adalah apa yang menetapkan nilai System.Timestamp().

Examples

Contoh 1 – Mengakses bidang tanda waktu dari payload

Gunakan EntryTime bidang dari payload sebagai tanda waktu peristiwa

SELECT  
      EntryTime,  
      LicensePlate,  
      State   
FROM input TIMESTAMP BY EntryTime  

Contoh 2 – Gunakan waktu UNIX dari payload sebagai tanda waktu peristiwa

Sistem UNIX sering menggunakan waktu POSIX (atau Epoch) yang didefinisikan sebagai jumlah milidetik yang telah berlalu sejak 00:00:00 Waktu Universal Terkoordinasi (UTC), Kamis, 1 Januari 1970.

Contoh ini menunjukkan cara menggunakan bidang 'epochtime' numerik yang berisi waktu Epoch sebagai tanda waktu peristiwa.

SELECT  
      System.Timestamp(),  
      LicensePlate,  
      State  
FROM input TIMESTAMP BY DATEADD(millisecond, epochtime, '1970-01-01T00:00:00Z')  

Contoh 3 – Tanda waktu heterogen

Bayangkan pemrosesan aliran data heterogen yang berisi dua jenis peristiwa 'A' dan 'B'. Peristiwa 'A' memiliki data tanda waktu di bidang 'timestampA' dan peristiwa 'B' memiliki tanda waktu di bidang 'timestampB'.

Contoh ini menunjukkan cara menulis TIMESTAMP BY agar dapat bekerja dengan kedua jenis peristiwa/tanda waktu.

SELECT  
      System.Timestamp(),  
      eventType,  
      eventValue,  
FROM input TIMESTAMP BY  
      (CASE eventType   
            WHEN 'A' THEN timestampA  
            WHEN 'B' THEN timestampB  
      ELSE NULL END) 

Contoh 4 – Menangani beberapa garis waktu dalam kueri yang dipartisi

Memproses data dari pengirim yang berbeda (stasiun tol) tanpa menerapkan kebijakan waktu di berbagai ID stasiun tol. Data input dipartisi berdasarkan TollId.

SELECT
      TollId,
      COUNT(*) AS Count
FROM input
      TIMESTAMP BY EntryTime OVER TollId, PartitionId
      PARTITION BY PartitionId
GROUP BY TUMBLINGWINDOW(minute,3), TollId, PartitionId

See Also

System.Timestamp()
Kebijakan Condong Waktu
Memahami penanganan waktu di Azure Stream Analytics
Unix Time