Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
✅ 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:
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.
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.
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:
Klausa TIMESTAMP BY OVER harus digunakan untuk semua input kueri atau tidak digunakan untuk salah satunya.
Klausa TIMESTAMP BY OVER hanya didukung dengan pekerjaan yang sepenuhnya paralel atau pekerjaan partisi tunggal.
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.
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.
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.
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