All Products
Search
Document Center

PolarDB:Pembagian rentang interval

Last Updated:Mar 29, 2026

Pembagian rentang interval memperluas pembagian rentang dengan secara otomatis membuat partisi baru saat data masuk. Ketika data yang dimasukkan melebihi nilai tertinggi dari partisi rentang terakhir yang telah didefinisikan, database akan membuat partisi baru tanpa memerlukan intervensi manual.

Untuk menggunakan pembagian rentang interval, sertakan klausa INTERVAL dalam pernyataan CREATE TABLE dan tentukan ukuran partisi. Nilai kunci partisi menentukan nilai tertinggi setiap partisi rentang, yang berfungsi sebagai titik transisi: data yang melebihi batas ini akan memicu pembuatan partisi secara otomatis.

Cara pengabaian bekerja: Jika data jatuh pada dua atau lebih interval di luar titik transisi saat ini, database hanya membuat partisi yang berisi data tersebut — bukan partisi-partisi di antaranya.

Contoh: Misalnya, intervalnya adalah satu bulan dan titik transisi saat ini adalah 15 Februari 2019. Memasukkan baris dengan tanggal 10 Mei 2019 akan membuat partisi yang mencakup periode 15 April–15 Mei 2019. Partisi untuk periode 15 Februari–15 Maret dan 15 Maret–15 April diabaikan — hanya partisi yang benar-benar berisi data yang dibuat.

Sintaksis

CREATE TABLE [schema.]<table_name>
   <table_definition>
   PARTITION BY RANGE (<column> [, <column>]...)
   [INTERVAL (<constant> | <expression>)]
   [SUBPARTITION BY {RANGE | LIST | HASH} (<column> [, <column>]...)]
   (<range_partition_definition> [, <range_partition_definition>]...);

Di mana range_partition_definition adalah:

PARTITION [<partition_name>]
  VALUES LESS THAN (<value> [, <value>]...)
  [TABLESPACE <tablespace_name>]
  [(<subpartition>, ...)]

Parameter INTERVAL menerima ekspresi numerik dan waktu:

JenisEkspresiEfek
NumerikINTERVAL (10)Satu partisi per 10 nilai berurutan
TahunINTERVAL (NUMTOYMINTERVAL(1, 'year'))Satu partisi per tahun
BulanINTERVAL (NUMTOYMINTERVAL(1, 'month'))Satu partisi per bulan
HariINTERVAL (NUMTODSINTERVAL(1, 'day'))Satu partisi per hari
MingguINTERVAL (NUMTODSINTERVAL(7, 'day'))Satu partisi per minggu

Untuk sintaksis lengkap CREATE TABLE ... PARTITION BY, lihat CREATE TABLE... PARTITION BY.

Contoh

Contoh berikut membuat tabel sales yang dipartisi berdasarkan sold_month dengan interval satu bulan. Dua partisi rentang awal menetapkan titik transisi; baris yang melebihi titik tersebut akan memicu pembuatan partisi secara otomatis.

Buat tabel:

CREATE TABLE sales
(
  prod_id           int,
  prod_quantity     int,
  sold_month        date
)
PARTITION BY RANGE(sold_month)
INTERVAL(NUMTOYMINTERVAL(1, 'MONTH'))
(
  PARTITION p1
    VALUES LESS THAN('15-JAN-2019'),
  PARTITION p2
    VALUES LESS THAN('15-FEB-2019')
);

Kueri partisi awal:

SELECT partition_name, high_value FROM ALL_TAB_PARTITIONS;
 partition_name |      high_value
----------------+--------------------------------------------------------------
 P1             | FOR VALUES FROM ('15-JAN-19 00:00:00') TO ('15-FEB-19 00:00:00')
 P2             | FOR VALUES FROM (MINVALUE) TO ('15-JAN-19 00:00:00')
(2 rows)

Masukkan baris di luar titik transisi:

INSERT INTO sales VALUES (1, 200, '10-MAY-2019');
INSERT 0 1

Kueri partisi lagi:

SELECT partition_name, high_value FROM ALL_TAB_PARTITIONS;
 partition_name |      high_value
----------------+--------------------------------------------------------------
 SYS596430103   | FOR VALUES FROM ('15-APR-19 00:00:00') TO ('15-MAY-19 00:00:00')
 P1             | FOR VALUES FROM ('15-JAN-19 00:00:00') TO ('15-FEB-19 00:00:00')
 P2             | FOR VALUES FROM (MINVALUE) TO ('15-JAN-19 00:00:00')
(3 rows)

Database secara otomatis membuat satu partisi baru untuk menampung baris bertanggal 10 Mei 2019. Partisi yang mencakup periode 15 Februari–15 Maret dan 15 Maret–15 April diabaikan karena tidak ada data yang jatuh dalam rentang tersebut.

Sistem memberikan nama dengan awalan SYS (seperti SYS596430103) untuk setiap partisi yang dibuat secara otomatis. Nama tersebut unik tetapi berbeda-beda tergantung sesi.

Batasan pada pembagian rentang interval

  • Kolom kunci partisi harus berupa satu kolom yang menentukan rentang numerik atau tanggal.

  • Setidaknya satu partisi rentang harus didefinisikan sebelum klausa INTERVAL berlaku.

  • Klausa INTERVAL tidak didukung untuk tabel yang diorganisasi berdasarkan indeks (index-organized tables).

  • Indeks Domain tidak dapat dibuat pada tabel yang dipartisi berdasarkan daftar (list-partitioned tables).

  • Kolom kunci partisi tidak boleh berisi nilai NULL, Not-a-Number, atau Infinity.

  • Ekspresi dalam klausa INTERVAL harus dievaluasi menjadi nilai konstan non-negatif.

  • Partisi rentang interval hanya dibuat dalam urutan menaik.