全部产品
Search
文档中心

PolarDB:Pembagian rentang interval

更新时间:Jul 02, 2025

Pembagian rentang interval merupakan perluasan dari pembagian rentang. Fitur ini memungkinkan database secara otomatis membuat partisi ketika data yang akan dimasukkan melebihi rentang partisi yang ada.

Untuk mengimplementasikan pembagian rentang interval, Anda harus menyertakan klausa INTERVAL dan menentukan ukuran rentang untuk partisi baru. Nilai kunci pembagian rentang menentukan nilai tertinggi dari partisi rentang. Ketika nilai data yang akan dimasukkan melebihi nilai tertinggi tersebut, database akan membuat partisi baru untuk menyimpan data tersebut.

Misalnya, jika Anda menetapkan interval menjadi satu bulan, dan data yang akan dimasukkan merujuk pada data dua bulan setelah titik transisi saat ini, hanya partisi untuk bulan tempat data tersebut termasuk yang dibuat. Partisi untuk bulan di antaranya tidak dibuat. Titik transisi adalah nilai kunci. Ketika data melebihi titik transisi, data dimasukkan ke dalam partisi rentang interval berikutnya. Sebagai contoh, jika Anda membuat tabel terpartisi rentang interval dengan interval satu bulan dan titik transisi saat ini adalah 15 Februari 2019, serta mencoba memasukkan data untuk 10 Mei 2019, database akan membuat partisi untuk periode 15 April 2019 hingga 15 Mei 2019. Data kemudian dimasukkan ke dalam partisi ini. Partisi untuk periode 15 Februari 2019 hingga 15 Maret 2019 dan 15 Maret 2019 hingga 15 April 2019 dilewati.

Batasan

  • Pembagian rentang interval hanya mendukung satu kunci partisi. Kunci ini harus menentukan rentang numerik atau tanggal.
  • Anda harus mendefinisikan setidaknya satu partisi rentang.
  • Klausa INTERVAL tidak dapat digunakan untuk tabel yang diorganisir berdasarkan indeks.
  • Indeks domain tidak dapat dibuat pada tabel terpartisi daftar.
  • Nilai NULL, Bukan-angka, atau Tak Terbatas tidak dapat ditentukan dalam kolom kunci partisi.
  • Ekspresi yang digunakan untuk mengimplementasikan pembagian rentang interval harus menghasilkan nilai konstan non-negatif.
  • Partisi untuk tabel terpartisi rentang interval hanya dapat dibuat dalam urutan menaik.

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>]...);
Where range_partition_definition is:
      PARTITION [<partition_name>]
        VALUES LESS THAN (<value>[, <value>]...)
        [TABLESPACE <tablespace_name>]
        [(<subpartition>, ...)]

Parameter INTERVAL hanya mendukung interval numerik dan waktu.

  • Interval Numerik

    Pernyataan berikut memasukkan setiap 10 angka berdekatan ke dalam satu partisi:

    INTERVAL (10)
  • Interval Waktu
    • Tahun

      Pernyataan berikut menetapkan partisi otomatis berdasarkan tahun:

      INTERVAL (NUMTOYMINTERVAL(1,'year'))
    • Bulan

      Pernyataan berikut menetapkan partisi otomatis berdasarkan bulan:

      INTERVAL (NUMTOYMINTERVAL(1,'month'))
    • Hari

      Pernyataan berikut menetapkan partisi otomatis berdasarkan hari:

      INTERVAL (NUMTODSINTERVAL(1,'day'))
    • Minggu

      Pernyataan berikut menetapkan partisi otomatis berdasarkan minggu:

      INTERVAL (NUMTODSINTERVAL(7,'day'))

Untuk informasi lebih lanjut tentang parameter lainnya, lihat CREATE TABLE... PARTITION BY.

Contoh

Dalam contoh berikut, tabel penjualan dipartisi berdasarkan kolom sold_month pada interval tertentu. Partisi rentang dibuat untuk menetapkan titik transisi. Nilai yang melampaui titik transisi dimasukkan ke dalam partisi baru.

Buat tabel terpartisi rentang interval dan tambahkan data ke tabel, seperti yang ditunjukkan dalam contoh berikut:

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 tampilan ALL_TAB_PARTITIONS, seperti yang ditunjukkan dalam contoh berikut:

SELECT partition_name, high_value from ALL_TAB_PARTITIONS;

Hasil berikut dikembalikan:

 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 data yang melebihi nilai tinggi partisi rentang ke tabel penjualan, seperti yang ditunjukkan dalam contoh berikut:

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

Setelah memasukkan data, kueri tampilan ALL_TAB_PARTITIONS lagi, seperti yang ditunjukkan dalam contoh berikut:

SELECT partition_name, high_value from ALL_TAB_PARTITIONS;

Jika data dimasukkan, sistem menghasilkan nama untuk partisi rentang interval. Nama tersebut bervariasi berdasarkan sesi. Hasil berikut dikembalikan:

 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)