Jendela Stagger - Panduan Pengembang Amazon Kinesis Data Analytics SQL untuk Aplikasi

Untuk proyek baru, kami menyarankan Anda menggunakan Managed Service baru untuk Apache Flink Studio melalui Kinesis Data Analytics for Applications. SQL Layanan Terkelola untuk Apache Flink Studio menggabungkan kemudahan penggunaan dengan kemampuan analitis tingkat lanjut, memungkinkan Anda membangun aplikasi pemrosesan aliran yang canggih dalam hitungan menit.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Jendela Stagger

Menggunakan jendela stagger adalah metode jendela yang cocok untuk menganalisis grup data yang tiba pada waktu yang tidak konsisten. Ini sangat cocok untuk kasus penggunaan analitik deret waktu apa pun, seperti serangkaian penjualan terkait atau catatan log.

Misalnya, Log Alur VPC memiliki jendela tangkapan sekitar 10 menit. Namun, log alur tersebut dapat memiliki jendela tangkapan hingga 15 menit jika Anda menggabungkan data di klien. Jendela stagger cocok untuk menggabungkan log ini untuk analisis.

Jendela stagger mengatasi masalah catatan terkait yang tidak masuk ke jendela yang dibatasi waktu yang sama, seperti ketika jendela tumbling digunakan.

Hasil Parsial dengan Jendela Tumbling

Ada batasan tertentu dengan menggunakanJendela Tumbling untuk menggabungkan terlambat atau terlambat atau tidak sesuai out-of-order urutan.

Jika jendela tumbling digunakan untuk menganalisis grup data terkait waktu, catatan individu mungkin masuk ke jendela terpisah. Selanjutnya hasil parsial dari setiap jendela harus digabungkan nanti untuk menghasilkan hasil yang lengkap untuk setiap grup catatan.

Dalam kueri jendela tumbling berikut, catatan dikelompokkan ke dalam jendela berdasarkan waktu baris, waktu peristiwa, dan simbol ticker:

CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" ( TICKER_SYMBOL VARCHAR(4), EVENT_TIME timestamp, TICKER_COUNT DOUBLE); CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM" SELECT STREAM TICKER_SYMBOL, FLOOR(EVENT_TIME TO MINUTE), COUNT(TICKER_SYMBOL) AS TICKER_COUNT FROM "SOURCE_SQL_STREAM_001" GROUP BY ticker_symbol, FLOOR(EVENT_TIME TO MINUTE), STEP("SOURCE_SQL_STREAM_001".ROWTIME BY INTERVAL '1' MINUTE);

Dalam diagram berikut, aplikasi menghitung jumlah perdagangan yang diterimanya, berdasarkan waktu perdagangan terjadi (waktu peristiwa) dengan satu menit granularitas. Aplikasi ini dapat menggunakan jendela tumbling untuk mengelompokkan data berdasarkan waktu baris dan waktu peristiwa. Aplikasi menerima empat catatan yang semuanya tiba dalam satu menit. Ini mengelompokkan catatan berdasarkan waktu baris, waktu peristiwa, dan simbol ticker. Karena beberapa catatan tiba setelah jendela tumbling pertama berakhir, semua catatan tidak masuk dalam jendela tumbling satu menit yang sama.

Tumbling windows diagram showing data grouping by row time, event time, and ticker symbol over two minutes.

Diagram sebelumnya memiliki peristiwa berikut.

ROWTIME EVENT_TIME TICKER_SYMBOL
11:00:20 11:00:10 AMZN
11:00:30 11:00:20 AMZN
11:01:05 11:00:55 AMZN
11:01:15 11:01:05 AMZN

Hasil yang ditetapkan dari aplikasi jendela tumbling terlihat sama dengan yang berikut ini.

ROWTIME EVENT_TIME TICKER_SYMBOL COUNT
11:01:00 11:00:00 AMZN 2
11:02:00 11:00:00 AMZN 1
11:02:00 11:01:00 AMZN 1

Dalam serangkaian hasil sebelumnya, tiga hasil dikembalikan:

  • Catatan dengan ROWTIME dari 11:01:00 yang menggabungkan dua catatan pertama.

  • Catatan pada 11:02:00 yang hanya menggabungkan catatan ketiga. Catatan ini memiliki ROWTIME dalam jendela kedua, tetapi EVENT_TIME dalam jendela pertama.

  • Catatan pada 11:02:00 yang hanya menggabungkan catatan keempat.

