forked from ClickHouse/ClickHouse
-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathManifestFilesPruning.h
More file actions
65 lines (49 loc) · 1.7 KB
/
ManifestFilesPruning.h
File metadata and controls
65 lines (49 loc) · 1.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#pragma once
#include "config.h"
#include <Core/NamesAndTypes.h>
#include <Parsers/IAST_fwd.h>
#include <Interpreters/ActionsDAG.h>
#include <Storages/ObjectStorage/DataLakes/Iceberg/SchemaProcessor.h>
#include <Storages/KeyDescription.h>
#include <Storages/MergeTree/KeyCondition.h>
namespace DB::Iceberg
{
enum class PruningReturnStatus
{
NOT_PRUNED,
PARTITION_PRUNED,
MIN_MAX_INDEX_PRUNED
};
}
#if USE_AVRO
namespace DB::Iceberg
{
struct ManifestFileEntry;
class ManifestFileContent;
DB::ASTPtr getASTFromTransform(const String & transform_name_src, const String & column_name, const String & time_zone);
/// Prune specific data files based on manifest content
class ManifestFilesPruner
{
private:
const IcebergSchemaProcessor & schema_processor;
Int32 current_schema_id;
Int32 initial_schema_id;
const DB::KeyDescription * partition_key;
std::optional<DB::KeyCondition> partition_key_condition;
std::unordered_map<Int32, DB::KeyCondition> min_max_key_conditions;
/// NOTE: tricky part to support RENAME column.
/// Takes ActionDAG representation of user's WHERE expression and
/// rename columns to the their origina numeric ID's in iceberg
std::unique_ptr<DB::ActionsDAG> transformFilterDagForManifest(const DB::ActionsDAG * source_dag, std::vector<Int32> & used_columns_in_filter) const;
public:
ManifestFilesPruner(
const IcebergSchemaProcessor & schema_processor_,
Int32 current_schema_id_,
Int32 initial_schema_id_,
const DB::ActionsDAG * filter_dag,
const ManifestFileContent & manifest_file,
DB::ContextPtr context);
PruningReturnStatus canBePruned(const ManifestFileEntry & entry) const;
};
}
#endif