MEMBUAT FUNGSI PARTISI (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Membuat fungsi dalam database saat ini yang memetakan baris tabel atau indeks ke dalam partisi berdasarkan nilai kolom tertentu. Menggunakan CREATE PARTITION FUNCTION adalah langkah pertama dalam membuat tabel atau indeks yang dipartisi. Tabel atau indeks dapat memiliki maksimum 15.000 partisi.

Konvensi sintaks transact-SQL

Sintaksis

CREATE PARTITION FUNCTION partition_function_name ( input_parameter_type )  
AS RANGE [ LEFT | RIGHT ]   
FOR VALUES ( [ boundary_value [ ,...n ] ] )   
[ ; ]  

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

partition_function_name
Adalah nama fungsi partisi. Nama fungsi partisi harus unik dalam database dan mematuhi aturan untuk pengidentifikasi.

input_parameter_type
Adalah jenis data kolom yang digunakan untuk pemartisian. Semua jenis data valid untuk digunakan sebagai kolom partisi, kecuali teks, ntext, gambar, xml, tanda waktu, varchar(max), nvarchar(max), varbinary(max), jenis data alias, atau jenis data yang ditentukan pengguna CLR.

Kolom aktual, yang dikenal sebagai kolom partisi, ditentukan dalam pernyataan CREATE TABLE atau CREATE INDEX.

boundary_value
Menentukan nilai batas untuk setiap partisi tabel atau indeks yang dipartisi yang menggunakan partition_function_name. Jika boundary_value kosong, fungsi partisi memetakan seluruh tabel atau indeks menggunakan partition_function_name ke dalam satu partisi. Hanya satu kolom partisi, yang ditentukan dalam pernyataan CREATE TABLE atau CREATE INDEX, yang dapat digunakan.

boundary_value adalah ekspresi konstanta yang dapat mereferensikan variabel. Ini termasuk variabel jenis yang ditentukan pengguna, atau fungsi dan fungsi yang ditentukan pengguna. Ini tidak dapat mereferensikan ekspresi Transact-SQL. boundary_value harus cocok atau secara implisit dapat dikonversi ke jenis data yang disediakan dalam input_parameter_type, dan tidak dapat dipotong selama konversi implisit dengan cara ukuran dan skala nilai tidak cocok dengan input_parameter_type yang sesuai.

Catatan

Jika boundary_value terdiri dari literal tanggalwaktu atau smalldatetime , harfiah ini dievaluasi dengan asumsi bahwa us_english adalah bahasa sesi. Perilaku ini tidak digunakan lagi. Untuk memastikan definisi fungsi partisi bertingkah seperti yang diharapkan untuk semua bahasa sesi, kami sarankan Anda menggunakan konstanta yang ditafsirkan dengan cara yang sama untuk semua pengaturan bahasa, seperti format yyyymmdd; atau secara eksplisit mengonversi literal ke gaya tertentu. Untuk menentukan sesi bahasa server Anda, jalankan SELECT @@LANGUAGE.

Untuk informasi selengkapnya, lihat Konversi nondeterministik string tanggal harfiah menjadi nilai DATE.

... N
Menentukan jumlah nilai yang disediakan oleh boundary_value, tidak melebihi 14.999. Jumlah partisi yang dibuat sama dengan n + 1. Nilai tidak harus dicantumkan secara berurutan. Jika nilai tidak berurutan, Mesin Database mengurutkannya, membuat fungsi, dan mengembalikan peringatan bahwa nilai tidak disediakan secara berurutan. Mesin Database mengembalikan kesalahan jika n menyertakan nilai duplikat.

KIRI | TEPAT
Menentukan ke sisi mana dari setiap interval nilai batas, kiri atau kanan, boundary_value [ , ... n ] termasuk, ketika nilai interval diurutkan oleh Mesin Database dalam urutan naik dari kiri ke kanan. Jika tidak ditentukan, LEFT adalah default.

Keterangan

Cakupan fungsi partisi terbatas pada database tempatnya dibuat. Dalam database, fungsi partisi berada di namespace terpisah dari fungsi lain.

Setiap baris yang kolom partisinya memiliki nilai null ditempatkan di partisi paling kiri, kecuali NULL ditentukan sebagai nilai batas dan RIGHT ditunjukkan. Dalam hal ini, partisi paling kiri adalah partisi kosong, dan nilai NULL ditempatkan di partisi berikut.

Izin

Salah satu izin berikut dapat digunakan untuk menjalankan CREATE PARTITION FUNCTION:

  • Izin ALTER ANY DATASPACE. Izin ini default untuk anggota peran server tetap sysadmin dan peran database tetap db_owner dan db_ddladmin .

  • IZIN CONTROL atau ALTER pada database tempat fungsi partisi sedang dibuat.

  • IZIN CONTROL SERVER atau ALTER ANY DATABASE pada server database tempat fungsi partisi sedang dibuat.

Contoh

J. Membuat fungsi partisi RANGE LEFT pada kolom int

Fungsi partisi berikut akan mempartisi tabel atau indeks menjadi empat partisi.

CREATE PARTITION FUNCTION myRangePF1 (int)  
AS RANGE LEFT FOR VALUES (1, 100, 1000);  

Tabel berikut ini memperlihatkan bagaimana tabel yang menggunakan fungsi partisi ini pada kolom partisi col1 akan dipartisi.

Partisi 1 2 3 4
Nilai col1<= 1 col1>1 AND col1<= 100 col1>100 AND col1<=1000 col1>1000

B. Membuat fungsi partisi RANGE RIGHT pada kolom int

Fungsi partisi berikut menggunakan nilai yang sama untuk boundary_value [ ,... n ] sebagai contoh sebelumnya, kecuali menentukan RENTANG KANAN.

CREATE PARTITION FUNCTION myRangePF2 (int)  
AS RANGE RIGHT FOR VALUES (1, 100, 1000);  

Tabel berikut ini memperlihatkan bagaimana tabel yang menggunakan fungsi partisi ini pada kolom partisi col1 akan dipartisi.

Partisi 1 2 3 4
Nilai col1<1 col1>= 1 AND col1<100 col1>= 100 AND col1<1000 col1>= 1000

C. Membuat fungsi partisi RANGE RIGHT pada kolom tanggalwaktu

Fungsi partisi berikut mempartisi tabel atau indeks menjadi 12 partisi, satu untuk setiap bulan nilai setahun dalam kolom tanggalwaktu .

CREATE PARTITION FUNCTION [myDateRangePF1] (datetime)  
AS RANGE RIGHT FOR VALUES ('20030201', '20030301', '20030401',  
               '20030501', '20030601', '20030701', '20030801',   
               '20030901', '20031001', '20031101', '20031201');  

Tabel berikut ini memperlihatkan bagaimana tabel atau indeks yang menggunakan fungsi partisi ini pada kolom partisi datecol akan dipartisi.

Partisi 1 2 ... 11 12
Nilai datecol<February 1, 2003 datecol>= February 1, 2003 AND datecol<March 1, 2003 datecol>= November 1, 2003 AND col1<December 1, 2003 datecol>= December 1, 2003

D. Membuat fungsi partisi pada kolom karakter

Fungsi partisi berikut mempartisi tabel atau indeks menjadi empat partisi.

CREATE PARTITION FUNCTION myRangePF3 (char(20))  
AS RANGE RIGHT FOR VALUES ('EX', 'RXE', 'XR');  

Tabel berikut ini memperlihatkan bagaimana tabel yang menggunakan fungsi partisi ini pada kolom partisi col1 akan dipartisi.

Partisi 1 2 3 4
Nilai col1<EX... col1>= EX AND col1<RXE... col1>= RXE AND col1<XR... col1>= XR

E. Membuat 15.000 partisi

Fungsi partisi berikut mempartisi tabel atau indeks menjadi 15.000 partisi.

--Create integer partition function for 15,000 partitions.  
DECLARE @IntegerPartitionFunction nvarchar(max) = 
    N'CREATE PARTITION FUNCTION IntegerPartitionFunction (int) 
    AS RANGE RIGHT FOR VALUES (';  
DECLARE @i int = 1;  
WHILE @i < 14999  
BEGIN  
SET @IntegerPartitionFunction += CAST(@i as nvarchar(10)) + N', ';  
SET @i += 1;  
END  
SET @IntegerPartitionFunction += CAST(@i as nvarchar(10)) + N');';  
EXEC sp_executesql @IntegerPartitionFunction;  
GO  

F. Membuat partisi selama beberapa tahun

Fungsi partisi berikut mempartisi tabel atau indeks menjadi 50 partisi pada kolom datetime2 . Ada satu partisi untuk setiap bulan antara Januari 2007 dan Januari 2011.

--Create date partition function with increment by month.  
DECLARE @DatePartitionFunction nvarchar(max) = 
    N'CREATE PARTITION FUNCTION DatePartitionFunction (datetime2) 
    AS RANGE RIGHT FOR VALUES (';  
DECLARE @i datetime2 = '20070101';  
WHILE @i < '20110101'  
BEGIN  
SET @DatePartitionFunction += '''' + CAST(@i as nvarchar(10)) + '''' + N', ';  
SET @i = DATEADD(MM, 1, @i);  
END  
SET @DatePartitionFunction += '''' + CAST(@i as nvarchar(10))+ '''' + N');';  
EXEC sp_executesql @DatePartitionFunction;  
GO  

Langkah berikutnya

Pelajari selengkapnya tentang pemartisian tabel dan konsep terkait dalam artikel berikut ini: