Tüm Ürünler
Search
Belge Merkezi

Hologres:CREATE PARTITION TABLE

Son Güncelleme:Oct 06, 2026

Bir tabloyu bölüm anahtarı sütununa göre alt tablolara ayırmak için CREATE PARTITION TABLE deyimini kullanın. Ana tablo, bölüm anahtar değerlerine göre farklı alt tablolara bölünür. Alt tablolardaki veriler herkese açıktır. Her alt tablo belirli bir bölüm değeri için satırlar içerir ve bölümlenmiş bir tablodaki verileri sorgulamak için sistemin eşleşmeyen bölümleri atlamasını sağlamak üzere bir bölüm belirtmeniz gerekir; bu işlem taranan veri miktarını azaltır.

Bu konuda "ana tablo" ifadesi ana bölümlenmiş tabloyu, "alt tablo" ifadesi ise alt bölümlenmiş tabloyu ifade eder.

Bölümlenmiş tablolar ne zaman kullanılır?

Bölüm eleme veya toplu veri işlemlerinden sağlanan fayda, birden fazla alt tabloyu yönetmenin ek yükünü açıkça aştığında bölümlenmiş tabloları kullanın.

Bölümlenmiş tabloları şu durumlarda kullanın:

  • Tek bir bölüm için günlük veri hacmi 100 milyon satırı aşarsa (tarih bazlı bölümlendirme için).

  • Bir bölümün tüm verilerini TRUNCATE veya DROP kullanarak toplu şekilde değiştirmeniz veya silmeniz gerekiyorsa; her iki işlem de alt tabloda anında tamamlanır ve tam taramalardan kaçınır.

Bölümlenmiş tabloları şu durumlarda kullanmaktan kaçının:

  • Veri kaynağı bir veritabanı sistemiyse. Aşırı sayıda bölüm G/Ç kaynaklarını boşa harcar. Bunun yerine, dizin tabanlı sorgu hızlandırmayı etkinleştirmek için sık kullanılan filtre sütunlarını segment anahtarı olarak belirtin.

  • Bölüm başına günlük veri hacmi 100 milyon satırın altındaysa. Küçük bölümler ihmal edilebilir düzeyde sorgu hızlandırma sağlar. Bunun yerine daha kaba bir granülerlik kullanın.

Şunu unutmayın: Her alt tablo ayrı bir dosya kümesi olarak depolanır ve meta veri depolama açısından bölümlenmemiş bir tabloya eşdeğerdir. Çok sayıda alt tablo, meta veri hacmini artırır ve çok sayıda küçük dosya ile parçalanmaya neden olur.

Sınırlamalar

  • Veriler doğrudan ana tabloya değil, alt tabloya yazılmalıdır.

    Realtime Compute for Apache Flink, verileri ana tabloya gerçek zamanlı olarak yazabilir. Ayrıntılar için bkz. Write data to a partitioned Hologres sink table in real time .
  • Hologres yalnızca liste bölümlendirmeyi (PARTITION BY LIST) destekler.

  • Bölüm anahtarı tek bir sütun olmalıdır.

  • Her bölümlendirme kuralı yalnızca bir bölümlenmiş tablo oluşturmak için kullanılabilir.

  • Ana tablonun bir birincil anahtarı varsa, bölüm anahtarı sütunu bu birincil anahtarın bir parçası olmalıdır.

Bölümlenmiş tablo oluşturma

Bölümlenmiş bir tablo, şemayı ve bölüm kuralını tanımlayan bir ana tablo ile belirli bölüm değerlerini kapsayan bir veya daha fazla alt tablodan oluşur. Veri yazılmadan önce alt tabloların oluşturulması gerekir.

Alternatif olarak, Hologres'in yapılandırdığınız kurallara göre alt tabloları otomatik olarak oluşturmasını sağlamak için dynamic partitioning özelliğini etkinleştirin.

Söz dizimi

-- Create the parent table
CREATE TABLE [IF NOT EXISTS] [<schema_name>.]<table_name> (
  {
    <column_name> <column_type> [<column_constraints> [, ...]]
    | <table_constraints>
    [, ...]
  }
)
PARTITION BY LIST (<column_name>);

