AnalyticDB for PostgreSQL tabloları, ilişkisel veritabanı tablolarına benzer şekilde çalışır; ancak temel bir fark vardır: satırlar hesaplama düğümleri arasında dağıtılır. Her tablonun dağıtım ilkesi, satırların nasıl yayılacağını belirler.
Standart bir tablo oluşturun
Bir tablo tanımlamak için CREATE TABLE ifadesini kullanın. Oluşturma sırasında aşağıdakileri belirtin:
Sütun adları ve bunların veri türleri
Kısıtlamalar
Sözdizimi:
CREATE TABLE table_name (
[ { column_name data_type [ DEFAULT default_expr ] -- Column definition
[column_constraint [ ... ]] -- Column-level constraint
]
| table_constraint -- Table-level constraint
])
[ WITH ( storage_parameter=value [, ... ] ) ] -- Storage model
[ DISTRIBUTED BY (column, [ ... ] ) | DISTRIBUTED RANDOMLY ] -- Distribution key
[ partition clause] -- Partitioning strategy
Örnek:
Aşağıdaki örnek, dağıtım anahtarı olarak trans_id sütununu kullanan ve tarihe dayalı aralık bölümlemesi uygulayan bir sales tablosu oluşturur.
CREATE TABLE sales (
trans_id int,
date date,
amount decimal(9,2),
region text)
DISTRIBUTED BY (trans_id)
PARTITION BY RANGE(date)
(start (date '2018-01-01') inclusive
end (date '2019-01-01') exclusive every (interval '1 month'),
default partition outlying_dates);
Geçici bir tablo oluşturun
Geçici tablolar, bir oturum veya işlem süresi boyunca ara verileri depolar. Varsayılan olarak geçici bir tablo, oturum sonunda otomatik olarak silinir.
Sözdizimi:
CREATE TEMPORARY TABLE table_name(...)
[ON COMMIT {PRESERVE ROWS | DELETE ROWS | DROP}]
Geçerli işlemin sonunda tabloya ne olacağını kontrol etmek için ON COMMIT yan tümcesini kullanın:
| Seçenek | Davranış |
|---|---|
PRESERVE ROWS |
Tüm satırları korur. Bu varsayılan davranıştır. |
DELETE ROWS |
Tüm satırları siler ancak tablo yapısını korur. |
DROP |
Tabloyu tamamen siler. |
Örnek:
CREATE TEMPORARY TABLE temp_foo (a int, b text) ON COMMIT DROP;
Kısıtlamaları tanımlayın
Kısıtlamalar, bir tabloda depolanabilecek verileri sütun veya tablo düzeyinde kısıtlar.
Kısıtlamaları tanımlamadan önce aşağıdaki kurallara dikkat edin:
CHECKkısıtlamaları yalnızca tanımlandıkları tablodaki sütunlara başvurabilir.UNIQUEvePRIMARY KEYkısıtlamaları dağıtım anahtarını içermelidir. Bu kısıtlamalar, append-optimized (AO) veya sütun yönelimli tablolar üzerinde izin verilmez.FOREIGN KEYkısıtlamalarına izin verilir ancak zorlanmaz.Bir bölümde tanımlanan kısıtlamalar diğer tüm bölümlere uygulanır. Kısıtlamalar tek tek bölümlere özgülenemez.
Sözdizimi:
UNIQUE ( column_name [, ... ] )
| PRIMARY KEY ( column_name [, ... ] )
| CHECK ( expression )
| FOREIGN KEY ( column_name [, ... ] )
REFERENCES table_name [ ( column_name [, ... ] ) ]
[ key_match_type ]
[ key_action ]
[ key_checking_mode ]
CHECK kısıtlamaları
Bir CHECK kısıtlaması, sütun değerlerinin bir Boole ifadesini karşılamasını gerektirir.
CREATE TABLE products (
product_no integer,
name text,
price numeric CHECK (price > 0)
);
NOT NULL kısıtlamaları
Bir NOT NULL kısıtlaması, bir sütunun NULL değerler içermesini engeller.
CREATE TABLE products (
product_no integer NOT NULL,
name text NOT NULL,
price numeric
);
UNIQUE kısıtlamaları
Bir UNIQUE kısıtlaması, bir sütundaki veya sütun grubundaki değerlerin tüm satırlar boyunca benzersiz olmasını sağlar. Tablo hash dağıtımlı olmalı ve kısıtlama sütunları dağıtım anahtarını içermelidir.
CREATE TABLE products (
product_no integer UNIQUE,
name text,
price numeric)
DISTRIBUTED BY (product_no);
PRIMARY KEY kısıtlamaları
Bir PRIMARY KEY kısıtlaması, bir UNIQUE kısıtlaması ile bir NOT NULL kısıtlamasını birleştirir. Tablo hash dağıtımlı olmalı ve kısıtlama sütunları dağıtım anahtarını içermelidir.
Bir tablonun birincil anahtarı olduğunda, birincil anahtar sütunu veya sütunları varsayılan olarak dağıtım anahtarı olarak kullanılır.
CREATE TABLE products (
product_no integer PRIMARY KEY,
name text,
price numeric)
DISTRIBUTED BY (product_no);