نحو 

دو نوع تجزیه کننده در سیستم وجود دارد: تجزیه کننده کامل مربع (تجزیه کننده نزول بازگشتی) و تجزیه کننده فرمت داده (تجزیه کننده جریان سریع).
در تمام موارد به جز INSERT پرس و جو, تنها تجزیه کننده کامل گذاشتن استفاده شده است.
این INSERT پرس و جو از هر دو تجزیه کننده استفاده می کند:

INSERT INTO t VALUES (1, 'Hello, world'), (2, 'abc'), (3, 'def')

این INSERT INTO t VALUES قطعه توسط تجزیه کننده کامل و داده ها تجزیه می شود (1, 'Hello, world'), (2, 'abc'), (3, 'def') توسط تجزیه کننده جریان سریع تجزیه می شود. شما همچنین می توانید تجزیه کننده کامل برای داده ها با استفاده از در حال خواندن: تنظیمات. چه زمانی input_format_values_interpret_expressions = 1 کلیک هاوس اول سعی می کند به تجزیه ارزش با تجزیه کننده جریان سریع. در صورت عدم موفقیت کلیک هاوس تلاش می کند تا از تجزیه کننده کامل برای داده ها استفاده کند و مانند یک مربع درمان شود عبارت.

داده ها می توانند هر فرمت داشته باشند. هنگامی که یک پرس و جو را دریافت کرده است, سرور محاسبه بیش از بیشینه_کرکی_سیز بایت از درخواست در رم (به طور پیش فرض, 1 مگابایت), و بقیه جریان تجزیه.
این اجازه می دهد تا برای اجتناب از مشکلات بزرگ INSERT نمایش داده شد.

هنگام استفاده از Values قالب در یک INSERT پرس و جو, ممکن است به نظر می رسد که داده ها همان عبارات در تجزیه SELECT پرس و جو, اما این درست نیست. این Values فرمت بسیار محدود تر است.

بقیه این مقاله تجزیه کننده کامل را پوشش می دهد. برای کسب اطلاعات بیشتر در مورد تجزیه کننده فرمت, دیدن فرشها بخش.

فاصلهها 

ممکن است هر تعداد از نمادهای فضایی بین سازه های نحوی (از جمله شروع و پایان پرس و جو) وجود دارد. علامت فضا شامل فضا, باریکه, خوراک خط, کروم, و خوراک فرم.

توضیحات 

تاتر پشتیبانی از هر دو گذاشتن به سبک و ج سبک نظرات.
گذاشتن به سبک نظرات با شروع -- و در ادامه به پایان خط, یک فضای پس از -- می توان حذف.
ج سبک از /* به */و می تواند چند خطی, فضاهای مورد نیاز نیست یا.

کلیدواژهها 

کلمات کلیدی حساس به حروف هستند که مربوط به:

  • استاندارد گذاشتن. به عنوان مثال, SELECT, select و SeLeCt همه معتبر هستند.
  • پیاده سازی در برخی از پایگاه داده محبوب (خروجی زیر و یا پست). به عنوان مثال, DateTime همان است datetime.

این که نام نوع داده حساس به حروف باشد را میتوان در system.data_type_families جدول

در مقایسه با استاندارد گذاشتن تمام کلمات کلیدی دیگر (از جمله توابع نام) هستند حساس به حالت.

کلمات کلیدی محفوظ نیست; به عنوان مثل تنها در زمینه مربوطه درمان می شوند. در صورت استفاده شناسهها با همین نام به عنوان کلمات کلیدی, محصور را به دو نقل قول و یا پشت. برای مثال پرس و جو SELECT "FROM" FROM table_name معتبر است اگر جدول table_name دارای ستون با نام "FROM".

شناسهها 

شناسه ها عبارتند از:

شناسه را می توان به نقل و یا غیر نقل. در حالت دوم ترجیح داده است.

شناسه های غیر نقل قول باید عبارت منظم مطابقت ^[a-zA-Z_][0-9a-zA-Z_]*$ و نمی تواند برابر باشد کلیدواژهها. مثالها: x, _1, X_y__Z123_.

