eldenmoon commented on code in PR #63192:
URL: https://github.com/apache/doris/pull/63192#discussion_r3231360614


##########
be/src/format/parquet/vparquet_column_reader.h:
##########
@@ -460,6 +463,61 @@ class StructColumnReader : public ParquetColumnReader {
     //Need to use vector instead of set,see `get_rep_level()` for the reason.
 };
 
+class VariantColumnReader : public ParquetColumnReader {
+    ENABLE_FACTORY_CREATOR(VariantColumnReader)
+public:
+    VariantColumnReader(const RowRanges& row_ranges, size_t total_rows, const 
cctz::time_zone* ctz,
+                        io::IOContext* io_ctx)
+            : ParquetColumnReader(row_ranges, total_rows, ctz, io_ctx) {}
+    ~VariantColumnReader() override { close(); }
+
+    Status init(io::FileReaderSPtr file, FieldSchema* field, const 
tparquet::RowGroup& row_group,
+                size_t max_buf_size, std::unordered_map<int, 
tparquet::OffsetIndex>& col_offsets,
+                RuntimeState* state, bool in_collection, const 
std::set<uint64_t>& column_ids,
+                const std::set<uint64_t>& filter_column_ids);
+    Status read_column_data(ColumnPtr& doris_column, const DataTypePtr& type,
+                            const 
std::shared_ptr<TableSchemaChangeHelper::Node>& root_node,
+                            FilterMap& filter_map, size_t batch_size, size_t* 
read_rows, bool* eof,
+                            bool is_dict_filter, int64_t real_column_size = 
-1) override;
+
+    const std::vector<level_t>& get_rep_level() const override {
+        return _struct_reader->get_rep_level();
+    }
+    const std::vector<level_t>& get_def_level() const override {
+        return _struct_reader->get_def_level();
+    }
+    ColumnStatistics column_statistics() override { return 
_struct_reader->column_statistics(); }
+    void close() override {}
+
+    void reset_filter_map_index() override { 
_struct_reader->reset_filter_map_index(); }
+
+private:
+    Status _variant_to_json(const FieldSchema& variant_field, const Field& 
field,
+                            const std::string* inherited_metadata, 
std::string* json,
+                            bool* present) const;
+    Status _typed_value_to_json(const FieldSchema& typed_value_field, const 
Field& field,
+                                const std::string& metadata, std::string* json,
+                                bool* present) const;
+    Status _shredded_field_to_json(const FieldSchema& field_schema, const 
Field& field,
+                                   const std::string& metadata, std::string* 
json,
+                                   bool* present) const;
+    Status _typed_struct_to_json(const FieldSchema& typed_value_field, const 
Field& field,
+                                 const std::string& metadata, std::string* 
json) const;
+    Status _typed_array_to_json(const FieldSchema& typed_value_field, const 
Field& field,
+                                const std::string& metadata, std::string* 
json) const;
+    Status _field_to_json(const FieldSchema& field_schema, const Field& field, 
std::string* json,
+                          bool* present) const;
+    Status _array_field_to_json(const FieldSchema& field_schema, const Field& 
field,
+                                const DataTypeArray* array_type, std::string* 
json) const;
+    Status _struct_field_to_json(const FieldSchema& field_schema, const Field& 
field,
+                                 std::string* json) const;
+    Status _get_binary_field(const Field& field, std::string* value, bool* 
present) const;
+
+    std::unique_ptr<FieldSchema> _variant_struct_field;
+    DataTypePtr _variant_struct_type;

Review Comment:
   为什么要引入一个struct type, 不引入有什么问题



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to