mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-15 19:02:04 +00:00
Merge branch 'consistent_metadata' into consistent_metadata2
This commit is contained in:
commit
e812fa15d1
@ -446,27 +446,27 @@ public:
|
|||||||
/// Returns data paths if storage supports it, empty vector otherwise.
|
/// Returns data paths if storage supports it, empty vector otherwise.
|
||||||
virtual Strings getDataPaths() const { return {}; }
|
virtual Strings getDataPaths() const { return {}; }
|
||||||
|
|
||||||
/// Returns structure with partition key
|
/// Returns structure with partition key.
|
||||||
const StorageMetadataKeyField & getPartitionKey() const;
|
const StorageMetadataKeyField & getPartitionKey() const;
|
||||||
/// Set partition key for storage (methods bellow, are just wrappers for this
|
/// Set partition key for storage (methods bellow, are just wrappers for this
|
||||||
/// struct)
|
/// struct).
|
||||||
void setPartitionKey(const StorageMetadataKeyField & partition_key_);
|
void setPartitionKey(const StorageMetadataKeyField & partition_key_);
|
||||||
/// Returns ASTExpressionList of partition key expression for storage or nullptr if there is none.
|
/// Returns ASTExpressionList of partition key expression for storage or nullptr if there is none.
|
||||||
ASTPtr getPartitionKeyAST() const { return partition_key.definition_ast; }
|
ASTPtr getPartitionKeyAST() const { return partition_key.definition_ast; }
|
||||||
/// Storage has partition key
|
/// Storage has partition key.
|
||||||
bool hasPartitionKey() const;
|
bool hasPartitionKey() const;
|
||||||
/// Returns column names that need to be read to calculate partition key.
|
/// Returns column names that need to be read to calculate partition key.
|
||||||
Names getColumnsRequiredForPartitionKey() const;
|
Names getColumnsRequiredForPartitionKey() const;
|
||||||
|
|
||||||
|
|
||||||
/// Returns structure with sorting key
|
/// Returns structure with sorting key.
|
||||||
const StorageMetadataKeyField & getSortingKey() const;
|
const StorageMetadataKeyField & getSortingKey() const;
|
||||||
/// Set sorting key for storage (methods bellow, are just wrappers for this
|
/// Set sorting key for storage (methods bellow, are just wrappers for this
|
||||||
/// struct)
|
/// struct).
|
||||||
void setSortingKey(const StorageMetadataKeyField & sorting_key_);
|
void setSortingKey(const StorageMetadataKeyField & sorting_key_);
|
||||||
/// Returns ASTExpressionList of sorting key expression for storage or nullptr if there is none.
|
/// Returns ASTExpressionList of sorting key expression for storage or nullptr if there is none.
|
||||||
ASTPtr getSortingKeyAST() const { return sorting_key.definition_ast; }
|
ASTPtr getSortingKeyAST() const { return sorting_key.definition_ast; }
|
||||||
/// Storage has sorting key
|
/// Storage has sorting key.
|
||||||
bool hasSortingKey() const;
|
bool hasSortingKey() const;
|
||||||
/// Returns column names that need to be read to calculate sorting key.
|
/// Returns column names that need to be read to calculate sorting key.
|
||||||
Names getColumnsRequiredForSortingKey() const;
|
Names getColumnsRequiredForSortingKey() const;
|
||||||
@ -474,16 +474,16 @@ public:
|
|||||||
/// expression. For example: 'a', 'x * y', 'toStartOfMonth(date)', etc.
|
/// expression. For example: 'a', 'x * y', 'toStartOfMonth(date)', etc.
|
||||||
Names getSortingKeyColumns() const;
|
Names getSortingKeyColumns() const;
|
||||||
|
|
||||||
/// Returns structure with primary key
|
/// Returns structure with primary key.
|
||||||
const StorageMetadataKeyField & getPrimaryKey() const;
|
const StorageMetadataKeyField & getPrimaryKey() const;
|
||||||
/// Set primary key for storage (methods bellow, are just wrappers for this
|
/// Set primary key for storage (methods bellow, are just wrappers for this
|
||||||
/// struct)
|
/// struct).
|
||||||
void setPrimaryKey(const StorageMetadataKeyField & primary_key_);
|
void setPrimaryKey(const StorageMetadataKeyField & primary_key_);
|
||||||
/// Returns ASTExpressionList of primary key expression for storage or nullptr if there is none.
|
/// Returns ASTExpressionList of primary key expression for storage or nullptr if there is none.
|
||||||
ASTPtr getPrimaryKeyAST() const { return primary_key.definition_ast; }
|
ASTPtr getPrimaryKeyAST() const { return primary_key.definition_ast; }
|
||||||
/// Storage has user-defined (in CREATE query) sorting key
|
/// Storage has user-defined (in CREATE query) sorting key.
|
||||||
bool isPrimaryKeyDefined() const;
|
bool isPrimaryKeyDefined() const;
|
||||||
/// Storage has primary key (maybe part of some other key)
|
/// Storage has primary key (maybe part of some other key).
|
||||||
bool hasPrimaryKey() const;
|
bool hasPrimaryKey() const;
|
||||||
/// Returns column names that need to be read to calculate primary key.
|
/// Returns column names that need to be read to calculate primary key.
|
||||||
Names getColumnsRequiredForPrimaryKey() const;
|
Names getColumnsRequiredForPrimaryKey() const;
|
||||||
@ -491,14 +491,14 @@ public:
|
|||||||
/// * y', 'toStartOfMonth(date)', etc.
|
/// * y', 'toStartOfMonth(date)', etc.
|
||||||
Names getPrimaryKeyColumns() const;
|
Names getPrimaryKeyColumns() const;
|
||||||
|
|
||||||
/// Returns structure with sampling key
|
/// Returns structure with sampling key.
|
||||||
const StorageMetadataKeyField & getSamplingKey() const;
|
const StorageMetadataKeyField & getSamplingKey() const;
|
||||||
/// Set sampling key for storage (methods bellow, are just wrappers for this
|
/// Set sampling key for storage (methods bellow, are just wrappers for this
|
||||||
/// struct)
|
/// struct).
|
||||||
void setSamplingKey(const StorageMetadataKeyField & sampling_key_);
|
void setSamplingKey(const StorageMetadataKeyField & sampling_key_);
|
||||||
/// Returns sampling expression AST for storage or nullptr if there is none.
|
/// Returns sampling expression AST for storage or nullptr if there is none.
|
||||||
ASTPtr getSamplingKeyAST() const { return sampling_key.definition_ast; }
|
ASTPtr getSamplingKeyAST() const { return sampling_key.definition_ast; }
|
||||||
/// Storage has sampling key
|
/// Storage has sampling key.
|
||||||
bool hasSamplingKey() const;
|
bool hasSamplingKey() const;
|
||||||
/// Returns column names that need to be read to calculate sampling key.
|
/// Returns column names that need to be read to calculate sampling key.
|
||||||
Names getColumnsRequiredForSampling() const;
|
Names getColumnsRequiredForSampling() const;
|
||||||
|
@ -152,14 +152,14 @@ MergeTreeData::MergeTreeData(
|
|||||||
|
|
||||||
if (metadata.sample_by_ast != nullptr)
|
if (metadata.sample_by_ast != nullptr)
|
||||||
{
|
{
|
||||||
StorageMetadataKeyField sampling_key = StorageMetadataKeyField::getKeyFromAST(metadata.sample_by_ast, getColumns(), global_context);
|
StorageMetadataKeyField candidate_sampling_key = StorageMetadataKeyField::getKeyFromAST(metadata.sample_by_ast, getColumns(), global_context);
|
||||||
|
|
||||||
const auto & primary_key = getPrimaryKey();
|
const auto & pk_sample_block = getPrimaryKey().sample_block;
|
||||||
if (!primary_key.sample_block.has(sampling_key.column_names[0])
|
if (!pk_sample_block.has(candidate_sampling_key.column_names[0]) && !attach
|
||||||
&& !attach && !settings->compatibility_allow_sampling_expression_not_in_primary_key) /// This is for backward compatibility.
|
&& !settings->compatibility_allow_sampling_expression_not_in_primary_key) /// This is for backward compatibility.
|
||||||
throw Exception("Sampling expression must be present in the primary key", ErrorCodes::BAD_ARGUMENTS);
|
throw Exception("Sampling expression must be present in the primary key", ErrorCodes::BAD_ARGUMENTS);
|
||||||
|
|
||||||
setSamplingKey(sampling_key);
|
setSamplingKey(candidate_sampling_key);
|
||||||
}
|
}
|
||||||
|
|
||||||
MergeTreeDataFormatVersion min_format_version(0);
|
MergeTreeDataFormatVersion min_format_version(0);
|
||||||
|
Loading…
Reference in New Issue
Block a user