اگر شما می خواهید به استفاده از شناسه همان کلمات کلیدی و یا شما می خواهید به استفاده از نمادهای دیگر در شناسه, نقل قول با استفاده از دو نقل قول و یا پشت پرده, مثلا, "id", `id`.

Literals 

عددی وجود دارد, رشته, ترکیب, و NULL literals.

عددی 

تحت اللفظی عددی تلاش می کند به تجزیه شود:

  • اولین, به عنوان یک شماره امضا 64 بیتی, با استفاده از استرتول تابع.
  • اگر ناموفق, به عنوان یک عدد بدون علامت 64 بیتی, با استفاده از استرول تابع.
  • اگر ناموفق, به عنوان یک عدد شناور نقطه با استفاده از رشته تابع.
  • در غیر این صورت, این خطا را برمی گرداند.

ارزش تحت اللفظی کوچکترین نوع است که متناسب با ارزش است.
مثلا, 1 به عنوان تجزیه UInt8 اما 256 به عنوان تجزیه شده است UInt16. برای کسب اطلاعات بیشتر, دیدن انواع داده ها.

مثالها: 1, 18446744073709551615, 0xDEADBEEF, 01, 0.1, 1e100, -1e-100, inf, nan.

رشته 

فقط رشته های رشته ای در نقل قول های تک پشتیبانی می شوند. شخصیت های محصور می تواند بک اسلش فرار. توالی فرار زیر یک مقدار خاص مربوطه: \b, \f, \r, \n, \t, \0, \a, \v, \xHH. در تمام موارد دیگر, فرار توالی در قالب \c کجا c است هر شخصیت, به تبدیل c. این بدان معنی است که شما می توانید توالی استفاده کنید \'و\\. ارزش خواهد شد که رشته نوع.

در رشته لیتر, شما نیاز به فرار حداقل ' و \. نقل قول تنها را می توان با نقل قول تنها فرار, لیتر 'It\'s' و 'It''s' برابر هستند.

ترکیب 

ارریس با براکت مربع ساخته شده است [1, 2, 3]. نوپل ها با براکت های گرد ساخته می شوند (1, 'Hello, world!', 2).
مشخصات فنی این نیست literals اما عبارات با آرایه ایجاد اپراتور و چند تایی ایجاد اپراتور بود.
مجموعه ای باید شامل حداقل یک مورد باشد و یک تاپل باید حداقل دو مورد داشته باشد.
یک مورد جداگانه وجود دارد که تاپل در ظاهر IN بند یک SELECT پرس و جو. نتایج پرس و جو می تواند شامل تاپل, اما تاپل را نمی توان به یک پایگاه داده ذخیره (به جز از جداول با حافظه موتور).

NULL 

نشان می دهد که ارزش از دست رفته است.

به منظور ذخیره NULL در یک میدان جدول باید از Nullable نوع.

بسته به فرمت داده (ورودی یا خروجی), NULL ممکن است نمایندگی های مختلف. برای کسب اطلاعات بیشتر, اسناد و مدارک برای دیدن قالبهای داده.

بسیاری از تفاوت های ظریف برای پردازش وجود دارد NULL. مثلا, اگر حداقل یکی از استدلال از یک عملیات مقایسه است NULL نتیجه این عملیات نیز است NULL. همان درست است برای ضرب است, بعلاوه, و عملیات دیگر. برای کسب اطلاعات بیشتر, خواندن اسناد و مدارک برای هر عملیات.

در نمایش داده شد, شما می توانید بررسی کنید NULL با استفاده از IS NULL و IS NOT NULL اپراتورها و توابع مرتبط isNull و isNotNull.

توابع 

فراخوانی تابع مانند یک شناسه با یک لیست از استدلال نوشته شده (احتمالا خالی) در براکت دور. در مقابل به گذاشتن استاندارد, براکت مورد نیاز است, حتی برای یک لیست استدلال خالی. مثال: now().
توابع منظم و جمع وجود دارد (بخش را ببینید “Aggregate functions”). برخی از توابع دانه می تواند شامل دو لیست از استدلال در براکت. مثال: quantile (0.9) (x). این توابع مجموع نامیده می شوند “parametric” توابع, و استدلال در لیست اول نامیده می شوند “parameters”. نحو توابع کل بدون پارامتر همان است که برای توابع به طور منظم است.