-- Create a child table
CREATE TABLE [IF NOT EXISTS] [<schema_name>.]<table_name>
  PARTITION OF <parent_table>
  FOR VALUES IN (<string_literal>);

Parametreler

Parametre Açıklama
IF NOT EXISTS Aynı ada sahip bir tablo zaten varsa hatayı bastırır.
schema_name Tabloyu içeren şema. Ana ve alt tablolar aynı şemadaysa bunu atlayın; şemalar arası oluşturma için gereklidir.
table_name Oluşturulacak ana tablonun veya alt tablonun adı.
column_name Sütunun adı.
column_type Sütunun veri türü.
column_constraints Sütun düzeyindeki kısıtlamalar (örneğin, NOT NULL).
table_constraints Tablo düzeyindeki kısıtlamalar (örneğin, PRIMARY KEY).
parent_table Alt tablonun ait olduğu ana tablonun adı.
string_literal Alt tablo için bölüm anahtarı değeri.

Bölüm anahtarı sütunları için desteklenen veri türleri:

Veri türü Desteklenen sürümler
TEXT Tüm sürümler
VARCHAR Tüm sürümler
INT Tüm sürümler
DATE Hologres V1.3.22 ve sonraki sürümler

Örnekler

Aşağıdaki örneklerde, her alt tablonun bir günlük veriyi tuttuğu bölümlenmiş bir gerçek tablosu oluşturulmaktadır. Bir günün tüm verilerini verimli bir şekilde kesmek veya değiştirmek istediğinizde bu yaygın bir kalıptır.

Örnek 1: Birincil anahtar içermeyen ana tablo

İki söz dizimi varyantı eşdeğerdir. Hologres sürümünüz destekliyorsa V2.1+ söz dizimini kullanın.

Hologres V2.1 ve sonraki sürümler:

BEGIN;
CREATE TABLE public.hologres_parent (
    a TEXT,
    b INT,
    c TIMESTAMP,
    d TEXT
)
PARTITION BY LIST (a)
WITH (orientation = 'column');
CREATE TABLE public.hologres_child1 PARTITION OF public.hologres_parent FOR VALUES IN ('v1');
CREATE TABLE public.hologres_child2 PARTITION OF public.hologres_parent FOR VALUES IN ('v2');
CREATE TABLE public.hologres_child3 PARTITION OF public.hologres_parent FOR VALUES IN ('v3');
COMMIT;

Tüm Hologres sürümleri:

BEGIN;
CREATE TABLE public.hologres_parent(
  a TEXT,
  b INT,
  c TIMESTAMP,
  d TEXT
)
PARTITION BY LIST(a);
CALL set_table_property('public.hologres_parent', 'orientation', 'column');
CREATE TABLE public.hologres_child1 PARTITION OF public.hologres_parent FOR VALUES IN('v1');
CREATE TABLE public.hologres_child2 PARTITION OF public.hologres_parent FOR VALUES IN('v2');
CREATE TABLE public.hologres_child3 PARTITION OF public.hologres_parent FOR VALUES IN('v3');
COMMIT;

Örnek 2: Birincil anahtar içeren ana tablo

Birincil anahtar tanımlandığında, bölüm anahtarı sütununun (bu örnekte ds) birincil anahtarın bir parçası olması gerekir.

Hologres V2.1 ve sonraki sürümler:

BEGIN;
CREATE TABLE public.hologres_parent_2 (
    a TEXT,
    b INT,
    c TIMESTAMP,
    d TEXT,
    ds TEXT,
    PRIMARY KEY (ds, b)
)
PARTITION BY LIST (ds)
WITH (orientation = 'column');
CREATE TABLE public.holo_child_1 PARTITION OF public.hologres_parent_2 FOR VALUES IN ('20201215');
CREATE TABLE public.holo_child_2 PARTITION OF public.hologres_parent_2 FOR VALUES IN ('20201216');
CREATE TABLE public.holo_child_3 PARTITION OF public.hologres_parent_2 FOR VALUES IN ('20201217');
COMMIT;

