全部产品
Search
文档中心

Realtime Compute for Apache Flink:TUMBLE

更新时间:Jul 06, 2025

Topik ini menjelaskan cara menggunakan fungsi TUMBLE di Realtime Compute for Apache Flink.

Deskripsi

Fungsi TUMBLE mengelompokkan setiap elemen ke dalam jendela tumbling dengan ukuran tertentu. Jendela tumbling biasanya memiliki ukuran tetap dan tidak tumpang tindih. Sebagai contoh, jika didefinisikan jendela tumbling selama 5 menit, aliran data tak terbatas akan dibagi menjadi interval waktu seperti [0:00, 0:05), [0:05, 0:10), dan [0:10, 0:15).

Sintaksis

Anda dapat menggunakan fungsi TUMBLE dalam klausa GROUP BY untuk mendefinisikan jendela tumbling.

TUMBLE(<time-attr>, <size-interval>)
<size-interval>: INTERVAL 'string' timeUnit
Catatan

Parameter <time-attr> harus berupa atribut waktu yang valid dalam aliran waktu. Parameter ini menentukan apakah waktu tersebut adalah waktu pemrosesan atau waktu peristiwa. Untuk informasi lebih lanjut tentang cara mendefinisikan atribut waktu, lihat Ikhtisar dan Atribut Waktu.

Fungsi pengenal jendela

Fungsi pengenal jendela digunakan untuk menentukan waktu mulai, waktu akhir, atau atribut waktu dari sebuah jendela. Atribut waktu digunakan untuk menggabungkan jendela tingkat lebih rendah.

Fungsi

Jenis nilai kembali

Deskripsi

TUMBLE_START(time-attr, size-interval)

TIMESTAMP

Mengembalikan waktu mulai jendela, termasuk nilai batas. Sebagai contoh, jika rentang waktu jendela adalah [00:10, 00:15), 00:10 dikembalikan.

TUMBLE_END(time-attr, size-interval)

TIMESTAMP

Mengembalikan waktu akhir jendela, termasuk nilai batas. Sebagai contoh, jika rentang waktu jendela adalah [00:00, 00:15], 00:15 dikembalikan.

TUMBLE_ROWTIME(time-attr, size-interval)

TIMESTAMP(rowtime-attr)

Mengembalikan waktu akhir jendela, tidak termasuk nilai batas. Sebagai contoh, jika rentang waktu jendela adalah (00:00, 00:15), 00:14:59.999 dikembalikan. Nilai kembali adalah atribut rowtime berdasarkan mana operasi waktu dapat dilakukan. Fungsi ini hanya dapat digunakan dalam jendela yang didefinisikan berdasarkan waktu peristiwa, seperti jendela bertingkat. Untuk informasi lebih lanjut, lihat bagian "Jendela bertingkat" dari topik Ikhtisar.

TUMBLE_PROCTIME(time-attr, size-interval)

TIMESTAMP(rowtime-attr)

Mengembalikan waktu akhir jendela, tidak termasuk nilai batas. Sebagai contoh, jika rentang waktu jendela adalah (00:00, 00:15), 00:14:59.999 dikembalikan. Nilai kembali adalah atribut waktu pemrosesan berdasarkan mana operasi waktu dapat dilakukan. Sebagai contoh, fungsi ini hanya dapat digunakan dalam jendela yang didefinisikan berdasarkan waktu pemrosesan, seperti jendela bertingkat. Untuk informasi lebih lanjut, lihat bagian "Jendela bertingkat" dari topik Ikhtisar.

Contoh 1: Menghitung jumlah klik per pengguna per menit untuk situs web tertentu berdasarkan waktu peristiwa

  • Data Uji

    username (VARCHAR)

    click_url (VARCHAR)

    eventtime (VARCHAR)

    Jark

    http://taobao.com/xxx

    2024-08-10 10:00:00.0

    Jark

    http://taobao.com/xxx

    2024-08-10 10:00:10.0

    Jark

    http://taobao.com/xxx

    2024-08-10 10:00:49.0

    Jark

    http://taobao.com/xxx

    2024-08-10 10:01:05.0

    Jark

    http://taobao.com/xxx

    2024-08-10 10:01:58.0

    Timo

    http://taobao.com/xxx

    2024-08-10 10:02:10.0

    Timo

    http://taobao.com/xxx

    2024-08-10 10:03:10.0

  • Pernyataan Uji

    CREATE TEMPORARY TABLE user_clicks(
      username varchar,
      click_url varchar,
      eventtime varchar,                            
      ts AS TO_TIMESTAMP(eventtime),
      WATERMARK FOR ts AS ts - INTERVAL '2' SECOND   -- Tentukan watermark untuk rowtime. 
    ) WITH (
      'connector'='sls',
      ...
    );
    
    CREATE TEMPORARY TABLE tumble_output(
      window_start TIMESTAMP,
      window_end TIMESTAMP,
      username VARCHAR,
      clicks BIGINT
    ) WITH (
      'connector'='datahub'
      ...
    );
    
    INSERT INTO tumble_output
    SELECT
    TUMBLE_START(ts, INTERVAL '1' MINUTE) as window_start,
    TUMBLE_END(ts, INTERVAL '1' MINUTE) as window_end,
    username,
    COUNT(click_url)
    FROM user_clicks
    GROUP BY TUMBLE(ts, INTERVAL '1' MINUTE),username;
  • Hasil Uji

    window_start (TIMESTAMP)

    window_end (TIMESTAMP)

    username (VARCHAR)

    clicks (BIGINT)

    2024-08-10 10:00:00.0

    2024-08-10 10:01:00.0

    Jark

    3

    2024-08-10 10:01:00.0

    2024-08-10 10:02:00.0

    Jark

    2

    2024-08-10 10:02:00.0

    2024-08-10 10:03:00.0

    Timo

    1

Contoh 2: Menghitung jumlah klik per pengguna per menit untuk situs web tertentu berdasarkan waktu pemrosesan

  • Data Uji

    username (VARCHAR)

    click_url (VARCHAR)

    Jark

    http://taobao.com/xxx

    Jark

    http://taobao.com/xxx

    Jark

    http://taobao.com/xxx

    Jark

    http://taobao.com/xxx

    Jark

    http://taobao.com/xxx

    Timo

    http://taobao.com/xxx

  • Pernyataan Uji

    CREATE TEMPORARY TABLE window_test (
      username   VARCHAR,
      click_url  VARCHAR,
      ts as PROCTIME()
    ) WITH (
      'connector'='sls',
      ...
    );
    
    CREATE TEMPORARY TABLE tumble_output(
      window_start TIMESTAMP,
      window_end TIMESTAMP,
      username VARCHAR,
      clicks BIGINT
    ) WITH (
      'connector'='datahub'              -- Log Service memungkinkan Anda mengekspor hanya pernyataan DDL bertipe VARCHAR. Oleh karena itu, DataHub digunakan untuk penyimpanan. 
      ...
    );
    
    INSERT INTO tumble_output
    SELECT
    TUMBLE_START(ts, INTERVAL '1' MINUTE),
    TUMBLE_END(ts, INTERVAL '1' MINUTE),
    username,
    COUNT(click_url)
    FROM window_test
    GROUP BY TUMBLE(ts, INTERVAL '1' MINUTE), username;
  • Hasil Uji

    window_start (TIMESTAMP)

    window_end (TIMESTAMP)

    username (VARCHAR)

    clicks (BIGINT)

    2024-08-10 14:43:00.000

    2024-08-10 14:44:00.000

    Jark

    5

    2024-08-10 14:43:00.000

    2024-08-10 14:44:00.000

    Timo

    1