* split up select.md * array-join.md basic refactoring * distinct.md basic refactoring * format.md basic refactoring * from.md basic refactoring * group-by.md basic refactoring * having.md basic refactoring * additional index.md refactoring * into-outfile.md basic refactoring * join.md basic refactoring * limit.md basic refactoring * limit-by.md basic refactoring * order-by.md basic refactoring * prewhere.md basic refactoring * adjust operators/index.md links * adjust sample.md links * adjust more links * adjust operatots links * fix some links * adjust aggregate function article titles * basic refactor of remaining select clauses * absolute paths in make_links.sh * run make_links.sh * remove old select.md locations * translate docs/es * translate docs/fr * translate docs/fa * remove old operators.md location * change operators.md links * adjust links in docs/es * adjust links in docs/es * minor texts adjustments * wip * update machine translations to use new links * fix changelog * es build fixes * get rid of some select.md links * temporary adjust ru links * temporary adjust more ru links * improve curly brace handling * adjust ru as well * fa build fix * ru link fixes * zh link fixes * temporary disable part of anchor checks
4.3 KiB
machine_translated | machine_translated_rev | toc_priority | toc_title |
---|---|---|---|
true | 72537a2d52 |
36 | ادغام |
ادغام
این Merge
موتور (با اشتباه گرفته شود MergeTree
) اطلاعات خود را ذخیره نمی, اما اجازه می دهد تا خواندن از هر تعداد از جداول دیگر به طور همزمان.
خواندن به طور خودکار موازی. نوشتن به یک جدول پشتیبانی نمی شود. هنگام خواندن, شاخص جداول که در واقع در حال خواندن استفاده می شود, در صورتی که وجود داشته باشد.
این Merge
موتور می پذیرد پارامترهای: نام پایگاه داده و یک عبارت منظم برای جداول.
مثال:
Merge(hits, '^WatchLog')
داده خواهد شد از جداول در خواندن hits
پایگاه داده است که نام هایی که مطابقت با عبارت منظم ‘^WatchLog
’.
به جای نام پایگاه داده, شما می توانید یک عبارت ثابت است که یک رشته را برمی گرداند استفاده. به عنوان مثال, currentDatabase()
.
Regular expressions — شماره 2 (پشتیبانی از یک زیر مجموعه از مدار چاپی), حساس به حروف. یادداشت ها در مورد فرار نمادها در عبارات منظم در “match” بخش.
هنگام انتخاب جداول برای خواندن Merge
جدول خود را انتخاب نخواهد شد, حتی اگر منطبق عبارت منظم. این است که برای جلوگیری از حلقه.
ممکن است که به ایجاد دو Merge
جداول که بی وقفه سعی خواهد کرد به خواندن داده های هر یک از دیگران, اما این یک ایده خوب نیست.
راه معمولی برای استفاده از Merge
موتور برای کار با تعداد زیادی از TinyLog
جداول به عنوان اگر با یک جدول واحد.
مثال 2:
بیایید می گویند شما باید یک جدول (WatchLog_old) و تصمیم به تغییر پارتیشن بندی بدون حرکت داده ها به یک جدول جدید (WatchLog_new) و شما نیاز به مراجعه به داده ها از هر دو جدول.
CREATE TABLE WatchLog_old(date Date, UserId Int64, EventType String, Cnt UInt64)
ENGINE=MergeTree(date, (UserId, EventType), 8192);
INSERT INTO WatchLog_old VALUES ('2018-01-01', 1, 'hit', 3);
CREATE TABLE WatchLog_new(date Date, UserId Int64, EventType String, Cnt UInt64)
ENGINE=MergeTree PARTITION BY date ORDER BY (UserId, EventType) SETTINGS index_granularity=8192;
INSERT INTO WatchLog_new VALUES ('2018-01-02', 2, 'hit', 3);
CREATE TABLE WatchLog as WatchLog_old ENGINE=Merge(currentDatabase(), '^WatchLog');
SELECT *
FROM WatchLog
┌───────date─┬─UserId─┬─EventType─┬─Cnt─┐
│ 2018-01-01 │ 1 │ hit │ 3 │
└────────────┴────────┴───────────┴─────┘
┌───────date─┬─UserId─┬─EventType─┬─Cnt─┐
│ 2018-01-02 │ 2 │ hit │ 3 │
└────────────┴────────┴───────────┴─────┘
ستونهای مجازی
-
_table
— Contains the name of the table from which data was read. Type: رشته.شما می توانید شرایط ثابت را تنظیم کنید
_table
درWHERE/PREWHERE
بند (به عنوان مثال,WHERE _table='xyz'
). در این مورد عملیات خواندن فقط برای جداول انجام می شود که شرط است_table
راضی است, به طوری که_table
ستون به عنوان یک شاخص عمل می کند.
همچنین نگاه کنید به