All Products
Search
Document Center

PolarDB:YYYYWEEK

Last Updated:Mar 28, 2026

YYYYWEEK mem-partisi data ke dalam shard database dan shard tabel berdasarkan tahun serta nomor minggu ISO dari kolom DATE, DATETIME, atau TIMESTAMP.

Cara kerja

YYYYWEEK mengekstraksi tahun dan nomor minggu ISO dari nilai kunci shard, lalu menghitung (year × 54 + ISO_week_number) % D, dengan D sebagai jumlah shard database. Hasil perhitungan tersebut menentukan shard tempat baris data ditempatkan.

Minggu yang melintasi batas tahun: Penomoran minggu ISO dapat menetapkan beberapa hari terakhir bulan Desember sebagai minggu pertama tahun berikutnya. Sebagai contoh, 31 Desember 2012 termasuk dalam minggu ISO 1 tahun 2013, sehingga YYYYWEEK('2012-12-31 12:12:12') dievaluasi sebagai (2013 × 54 + 1) % D, bukan (2012 × 54 + 52) % D.

Penggunaan ulang data setelah siklus berakhir: Ketika suatu minggu muncul kembali setelah siklus yang ditentukan selesai, data tersebut mungkin diarahkan ke shard yang sama dengan data dari minggu yang sama sebelumnya. Misalnya, dengan siklus dua tahun yang dimulai pada minggu 1 tahun 2012, data dari minggu 1 tahun 2014 mungkin ditempatkan di shard yang sama dengan data dari minggu 1 tahun 2012. Shard tepatnya bergantung pada jumlah total shard tabel.

Kapan menggunakan YYYYWEEK

Gunakan YYYYWEEK ketika:

  • Kueri Anda melakukan filter atau agregasi data berdasarkan tahun dan minggu—misalnya, laporan penjualan mingguan atau jumlah pengguna aktif mingguan.

  • Data mencakup beberapa tahun dan penyelarasan minggu lintas tahun penting. WEEK mengatur ulang nomor minggu setiap tahun, sedangkan YYYYWEEK mempertahankan konteks tahun.

  • Anda memerlukan granularitas mingguan dalam rentang multi-tahun. Gunakan YYYYMM untuk granularitas bulanan atau YYYYWEEK untuk granularitas mingguan.

Pasangkan YYYYWEEK dengan tbpartition by YYYYWEEK(ShardKey) untuk mengarahkan baik shard database maupun shard tabel menggunakan kunci yang sama. Hal ini memungkinkan pencarian shard langsung untuk kueri yang menyertakan kunci partisi.

Batasan

  • Kunci partisi harus bertipe DATE, DATETIME, atau TIMESTAMP.

  • YYYYWEEK membuat satu shard tabel per minggu dalam siklus yang ditentukan. Hitung jumlah total shard tabel sebelum membuat tabel.

  • Versi instans PolarDB-X 1.0 harus 5.1.28-1320920 atau lebih baru.

Buat tabel dengan YYYYWEEK

Langkah 1: Hitung jumlah shard tabel yang diperlukan

Tentukan panjang siklus, lalu hitung:

  1. Total shard tabel = jumlah minggu per tahun × panjang siklus dalam tahun. Satu tahun memiliki hingga 53 minggu ISO, sehingga siklus dua tahun memerlukan 53 × 2 = 106 shard tabel.

  2. Shard tabel per shard database = total shard tabel ÷ jumlah shard database, dibulatkan ke atas ke bilangan bulat terdekat. Jika memungkinkan, pertahankan nilai ini sebagai kelipatan bulat dari jumlah shard database.

Contoh: Dengan 8 shard database dan siklus dua tahun:

  • Total shard tabel: 53 × 2 = 106

  • Shard tabel per shard database: 106 ÷ 8 = 13,25, dibulatkan ke atas menjadi 14

Langkah 2: Buat tabel

Gunakan pernyataan Data Definition Language (DDL) dengan dbpartition by YYYYWEEK dan tbpartition by YYYYWEEK. Atur tbpartitions ke nilai yang dihitung pada Langkah 1.

Contoh berikut membuat tabel dengan 8 shard database dan 14 shard tabel per shard database, mencakup siklus dua tahun:

create table test_yyyyweek_tb (
    id int,
    name varchar(30) DEFAULT NULL,
    create_time datetime DEFAULT NULL,
    primary key(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
dbpartition by YYYYWEEK(create_time)
tbpartition by YYYYWEEK(create_time) tbpartitions 14;