ClickHouse/docs/en/sql-reference/statements/select/from.md
Ivan Blinkov aa17da6b68
[docs] adjust SELECT ToC meta (#10942)
* [docs] adjust SELECT ToC meta

* Update array-join.md

* Update distinct.md

* Update format.md

* Update from.md

* Update group-by.md

* Update having.md

* Update into-outfile.md

* Update join.md

* Update limit-by.md

* Update limit.md

* Update order-by.md

* Update prewhere.md

* Update sample.md

* Update union-all.md

* Update where.md

* Update with.md
2020-05-15 14:25:18 +03:00

2.7 KiB
Raw Blame History

toc_title
FROM

FROM Clause

The FROM clause specifies the source to read data from:

JOIN and ARRAY JOIN clauses may also be used to extend the functionality of the FROM clause.

Subquery is another SELECT query that may be specified in parenthesis inside FROM clause.

FROM clause can contain multiple data sources, separated by commas, which is equivalent of performing CROSS JOIN on them.

FINAL Modifier

When FINAL is specified, ClickHouse fully merges the data before returning the result and thus performs all data transformations that happen during merges for the given table engine.

It is applicable when selecting data from tables that use the MergeTree-engine family (except GraphiteMergeTree). Also supported for:

Drawbacks

Queries that use FINAL are executed not as fast as similar queries that dont, because:

  • Query is executed in a single thread and data is merged during query execution.
  • Queries with FINAL read primary key columns in addition to the columns specified in the query.

In most cases, avoid using FINAL. The common approach is to use different queries that assume the background processes of the MergeTree engine have't happened yet and deal with it by applying aggregation (for example, to discard duplicates). {## TODO: examples ##}

Implementation Details

If the FROM clause is omitted, data will be read from the system.one table. The system.one table contains exactly one row (this table fulfills the same purpose as the DUAL table found in other DBMSs).

To execute a query, all the columns listed in the query are extracted from the appropriate table. Any columns not needed for the external query are thrown out of the subqueries. If a query does not list any columns (for example, SELECT count() FROM t), some column is extracted from the table anyway (the smallest one is preferred), in order to calculate the number of rows.