Many SQL databases reserve keywords like SELECT, GROUP, or ORDER, preventing their use as column or table names without quoting. ClickHouse takes a more relaxed approach: keywords are not reserved in ClickHouse. This offers flexibility in naming but comes with considerations for readability and potential ambiguity.
For example, you can create a table like below.
CREATE TABLE keyword_demo ( select UInt32, group String, order Date ) ENGINE = MergeTree() ORDER BY select;
This table has three columns: select, group, and order, all of which are SQL keywords.
krishna :) CREATE TABLE keyword_demo ( select UInt32, group String, order Date ) ENGINE = MergeTree() ORDER BY select; CREATE TABLE keyword_demo ( `select` UInt32, `group` String, `order` Date ) ENGINE = MergeTree ORDER BY select Query id: 39c674ab-09d2-43fa-8bc2-c9d9caa94cf3 Connecting to database demo_db at localhost:9000 as user default. Connected to ClickHouse server version 25.5.1. Ok. 0 rows in set. Elapsed: 0.010 sec.
Querying the Table
SELECT select, group, order FROM keyword_demo;
This works perfectly in ClickHouse and does not raise syntax errors.
krishna :) SELECT select, group, order FROM keyword_demo; SELECT select, group, order FROM keyword_demo Query id: fcb40cef-abd7-46d8-bfbc-50a76c7fd506 Ok. 0 rows in set. Elapsed: 0.002 sec.
If your schema grows or you hit parsing ambiguity (especially with complex expressions or joins), consider backticks (`) or double quotes ("").
SELECT `select`, `group`, `order` FROM keyword_demo; (OR) SELECT "select", "group", "order" FROM keyword_demo;
krishna :) SELECT `select`, `group`, `order` FROM keyword_demo; SELECT select, group, order FROM keyword_demo Query id: d7d962c8-1709-4e38-8f2a-57d6012f7a04 Ok. 0 rows in set. Elapsed: 0.002 sec. krishna :) krishna :) krishna :) SELECT "select", "group", "order" FROM keyword_demo; SELECT select, group, order FROM keyword_demo Query id: c250da7f-bbea-4b89-b47f-8b4801ec178c Ok. 0 rows in set. Elapsed: 0.002 sec. krishna :)
ClickHouse does not reserve keywords strictly, they can be reused as identifiers. But I would suggest avoiding these to prevent any confusion.
Previous Next Home
No comments:
Post a Comment