Untuk menganalisis serangkaian hasil yang lengkap, catatan harus digabungkan di penyimpanan yang persisten. Hal ini menambah kompleksitas dan persyaratan pemrosesan untuk aplikasi.

Lengkapi Hasil dengan Jendela Stagger

Untuk meningkatkan akurasi analisis catatan data terkait waktu, Kinesis Data Analytics menawarkan tipe jendela baru yang disebut jendela stagger. Dalam tipe jendela ini, jendela terbuka ketika peristiwa pertama yang cocok dengan kunci partisi tiba, dan bukan pada interval waktu yang tetap. Jendela ditutup berdasarkan masa yang ditentukan, yang diukur dari waktu ketika jendela dibuka.

Jendela stagger adalah jendela terbatas waktu terpisah untuk setiap pengelompokan kunci dalam klausa jendela. Aplikasi menggabungkan setiap hasil dari klausa jendela dalam jendela waktunya sendiri, daripada menggunakan satu jendela untuk semua hasil.

Dalam kueri jendela stagger berikut, catatan dikelompokkan ke dalam jendela berdasarkan waktu peristiwa dan simbol ticker:

CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" ( ticker_symbol VARCHAR(4), event_time TIMESTAMP, ticker_count DOUBLE); CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM" SELECT STREAM TICKER_SYMBOL, FLOOR(EVENT_TIME TO MINUTE), COUNT(TICKER_SYMBOL) AS ticker_count FROM "SOURCE_SQL_STREAM_001" WINDOWED BY STAGGER ( PARTITION BY FLOOR(EVENT_TIME TO MINUTE), TICKER_SYMBOL RANGE INTERVAL '1' MINUTE);

Dalam diagram berikut, peristiwa dikumpulkan berdasarkan waktu peristiwa dan simbol ticker ke jendela stagger.

Diagram showing event aggregation into stagger windows by event time and ticker symbol.

Diagram sebelumnya memiliki peristiwa berikut, yang merupakan peristiwa yang sama seperti aplikasi jendela tumbling yang dianalisis:

ROWTIME EVENT_TIME TICKER_SYMBOL
11:00:20 11:00:10 AMZN
11:00:30 11:00:20 AMZN
11:01:05 11:00:55 AMZN
11:01:15 11:01:05 AMZN

Hasil yang ditetapkan dari aplikasi jendela stagger terlihat sama dengan yang berikut ini.

ROWTIME EVENT_TIME TICKER_SYMBOL Count
11:01:20 11:00:00 AMZN 3
11:02:15 11:01:00 AMZN 1

Catatan yang dikembalikan menggabungkan tiga catatan input pertama. Catatan dikelompokkan oleh jendela stagger satu menit. Jendela stagger dimulai ketika aplikasi menerima catatan AMZN pertama (dengan ROWTIME dari 11:00:20). Ketika jendela stagger 1 menit berakhir (pada 11:01:20), catatan dengan hasil yang masuk dalam jendela stagger (berdasarkan ROWTIME dan EVENT_TIME) ditulis ke aliran output. Menggunakan jendela stagger, semua catatan dengan ROWTIME dan EVENT_TIME dalam jendela satu menit dipancarkan dalam satu hasil.

Catatan terakhir (dengan EVENT_TIME di luar agregasi satu menit) digabungkan secara terpisah. Ini karena EVENT_TIME adalah salah satu kunci partisi yang digunakan untuk memisahkan catatan ke serangkaian hasil, dan kunci partisi EVENT_TIME untuk jendela pertama adalah 11:00.

Sintaksis untuk jendela stagger didefinisikan dalam klausa khusus, WINDOWED BY. Klausa ini digunakan sebagai pengganti klausa GROUP BY untuk agregasi streaming. Klausa muncul segera setelah klausa WHERE opsional dan sebelum klausa HAVING.

Jendela stagger didefinisikan dalam klausa WINDOWED BY dan mengambil dua parameter: kunci partisi dan panjang jendela. Kunci partisi membuat partisi aliran data yang masuk dan menentukan kapan jendela terbuka. Jendela stagger terbuka saat peristiwa pertama dengan kunci partisi unik muncul di aliran. Jendela stagger tertutup setelah periode waktu yang ditetapkan oleh panjang jendela. Sintaksis ditampilkan dalam contoh kode berikut:

... FROM <stream-name> WHERE <... optional statements...> WINDOWED BY STAGGER( PARTITION BY <partition key(s)> RANGE INTERVAL <window length, interval> );