mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-17 13:13:36 +00:00
add comments
This commit is contained in:
parent
d2209a1460
commit
041f5c8843
@ -14,8 +14,35 @@ class ASTFunction;
|
||||
class ASTIdentifier;
|
||||
using DataTypePtr = std::shared_ptr<const IDataType>;
|
||||
|
||||
/// Visits AST node to rewrite alias columns in filter query
|
||||
/// Currently works only in `KeyCondition` of select query and `required_columns` in `InterpreterSelectQuery.cpp`
|
||||
/// Visits AST node to rewrite alias columns in query
|
||||
/// Currently works only 3 kind ways below
|
||||
|
||||
/// For example:
|
||||
// CREATE TABLE test_table
|
||||
// (
|
||||
// `timestamp` DateTime,
|
||||
// `value` UInt64,
|
||||
// `day` Date ALIAS toDate(timestamp),
|
||||
// `day1` Date ALIAS day + 1,
|
||||
// `day2` Date ALIAS day1 + 1,
|
||||
// `time` DateTime ALIAS timestamp
|
||||
// )ENGINE = MergeTree
|
||||
// PARTITION BY toYYYYMMDD(timestamp)
|
||||
// ORDER BY timestamp SETTINGS index_granularity = 1;
|
||||
|
||||
/// 1. Rewrite the filters in query when enable optimize_alias_column_prediction
|
||||
/// this could help with `optimize_trivial_count`, Partition Prune in `KeyCondition` and secondary indexes.
|
||||
/// eg: select max(value) from test_table where day2 = today(), filters will be: ((toDate(timestamp) + 1) + 1) = today() .
|
||||
|
||||
/// 2. Alias on alias for `required_columns` extracted in `InterpreterSelectQuery.cpp`, it could help get all dependent physical columns for query.
|
||||
/// eg: select day2 from test_table. `required_columns` can got require columns from the tempory rewrited AST `((toDate(timestamp) + 1) + 1)`.
|
||||
|
||||
/// 3. Help with `optimize_aggregation_in_order` and `optimize_read_in_order` in `ReadInOrderOptimizer.cpp`:
|
||||
/// For queries with alias columns in `orderBy` and `groupBy`, these ASTs will not change.
|
||||
/// But we generate tempory asts and generate tempory Actions to get the `InputOrderInfo`
|
||||
/// eg: select day1 from test_table order by day1;
|
||||
|
||||
|
||||
class ColumnAliasesMatcher
|
||||
{
|
||||
public:
|
||||
|
@ -2,12 +2,12 @@
|
||||
|
||||
#include <common/types.h>
|
||||
#include <Parsers/IAST_fwd.h>
|
||||
#include <Interpreters/Context.h>
|
||||
|
||||
|
||||
namespace DB
|
||||
{
|
||||
|
||||
class Context;
|
||||
class NamesAndTypesList;
|
||||
/// It will produce an expression with CAST to get an AST with the required type.
|
||||
ASTPtr addTypeConversionToAST(ASTPtr && ast, const String & type_name);
|
||||
|
||||
|
@ -139,11 +139,12 @@ InputOrderInfoPtr ReadInOrderOptimizer::getInputOrder(const StorageMetadataPtr &
|
||||
|
||||
if (ok)
|
||||
order_key_prefix_descr.push_back(required_sort_description[i]);
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
if (order_key_prefix_descr.empty())
|
||||
return {};
|
||||
|
||||
return std::make_shared<InputOrderInfo>(std::move(order_key_prefix_descr), read_direction);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user