Tüm Hologres sürümleri:

BEGIN;
CREATE TABLE public.hologres_parent_2(
  a TEXT,
  b INT,
  c TIMESTAMP,
  d TEXT,
  ds TEXT,
  PRIMARY KEY (ds, b)
)
PARTITION BY LIST(ds);
CALL set_table_property('public.hologres_parent_2', 'orientation', 'column');
CREATE TABLE public.holo_child_1 PARTITION OF public.hologres_parent_2 FOR VALUES IN('20201215');
CREATE TABLE public.holo_child_2 PARTITION OF public.hologres_parent_2 FOR VALUES IN('20201216');
CREATE TABLE public.holo_child_3 PARTITION OF public.hologres_parent_2 FOR VALUES IN('20201217');
COMMIT;

Alt tabloları listeleme

HoloWeb'i veya aşağıdaki SQL deyimini kullanarak bir ana tablonun tüm alt tablolarını listeleyin. parent_table_name ifadesini gerçek ana tablo adıyla değiştirin.

SELECT
    nmsp_parent.nspname AS parent_schema,
    parent.relname      AS parent,
    nmsp_child.nspname  AS child_schema,
    child.relname       AS child
FROM pg_inherits
    JOIN pg_class parent          ON pg_inherits.inhparent = parent.oid
    JOIN pg_class child           ON pg_inherits.inhrelid  = child.oid
    JOIN pg_namespace nmsp_parent ON nmsp_parent.oid = parent.relnamespace
    JOIN pg_namespace nmsp_child  ON nmsp_child.oid  = child.relnamespace
WHERE parent.relname = 'parent_table_name';

Özellik devralma kuralları

CREATE TABLE ... PARTITION OF kullanarak bir alt tablo oluşturduğunuzda, alt tablo ana tablodan çoğu özelliği devralır. Aşağıdaki tabloda hangi özelliklerin eşleşmesi gerektiği ve hangilerinin farklı olabileceği gösterilmektedir.

  • Eşleşmelidir: Bu özellikler için farklı bir değerle alt tablo eklemek hata döndürür. Bundan kaçınmak için, ana tablonun özellik ayarlarını kopyalayan CREATE TABLE LIKE kullanarak alt tablolar oluşturun.

  • Farklı olabilir: Alt tabloda açıkça ayarlanmadıysa, alt tablo ana tablonun değerini devralır. Açıkça ayarlanırsa, alt tablonun değeri geçerli olur.

  • Ana tablonun dizinlenmiş sütunlarını içermelidir: Alt tablonun dizinlenmiş sütunları, ana tablonunkilerin üst kümesi olmalıdır. Alt tabloya ek dizinlenmiş sütunlar eklenebilir.

Kategori Özellik Ana tablodan devralınır Ekleme sırasındaki kural
Tablo özelliği orientation Evet Eşleşmelidir
Tablo özelliği table_group Evet Eşleşmelidir
Tablo özelliği time_to_live_in_seconds Evet Farklı olabilir
Dizin Birincil anahtar Evet Eşleşmelidir
Dizin distribution_key Evet Eşleşmelidir
Dizin clustering_key Evet Eşleşmelidir
Dizin event_time_column Evet Eşleşmelidir
Dizin bitmap_columns Evet Farklı olabilir
Dizin dictionary_encoding_columns Evet Farklı olabilir
Dizin binlog_level Evet Eşleşmelidir
Dizin proxima_vectors Evet Eşleşmelidir
Sütun kısıtlaması nullable (NOT NULL) Evet Eşleşmelidir
Sütun kısıtlaması Varsayılan değer Evet Eşleşmelidir

Sonraki adımlar

  • Dynamic partitioning — yapılandırılan kurallara göre alt tabloları otomatik olarak oluşturur ve yönetir, her bölümü önceden manuel olarak oluşturmanıza gerek kalmaz.

  • ALTER PARTITION TABLE — oluşturulduktan sonra bölümleri değiştirin.

  • DROP PARTITION TABLE — bölümlenmiş tabloları silin.