**Use case**

We're building a publicly available CH query interface (like Play UI but with enhanced capabilities like exploring the data and other goodies).
Essentially, it will contain TBs of publicly available blockchain analytics data served over browser and powered by CH.
Thousands of users are expected to use the UI and send arbitrary SQL statements to our CH cluster.
For the best experience, we want to provide fast, intuitive and seamless environment for the users.

As you can guess, the product is all about writing ad-hoc queries. 
Considering the number of tables, it becomes really hard to use the mouse to explore the data and to type the table/column names with the keyboard.
This is why we have implemented autocomplete into our SQL editor.
One significant problem about the autocomplete is that the system cannot know beforehand the column names of the table unless the table name is provided.

**Describe the solution you'd like**

If somehow users provide the table name first then all the column names would be inferred and could be autocompleted, only if CH supports this:

```sql
FROM table
SELECT *
```
It is a simple yet powerfull way to increase the user experience. This project will also lead lots of users to get to know CH and show the world that there is a better DBMS.

{
    auto select_query = std::make_shared<ASTSelectQuery>();
    node = select_query;
    ParserKeyword s_select("SELECT");
    ParserKeyword s_all("ALL");
    ParserKeyword s_distinct("DISTINCT");
    ParserKeyword s_distinct_on("DISTINCT ON");
    ParserKeyword s_from("FROM");
    ParserKeyword s_prewhere("PREWHERE");
    ParserKeyword s_where("WHERE");
    ParserKeyword s_group_by("GROUP BY");
    ParserKeyword s_with("WITH");
    ParserKeyword s_totals("TOTALS");
    ParserKeyword s_having("HAVING");
    ParserKeyword s_window("WINDOW");
    ParserKeyword s_order_by("ORDER BY");
    ParserKeyword s_limit("LIMIT");
    ParserKeyword s_settings("SETTINGS");
    ParserKeyword s_by("BY");
    ParserKeyword s_rollup("ROLLUP");
    ParserKeyword s_cube("CUBE");
    ParserKeyword s_grouping_sets("GROUPING SETS");
    ParserKeyword s_top("TOP");
    ParserKeyword s_with_ties("WITH TIES");
    ParserKeyword s_offset("OFFSET");