29 KiB
machine_translated | machine_translated_rev | toc_priority | toc_title |
---|---|---|---|
true | 72537a2d52 |
35 | CREATE |
Sorgu oluştur
CREATE DATABASE
Veritabanı oluşturur.
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] [ENGINE = engine(...)]
Yanlar
-
IF NOT EXISTS
Eğer...db_name
veritabanı zaten var, daha sonra ClickHouse yeni bir veritabanı oluşturmuyor ve:- If yan tümcesi belirtilmişse bir istisna atmaz.
- Bir istisna atar if yan tümcesi belirtilmemiş.
-
ON CLUSTER
ClickHouse oluştururdb_name
belirtilen bir kümenin tüm sunucularında veritabanı. -
ENGINE
- MySQL Uzak MySQL sunucusundan veri almanızı sağlar. Varsayılan olarak, ClickHouse kendi kullanır Veritabanı Altyapısı.
CREATE TABLE
Bu CREATE TABLE
sorgu çeşitli formlara sahip olabilir.
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [compression_codec] [TTL expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [compression_codec] [TTL expr2],
...
) ENGINE = engine
Adlı bir tablo oluşturur ‘name’ in the ‘db’ veritabanı veya geçerli veritabanı ise ‘db’ küme değil, parantez içinde belirtilen yapı ve ‘engine’ motor. Tablonun yapısı sütun açıklamalarının bir listesidir. Dizinler altyapısı tarafından destekleniyorsa, tablo altyapısı için parametreler olarak gösterilir.
Bir sütun açıklaması name type
en basit durumda. Örnek: RegionID UInt32
.
İfadeler varsayılan değerler için de tanımlanabilir (aşağıya bakın).
CREATE TABLE [IF NOT EXISTS] [db.]table_name AS [db2.]name2 [ENGINE = engine]
Başka bir tablo ile aynı yapıya sahip bir tablo oluşturur. Tablo için farklı bir motor belirtebilirsiniz. Motor belirtilmemişse, aynı motor için olduğu gibi kullanılacaktır db2.name2
Tablo.
CREATE TABLE [IF NOT EXISTS] [db.]table_name AS table_function()
Yapısı ve veri tarafından döndürülen bir tablo oluşturur. tablo fonksiyonu.
CREATE TABLE [IF NOT EXISTS] [db.]table_name ENGINE = engine AS SELECT ...
Sonucu gibi bir yapıya sahip bir tablo oluşturur SELECT
Sorgu, ile ‘engine’ motor ve SELECT verilerle doldurur.
Her durumda, eğer IF NOT EXISTS
tablo zaten varsa, sorgu bir hata döndürmez. Bu durumda, sorgu hiçbir şey yapmaz.
Sonra başka maddeler olabilir ENGINE
sorguda yan tümcesi. Açıklamalarda tabloların nasıl oluşturulacağına ilişkin ayrıntılı belgelere bakın masa motorları.
Varsayılan Değerler
Sütun açıklaması, aşağıdaki yollardan biriyle varsayılan değer için bir ifade belirtebilir:DEFAULT expr
, MATERIALIZED expr
, ALIAS expr
.
Örnek: URLDomain String DEFAULT domain(URL)
.
Varsayılan değer için bir ifade tanımlanmamışsa, varsayılan değerler sayılar için sıfırlar, dizeler için boş dizeler, diziler için boş diziler ve 1970-01-01
tarihler için veya zero unix timestamp zamanla tarihler için. Boş alanlar desteklenmez.
Varsayılan ifade tanımlanmışsa, sütun türü isteğe bağlıdır. Açıkça tanımlanmış bir tür yoksa, varsayılan ifade türü kullanılır. Örnek: EventDate DEFAULT toDate(EventTime)
– the ‘Date’ türü için kullanılacak ‘EventDate’ sütun.
Veri türü ve varsayılan ifade açıkça tanımlanırsa, bu ifade type casting işlevleri kullanılarak belirtilen türe aktarılır. Örnek: Hits UInt32 DEFAULT 0
aynı şeyi ifade eder Hits UInt32 DEFAULT toUInt32(0)
.
Default expressions may be defined as an arbitrary expression from table constants and columns. When creating and changing the table structure, it checks that expressions don't contain loops. For INSERT, it checks that expressions are resolvable – that all columns they can be calculated from have been passed.
DEFAULT expr
Normal varsayılan değer. INSERT sorgusu karşılık gelen sütunu belirtmezse, ilgili ifadeyi hesaplayarak doldurulur.
MATERIALIZED expr
Somut ifade. Böyle bir sütun INSERT için belirtilemez, çünkü her zaman hesaplanır.
Sütun listesi olmayan bir ekleme için bu sütunlar dikkate alınmaz.
Buna ek olarak, bir SELECT sorgusunda Yıldız İşareti kullanıldığında bu sütun değiştirilmez. Bu, dökümü kullanarak elde edilen değişmezi korumaktır SELECT *
sütun listesini belirtmeden INSERT kullanarak tabloya geri eklenebilir.
ALIAS expr
Eşanlamlı sözcük. Böyle bir sütun tabloda hiç depolanmaz. Değerleri bir tabloya eklenemez ve bir SELECT sorgusunda Yıldız İşareti kullanılırken değiştirilmez. Sorgu ayrıştırma sırasında diğer ad genişletilirse, seçimlerde kullanılabilir.
Yeni sütunlar eklemek için ALTER sorgusunu kullanırken, bu sütunlar için eski veriler yazılmaz. Bunun yerine, yeni sütunlar için değerleri olmayan eski verileri okurken, ifadeler varsayılan olarak anında hesaplanır. Ancak, ifadeleri çalıştırmak sorguda belirtilmeyen farklı sütunlar gerektiriyorsa, bu sütunlar ayrıca okunur, ancak yalnızca buna ihtiyaç duyan veri blokları için okunur.
Bir tabloya yeni bir sütun eklerseniz, ancak daha sonra varsayılan ifadesini değiştirirseniz, eski veriler için kullanılan değerler değişir (değerlerin diskte depolanmadığı veriler için). Arka plan birleştirmeleri çalıştırırken, birleştirme parçalarından birinde eksik olan sütunların verileri birleştirilmiş parçaya yazıldığını unutmayın.
İç içe geçmiş veri yapılarındaki öğeler için varsayılan değerleri ayarlamak mümkün değildir.
Kısıtlamalar
Sütun açıklamaları kısıtlamaları ile birlikte tanımlanabilir:
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [compression_codec] [TTL expr1],
...
CONSTRAINT constraint_name_1 CHECK boolean_expr_1,
...
) ENGINE = engine
boolean_expr_1
herhangi bir Boole ifadesi ile olabilir. Tablo için kısıtlamalar tanımlanırsa, her biri her satır için kontrol edilir INSERT
query. If any constraint is not satisfied — server will raise an exception with constraint name and checking expression.
Büyük miktarda kısıtlama eklemek, büyük INSERT
sorgular.
TTL ifadesi
Değerler için depolama süresini tanımlar. Sadece MergeTree-family tabloları için belirtilebilir. Ayrıntılı açıklama için, bkz. Sütunlar ve tablolar için TTL.
Sütun Sıkıştırma Kodekleri
Varsayılan olarak, ClickHouse lz4
sıkıştırma yöntemi. İçin MergeTree
- motor ailesi varsayılan sıkıştırma yöntemini değiştirebilirsiniz sıkıştırma bir sunucu yapılandırması bölümü. Her bir sütun için sıkıştırma yöntemini de tanımlayabilirsiniz. CREATE TABLE
sorgu.
CREATE TABLE codec_example
(
dt Date CODEC(ZSTD),
ts DateTime CODEC(LZ4HC),
float_value Float32 CODEC(NONE),
double_value Float64 CODEC(LZ4HC(9))
value Float32 CODEC(Delta, ZSTD)
)
ENGINE = <Engine>
...
Bir codec bileşeni belirtilmişse, varsayılan codec bileşeni geçerli değildir. Kodekler bir boru hattında birleştirilebilir, örneğin, CODEC(Delta, ZSTD)
. Projeniz için en iyi codec kombinasyonunu seçmek için, Altınlıkta açıklanana benzer kriterler geçirin ClickHouse verimliliğini artırmak için yeni Kodlamalar Makale.
!!! warning "Uyarıcı"
ClickHouse veritabanı dosyalarını harici yardımcı programlarla açamazsınız lz4
. Bunun yerine, özel kullanın clickhouse-kompresör program.
Sıkıştırma Aşağıdaki tablo motorları için desteklenir:
- MergeTree aile. Sütun sıkıştırma kodeklerini destekler ve varsayılan sıkıştırma yöntemini seçerek sıkıştırma ayarlar.
- Günlük aile. Kullanır
lz4
sıkıştırma yöntemi varsayılan olarak ve sütun sıkıştırma codec destekler. - Koymak. Yalnızca varsayılan sıkıştırmayı destekledi.
- Katmak. Yalnızca varsayılan sıkıştırmayı destekledi.
ClickHouse ortak amaçlı codec ve özel codec destekler.
Özel Kodekler
Bu kodekler, verilerin belirli özelliklerini kullanarak sıkıştırmayı daha etkili hale getirmek için tasarlanmıştır. Bu kodeklerden bazıları verileri kendileri sıkıştırmaz. Bunun yerine, verileri ortak bir amaç için hazırlarlar codec, bu hazırlık olmadan daha iyi sıkıştırır.
Özel kodekler:
Delta(delta_bytes)
— Compression approach in which raw values are replaced by the difference of two neighboring values, except for the first value that stays unchanged. Up todelta_bytes
delta değerlerini saklamak için kullanılır, böylecedelta_bytes
ham değerlerin maksimum boyutudur. Mümkündelta_bytes
değerler: 1, 2, 4, 8. İçin varsayılan değerdelta_bytes
oluyorsizeof(type)
1, 2, 4 veya 8'e eşitse. Diğer tüm durumlarda, 1.DoubleDelta
— Calculates delta of deltas and writes it in compact binary form. Optimal compression rates are achieved for monotonic sequences with a constant stride, such as time series data. Can be used with any fixed-width type. Implements the algorithm used in Gorilla TSDB, extending it to support 64-bit types. Uses 1 extra bit for 32-byte deltas: 5-bit prefixes instead of 4-bit prefixes. For additional information, see Compressing Time Stamps in Gorilla: Hızlı, Ölçeklenebilir, Bellek İçi Zaman Serisi Veritabanı.Gorilla
— Calculates XOR between current and previous value and writes it in compact binary form. Efficient when storing a series of floating point values that change slowly, because the best compression rate is achieved when neighboring values are binary equal. Implements the algorithm used in Gorilla TSDB, extending it to support 64-bit types. For additional information, see Compressing Values in Gorilla: Hızlı, Ölçeklenebilir, Bellek İçi Zaman Serisi Veritabanı.T64
— Compression approach that crops unused high bits of values in integer data types (includingEnum
,Date
veDateTime
). Algoritmasının her adımında, codec 64 değerden oluşan bir blok alır, 64x64 bit matrisine koyar, aktarır, kullanılmayan değer bitlerini kırpar ve gerisini bir dizi olarak döndürür. Kullanılmayan bitler, sıkıştırmanın kullanıldığı tüm veri bölümündeki maksimum ve minimum değerler arasında farklılık göstermeyen bitlerdir.
DoubleDelta
ve Gorilla
kodekler, Gorilla TSDB'DE sıkıştırma algoritmasının bileşenleri olarak kullanılır. Gorilla yaklaşımı, zaman damgaları ile yavaş yavaş değişen değerler dizisi olduğunda senaryolarda etkilidir. Zaman damgaları tarafından etkili bir şekilde sıkıştırılır DoubleDelta
codec ve değerler etkin bir şekilde sıkıştırılır Gorilla
codec. Örneğin, etkili bir şekilde saklanan bir tablo elde etmek için, aşağıdaki yapılandırmada oluşturabilirsiniz:
CREATE TABLE codec_example
(
timestamp DateTime CODEC(DoubleDelta),
slow_values Float32 CODEC(Gorilla)
)
ENGINE = MergeTree()
Genel Amaçlı Kodekler
Cod codecsec codecs'ler:
NONE
— No compression.LZ4
— Lossless veri sıkıştırma algoritması varsayılan olarak kullanılır. Lz4 hızlı sıkıştırma uygular.LZ4HC[(level)]
— LZ4 HC (high compression) algorithm with configurable level. Default level: 9. Settinglevel <= 0
varsayılan düzeyi uygular. Olası seviyeleri: [1, 12]. Önerilen seviye aralığı: [4, 9].ZSTD[(level)]
— Zstd sıkıştırma algoritması yapılandırılabilir ilelevel
. Olası seviyeler: [1, 22]. Varsayılan değer: 1.
Yüksek Sıkıştırma seviyeleri asimetrik senaryolar için kullanışlıdır, örneğin bir kez sıkıştırın, tekrar tekrar sıkıştırın. Daha yüksek seviyeler daha iyi sıkıştırma ve daha yüksek CPU kullanımı anlamına gelir.
Geçici Tablolar
ClickHouse aşağıdaki özelliklere sahip geçici tabloları destekler:
- Bağlantı kaybolursa da dahil olmak üzere oturum sona erdiğinde geçici tablolar kaybolur.
- Geçici bir tablo yalnızca bellek altyapısını kullanır.
- DB geçici bir tablo için belirtilemez. Veritabanları dışında oluşturulur.
- Tüm küme sunucularında dağıtılmış DDL sorgusu ile geçici bir tablo oluşturmak imkansız (kullanarak
ON CLUSTER
): bu tablo yalnızca geçerli oturumda bulunur. - Geçici bir tablo başka bir ile aynı ada sahip ve bir sorgu DB belirtmeden tablo adını belirtir, geçici tablo kullanılır.
- Dağıtılmış sorgu işleme için bir sorguda kullanılan geçici tablolar uzak sunuculara geçirilir.
Geçici bir tablo oluşturmak için aşağıdaki sözdizimini kullanın:
CREATE TEMPORARY TABLE [IF NOT EXISTS] table_name
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
...
)
Çoğu durumda, geçici tablolar el ile oluşturulmaz, ancak bir sorgu için veya dağıtılmış için dış verileri kullanırken (GLOBAL) IN
. Daha fazla bilgi için uygun bölümlere bakın
İle tabloları kullanmak mümkündür Motor = bellek geçici tablolar yerine.
Dağıtılmış DDL sorguları (küme yan tümcesinde)
Bu CREATE
, DROP
, ALTER
, ve RENAME
sorgular, bir kümede dağıtılmış yürütmeyi destekler.
Örneğin, aşağıdaki sorgu oluşturur all_hits
Distributed
her ana bilgisayarda tablo cluster
:
CREATE TABLE IF NOT EXISTS all_hits ON CLUSTER cluster (p Date, i Int32) ENGINE = Distributed(cluster, default, hits)
Bu sorguları doğru bir şekilde çalıştırmak için, her ana bilgisayarın aynı küme tanımına sahip olması gerekir (senkronizasyon yapılandırmalarını basitleştirmek için zookeeper'dan değiştirmeleri kullanabilirsiniz). Ayrıca ZooKeeper sunucularına bağlanmaları gerekir. Bazı ana bilgisayarlar şu anda mevcut olmasa bile, sorgunun yerel sürümü sonunda kümedeki her ana bilgisayarda uygulanır. Tek bir ana makine içinde sorguları yürütme sırası garanti edilir.
CREATE VIEW
CREATE [MATERIALIZED] VIEW [IF NOT EXISTS] [db.]table_name [TO[db.]name] [ENGINE = engine] [POPULATE] AS SELECT ...
Bir görünüm oluşturur. İki tür görüş vardır: normal ve SOMUTLAŞTIRILMIŞ.
Normal görünümler herhangi bir veri depolamaz, ancak başka bir tablodan bir okuma gerçekleştirir. Başka bir deyişle, normal bir görünüm kaydedilmiş bir sorgudan başka bir şey değildir. Bir görünümden okurken, bu kaydedilmiş sorgu FROM yan tümcesinde bir alt sorgu olarak kullanılır.
Örnek olarak, bir görünüm oluşturduğunuzu varsayalım:
CREATE VIEW view AS SELECT ...
ve bir sorgu yazdı:
SELECT a, b, c FROM view
Bu sorgu, alt sorguyu kullanmaya tam olarak eşdeğerdir:
SELECT a, b, c FROM (SELECT ...)
Materialized görünümler, ilgili SELECT sorgusu tarafından dönüştürülmüş verileri depolar.
Olmadan hayata bir görünüm oluştururken TO [db].[table]
, you must specify ENGINE – the table engine for storing data.
İle somutlaştırılmış bir görünüm oluştururken TO [db].[table]
, kullanma mustmalısınız POPULATE
.
Materialized görünüm aşağıdaki gibi düzenlenmiştir: SELECT belirtilen tabloya veri eklerken, eklenen verilerin bir kısmı bu SELECT sorgusu tarafından dönüştürülür ve sonuç görünümde eklenir.
Doldur belirtirseniz, varolan tablo verilerini oluştururken görünümde, sanki bir CREATE TABLE ... AS SELECT ...
. Aksi takdirde, sorgu yalnızca görünümü oluşturduktan sonra tabloya eklenen verileri içerir. Görünüm oluşturma sırasında tabloya eklenen veriler EKLENMEYECEĞİNDEN, doldur kullanmanızı önermiyoruz.
A SELECT
sorgu içerebilir DISTINCT
, GROUP BY
, ORDER BY
, LIMIT
… Note that the corresponding conversions are performed independently on each block of inserted data. For example, if GROUP BY
ayarlanır, veri ekleme sırasında toplanır, ancak yalnızca tek bir eklenen veri paketi içinde toplanır. Veriler daha fazla toplanmayacaktır. Özel durum, bağımsız olarak veri toplama, gibi gerçekleştiren bir motor kullanırken olur SummingMergeTree
.
Yürütme ALTER
somut görünümlerle ilgili sorgular tam olarak geliştirilmemiştir, bu nedenle rahatsız edici olabilirler. Eğer hayata görünüm inşaat kullanıyorsa TO [db.]name
yapabilirsiniz DETACH
the view, run ALTER
hedef tablo için ve sonra ATTACH
daha önce müstakil (DETACH
) görünüm.
Görünümler normal tablolarla aynı görünür. Örneğin, bunlar sonucu listelenir SHOW TABLES
sorgu.
Görünümleri silmek için ayrı bir sorgu yok. Bir görünümü silmek için şunları kullanın DROP TABLE
.
CREATE DICTIONARY
CREATE DICTIONARY [IF NOT EXISTS] [db.]dictionary_name [ON CLUSTER cluster]
(
key1 type1 [DEFAULT|EXPRESSION expr1] [HIERARCHICAL|INJECTIVE|IS_OBJECT_ID],
key2 type2 [DEFAULT|EXPRESSION expr2] [HIERARCHICAL|INJECTIVE|IS_OBJECT_ID],
attr1 type2 [DEFAULT|EXPRESSION expr3],
attr2 type2 [DEFAULT|EXPRESSION expr4]
)
PRIMARY KEY key1, key2
SOURCE(SOURCE_NAME([param1 value1 ... paramN valueN]))
LAYOUT(LAYOUT_NAME([param_name param_value]))
LIFETIME([MIN val1] MAX val2)
Oluşturuyor dış sözlük verilen ile yapılı, kaynaklı, düzen ve ömür.
Dış sözlük yapısı özniteliklerden oluşur. Sözlük öznitelikleri tablo sütunlarına benzer şekilde belirtilir. Tek gerekli öznitelik özelliği türüdür, diğer tüm özelliklerin varsayılan değerleri olabilir.
Sözlüğe bağlı olarak düzen bir veya daha fazla öznitelik sözlük anahtarları olarak belirtilebilir.
Daha fazla bilgi için, bkz. Dış Söz Dictionarieslükler bölme.
CREATE USER
Oluşturur bir kullanıcı hesabı.
Sözdizimi
CREATE USER [IF NOT EXISTS | OR REPLACE] name [ON CLUSTER cluster_name]
[IDENTIFIED [WITH {NO_PASSWORD|PLAINTEXT_PASSWORD|SHA256_PASSWORD|SHA256_HASH|DOUBLE_SHA1_PASSWORD|DOUBLE_SHA1_HASH}] BY {'password'|'hash'}]
[HOST {LOCAL | NAME 'name' | REGEXP 'name_regexp' | IP 'address' | LIKE 'pattern'} [,...] | ANY | NONE]
[DEFAULT ROLE role [,...]]
[SETTINGS variable [= value] [MIN [=] min_value] [MAX [=] max_value] [READONLY|WRITABLE] | PROFILE 'profile_name'] [,...]
Tanıma
Kullanıcı tanımlama birden çok yolu vardır:
IDENTIFIED WITH no_password
IDENTIFIED WITH plaintext_password BY 'qwerty'
IDENTIFIED WITH sha256_password BY 'qwerty'
veyaIDENTIFIED BY 'password'
IDENTIFIED WITH sha256_hash BY 'hash'
IDENTIFIED WITH double_sha1_password BY 'qwerty'
IDENTIFIED WITH double_sha1_hash BY 'hash'
Kullanıcı Host
Kullanıcı ana bilgisayar, ClickHouse sunucusuna bağlantı kurulabilen bir ana bilgisayardır. Ev sahibi belirtilebilir HOST
aşağıdaki yollarla sorgu bölümü:
HOST IP 'ip_address_or_subnetwork'
— User can connect to ClickHouse server only from the specified IP address or a alt ağ. Örnekler:HOST IP '192.168.0.0/16'
,HOST IP '2001:DB8::/32'
. Üretimde kullanım için, sadece belirtinHOST IP
elemanları (IP adresleri ve maskeleri), kullanıl ,dığından berihost
vehost_regexp
ekstra gecikmeye neden olabilir.HOST ANY
— User can connect from any location. This is default option.HOST LOCAL
— User can connect only locally.HOST NAME 'fqdn'
— User host can be specified as FQDN. For example,HOST NAME 'mysite.com'
.HOST NAME REGEXP 'regexp'
— You can use pcre kullanıcı ana bilgisayarlarını belirtirken düzenli ifadeler. Mesela,HOST NAME REGEXP '.*\.mysite\.com'
.HOST LIKE 'template'
— Allows you use the LIKE kullanıcı ana filtrelemek için operatör. Mesela,HOST LIKE '%'
eşdeğ toer equivalentdirHOST ANY
,HOST LIKE '%.mysite.com'
tüm host filtersları filtrelermysite.com
etki.
Host belirtme başka bir yolu kullanmaktır @
kullanıcı adı ile sözdizimi. Örnekler:
CREATE USER mira@'127.0.0.1'
— Equivalent to theHOST IP
sözdizimi.CREATE USER mira@'localhost'
— Equivalent to theHOST LOCAL
sözdizimi.CREATE USER mira@'192.168.%.%'
— Equivalent to theHOST LIKE
sözdizimi.
!!! info "Uyarıcı"
ClickHouse davranır user_name@'address'
bir bütün olarak bir kullanıcı adı olarak. Böylece, teknik olarak birden fazla kullanıcı oluşturabilirsiniz user_name
ve sonra farklı yapılar @
. Ben bunu tavsiye etmiyoruz.
Örnekler
Kullanıcı hesabı oluşturma mira
şifre ile korunmaktadır qwerty
:
CREATE USER mira HOST IP '127.0.0.1' IDENTIFIED WITH sha256_password BY 'qwerty'
mira
ClickHouse sunucusunun çalıştığı ana bilgisayarda istemci uygulamasını başlatmalıdır.
Kullanıcı hesabı oluşturma john
, ona roller atayın ve bu rolleri varsayılan yapın:
CREATE USER john DEFAULT ROLE role1, role2
Kullanıcı hesabı oluşturma john
ve gelecekteki tüm rollerini varsayılan hale getirin:
ALTER USER user DEFAULT ROLE ALL
Ne zaman bazı rol atanacak john
gelecekte otomatik olarak varsayılan hale gelecektir.
Kullanıcı hesabı oluşturma john
ve gelecekteki tüm rollerini varsayılan olarak yapın role1
ve role2
:
ALTER USER john DEFAULT ROLE ALL EXCEPT role1, role2
CREATE ROLE
Oluşturur bir rol.
Sözdizimi
CREATE ROLE [IF NOT EXISTS | OR REPLACE] name
[SETTINGS variable [= value] [MIN [=] min_value] [MAX [=] max_value] [READONLY|WRITABLE] | PROFILE 'profile_name'] [,...]
Açıklama
Rol bir dizi ayrıcalıklar. Bir rolle verilen bir kullanıcı, bu rolün tüm ayrıcalıklarını alır.
Bir kullanıcı birden çok rolle atanabilir. Kullanıcılar tarafından keyfi kombinasyonlarda verilen rolleri uygulayabilirsiniz SET ROLE deyim. Ayrıcalıkların son kapsamı, uygulanan tüm rollerin tüm ayrıcalıklarının birleştirilmiş kümesidir. Bir kullanıcının doğrudan kullanıcı hesabına verilen ayrıcalıkları varsa, bunlar roller tarafından verilen ayrıcalıklarla da birleştirilir.
Kullanıcı, kullanıcı girişinde geçerli olan varsayılan rollere sahip olabilir. Varsayılan rolleri ayarlamak için SET DEFAULT ROLE beyan veya ALTER USER deyim.
Bir rolü iptal etmek için REVOKE deyim.
Rolü silmek için DROP ROLE deyim. Silinen rol, kendisine verilen tüm kullanıcılardan ve rollerden otomatik olarak iptal edilir.
Örnekler
CREATE ROLE accountant;
GRANT SELECT ON db.* TO accountant;
Bu sorgu sırası rolü oluşturur accountant
bu veri okuma ayrıcalığına sahip accounting
veritabanı.
Kullanıcıya rol verilmesi mira
:
GRANT accountant TO mira;
Rol verildikten sonra kullanıcı bunu kullanabilir ve izin verilen sorguları gerçekleştirebilir. Mesela:
SET ROLE accountant;
SELECT * FROM db.*;
CREATE ROW POLICY
Oluşturur bir satırlar için filtre, bir kullanıcı bir tablodan okuyabilir.
Sözdizimi
CREATE [ROW] POLICY [IF NOT EXISTS | OR REPLACE] policy_name [ON CLUSTER cluster_name] ON [db.]table
[AS {PERMISSIVE | RESTRICTIVE}]
[FOR SELECT]
[USING condition]
[TO {role [,...] | ALL | ALL EXCEPT role [,...]}]
Bölüm olarak
Bu bölümü kullanarak izin veren veya kısıtlayıcı ilkeler oluşturabilirsiniz.
İzin verme ilkesi satırlara erişim sağlar. Aynı tabloya uygulanan izin veren politikalar boolean kullanılarak birlikte birleştirilir OR
operatör. İlkeler varsayılan olarak izinlidir.
Kısıtlayıcı ilke satıra erişimi kısıtlar. Aynı tabloya uygulanan kısıtlayıcı ilkeler, boolean kullanılarak birlikte birleştirilir AND
operatör.
Kısıtlayıcı ilkeler, izin veren süzgeçleri geçen satırlara uygulanır. Kısıtlayıcı ilkeler ayarlarsanız, ancak izin veren ilkeler yoksa, kullanıcı tablodan herhangi bir satır alamaz.
Bölüm için
Bölümünde TO
örneğin, rollerin ve kullanıcıların karışık bir listesini verebilirsiniz, CREATE ROW POLICY ... TO accountant, john@localhost
.
Kelime ALL
geçerli kullanıcı dahil olmak üzere tüm ClickHouse kullanıcıları anlamına gelir. Kelimeler ALL EXCEPT
bazı kullanıcıları tüm kullanıcılar listesinden çıkarmak için izin ver, örneğin CREATE ROW POLICY ... TO ALL EXCEPT accountant, john@localhost
Örnekler
CREATE ROW POLICY filter ON mydb.mytable FOR SELECT USING a<1000 TO accountant, john@localhost
CREATE ROW POLICY filter ON mydb.mytable FOR SELECT USING a<1000 TO ALL EXCEPT mira
CREATE QUOTA
Oluşturur bir kota bu bir kullanıcıya veya bir role atanabilir.
Sözdizimi
CREATE QUOTA [IF NOT EXISTS | OR REPLACE] name [ON CLUSTER cluster_name]
[KEYED BY {'none' | 'user name' | 'ip address' | 'client key' | 'client key or user name' | 'client key or ip address'}]
[FOR [RANDOMIZED] INTERVAL number {SECOND | MINUTE | HOUR | DAY}
{MAX { {QUERIES | ERRORS | RESULT ROWS | RESULT BYTES | READ ROWS | READ BYTES | EXECUTION TIME} = number } [,...] |
NO LIMITS | TRACKING ONLY} [,...]]
[TO {role [,...] | ALL | ALL EXCEPT role [,...]}]
Örnek
15 ay içinde 123 Sorgu ile geçerli kullanıcı için sorgu sayısını sınır constraintlayın:
CREATE QUOTA qA FOR INTERVAL 15 MONTH MAX QUERIES 123 TO CURRENT_USER
CREATE SETTINGS PROFILE
Oluşturur bir ayarlar profili bu bir kullanıcıya veya bir role atanabilir.
Sözdizimi
CREATE SETTINGS PROFILE [IF NOT EXISTS | OR REPLACE] name [ON CLUSTER cluster_name]
[SETTINGS variable [= value] [MIN [=] min_value] [MAX [=] max_value] [READONLY|WRITABLE] | INHERIT 'profile_name'] [,...]
Örnek
Create the max_memory_usage_profile
ayar profili için değer ve kısıtlamalarla max_memory_usage
ayar. At itayın robin
:
CREATE SETTINGS PROFILE max_memory_usage_profile SETTINGS max_memory_usage = 100000001 MIN 90000000 MAX 110000000 TO robin