اپراتورها 

اپراتورها در حال تبدیل به توابع مربوط به خود را طی پرس و جو و تجزیه گرفتن اولویت خود را و associativity به حساب آورد.
برای مثال بیان 1 + 2 * 3 + 4 تبدیل به plus(plus(1, multiply(2, 3)), 4).

انواع داده ها و موتورهای جدول پایگاه داده 

انواع داده ها و موتورهای جدول در CREATE پرس و جو به همان شیوه به عنوان شناسه و یا توابع نوشته شده است. به عبارت دیگر, ممکن است یا ممکن است حاوی یک لیست استدلال در براکت نیست. برای کسب اطلاعات بیشتر به بخش ها مراجعه کنید “Data types,” “Table engines,” و “CREATE”.

نامگردانهای بیان 

نام مستعار یک نام تعریف شده توسط کاربر برای بیان در پرس و جو است.

expr AS alias
  • AS — The keyword for defining aliases. You can define the alias for a table name or a column name in a SELECT بند بدون استفاده از AS کلمه کلیدی.

    For example, `SELECT table_name_alias.column_name FROM table_name table_name_alias`.
    
    In the [CAST](sql_reference/functions/type_conversion_functions.md#type_conversion_function-cast) function, the `AS` keyword has another meaning. See the description of the function.
    
  • expr — Any expression supported by ClickHouse.

    For example, `SELECT column_name * 2 AS double FROM some_table`.
    
  • alias — Name for expr. نام مستعار باید با پیروی از شناسهها نحو.

    For example, `SELECT "table t".column_name FROM table_name AS "table t"`.
    

نکاتی در مورد استفاده 

نام مستعار جهانی برای یک پرس و جو و یا زیرخاکی هستند, و شما می توانید یک نام مستعار در هر بخشی از یک پرس و جو برای هر بیان تعریف. به عنوان مثال, SELECT (1 AS n) + 2, n.

نام مستعار قابل مشاهده نیست در subqueries و بین subqueries. مثلا, در حالی که اجرای پرس و جو SELECT (SELECT sum(b.a) + num FROM b) - a.a AS num FROM a تاتر استثنا را تولید می کند Unknown identifier: num.

اگر یک نام مستعار برای ستون نتیجه در تعریف SELECT بند یک خرده فروشی, این ستون ها در پرس و جو بیرونی قابل مشاهده هستند. به عنوان مثال, SELECT n + m FROM (SELECT 1 AS n, 2 AS m).

مراقب باشید با نام مستعار است که همان نام ستون یا جدول می باشد. بیایید مثال زیر را در نظر بگیریم:

CREATE TABLE t
(
    a Int,
    b Int
)
ENGINE = TinyLog()
SELECT
    argMax(a, b),
    sum(b) AS b
FROM t
Received exception from server (version 18.14.17):
Code: 184. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Aggregate function sum(b) is found inside another aggregate function in query.

در این مثال ما اعلام جدول t با ستون b. سپس, در هنگام انتخاب داده, ما تعریف sum(b) AS b نام مستعار. به عنوان نام مستعار جهانی هستند, خانه را جایگزین تحت اللفظی b در عبارت argMax(a, b) با بیان sum(b). این جایگزینی باعث استثنا.

ستاره 

در یک SELECT پرس و جو, ستاره می تواند عبارت جایگزین. برای کسب اطلاعات بیشتر به بخش مراجعه کنید “SELECT”.

عبارتها 

بیان یک تابع است, شناسه, تحت اللفظی, استفاده از یک اپراتور, بیان در داخل پرانتز, خرده فروشی, یا ستاره. همچنین می تواند شامل یک نام مستعار.
لیستی از عبارات یک یا چند عبارت از هم جدا شده توسط کاما است.
توابع و اپراتورهای, به نوبه خود, می توانید عبارات به عنوان استدلال دارند.

مقاله اصلی

Rating: 4 - 21 votes

Was this content helpful?
★★★★☆