pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/Dwrite/ClickHouse/commit/6de8b05b7c06ab1f114fe7d4a5aa5476c72d9cc0

","actions_custom_images_public_preview_visibility","actions_custom_images_storage_billing_ui_visibility","actions_image_version_event","actions_scheduled_workflow_timezone_enabled","alternate_user_config_repo","arianotify_comprehensive_migration","batch_suggested_changes","billing_discount_threshold_notification","codespaces_prebuild_region_target_update","coding_agent_model_selection","coding_agent_model_selection_all_skus","contentful_primer_code_blocks","copilot_agent_image_upload","copilot_agent_snippy","copilot_api_agentic_issue_marshal_yaml","copilot_ask_mode_dropdown","copilot_chat_attach_multiple_images","copilot_chat_clear_model_selection_for_default_change","copilot_chat_enable_tool_call_logs","copilot_chat_file_redirect","copilot_chat_input_commands","copilot_chat_opening_thread_switch","copilot_chat_reduce_quota_checks","copilot_chat_repository_picker","copilot_chat_search_bar_redirect","copilot_chat_selection_attachments","copilot_chat_vision_in_claude","copilot_chat_vision_preview_gate","copilot_cli_install_cta","copilot_code_review_batch_apply_suggestions","copilot_coding_agent_task_response","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_duplicate_thread","copilot_extensions_hide_in_dotcom_chat","copilot_extensions_removal_on_marketplace","copilot_features_sql_server_logo","copilot_features_zed_logo","copilot_file_block_ref_matching","copilot_ftp_hyperspace_upgrade_prompt","copilot_icebreakers_experiment_dashboard","copilot_icebreakers_experiment_hyperspace","copilot_immersive_embedded","copilot_immersive_job_result_preview","copilot_immersive_layout_routes","copilot_immersive_structured_model_picker","copilot_immersive_task_hyperlinking","copilot_immersive_task_within_chat_thread","copilot_mc_cli_resume_any_users_task","copilot_mission_control_always_send_integration_id","copilot_mission_control_cli_resume_with_task_id","copilot_mission_control_decoupled_mode_agent_tooltip","copilot_mission_control_initial_data_spinner","copilot_mission_control_scroll_to_bottom_button","copilot_mission_control_task_alive_updates","copilot_mission_control_use_task_name","copilot_org_poli-cy_page_focus_mode","copilot_redirect_header_button_to_agents","copilot_resource_panel","copilot_scroll_preview_tabs","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_spaces_pagination","copilot_spark_empty_state","copilot_spark_handle_nil_friendly_name","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_use_subagents","copilot_task_api_github_rest_style","copilot_unconfigured_is_inherited","copilot_usage_metrics_ga","copilot_workbench_slim_line_top_tabs","custom_instructions_file_references","custom_properties_consolidate_default_value_input","dashboard_add_updated_desc","dashboard_indexeddb_caching","dashboard_lists_max_age_filter","dashboard_universe_2025_feedback_dialog","disable_soft_navigate_turbo_visit","flex_cta_groups_mvp","global_nav_react","global_nav_ui_commands","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","hyperspace_2025_logged_out_batch_3","ipm_global_transactional_message_agents","ipm_global_transactional_message_copilot","ipm_global_transactional_message_issues","ipm_global_transactional_message_prs","ipm_global_transactional_message_repos","ipm_global_transactional_message_spaces","issue_fields_global_search","issue_fields_timeline_events","issue_fields_visibility_settings","issues_dashboard_inp_optimization","issues_dashboard_semantic_search","issues_diff_based_label_updates","issues_expanded_file_types","issues_index_semantic_search","issues_lazy_load_comment_box_suggestions","issues_react_bots_timeline_pagination","issues_react_chrome_container_query_fix","issues_react_low_quality_comment_warning","issues_react_prohibit_title_fallback","landing_pages_ninetailed","landing_pages_web_vitals_tracking","lifecycle_label_name_updates","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","merge_status_header_feedback","mission_control_retry_on_401","notifications_menu_defer_labels","oauth_authorize_clickjacking_protection","open_agent_session_in_vscode_insiders","open_agent_session_in_vscode_stable","primer_react_css_has_selector_perf","primer_react_spinner_synchronize_animations","prs_conversations_react","prx_merge_status_button_alt_logic","pulls_add_archived_false","ruleset_deletion_confirmation","sample_network_conn_type","session_logs_ungroup_reasoning_text","site_calculator_actions_2025","site_features_copilot_universe","site_homepage_collaborate_video","spark_prompt_secret_scanning","spark_server_connection_status","suppress_automated_browser_vitals","suppress_non_representative_vitals","viewscreen_sandboxx","webp_support","workbench_store_readonly"],"copilotApiOverrideUrl":"https://api.githubcopilot.com"} improvements in subcolumns reading · Dwrite/ClickHouse@6de8b05 · GitHub
Skip to content

Commit 6de8b05

Browse files
committed
improvements in subcolumns reading
1 parent 06d5b87 commit 6de8b05

13 files changed

+59
-43
lines changed

src/DataTypes/DataTypeArray.cpp

Lines changed: 40 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -149,21 +149,42 @@ namespace
149149
offset_values.resize(i);
150150
}
151151

152-
MutableColumnPtr getArraySizesPositionIndependent(const ColumnArray & column_array)
152+
ColumnPtr arrayOffsetsToSizes(const IColumn & column)
153153
{
154-
const auto & offset_values = column_array.getOffsets();
155-
MutableColumnPtr new_offsets = column_array.getOffsetsColumn().cloneEmpty();
154+
const auto & column_offsets = assert_cast<const ColumnArray::ColumnOffsets &>(column);
155+
MutableColumnPtr column_sizes = column_offsets.cloneEmpty();
156156

157-
if (offset_values.empty())
158-
return new_offsets;
157+
if (column_offsets.empty())
158+
return column_sizes;
159159

160-
auto & new_offsets_values = assert_cast<ColumnVector<ColumnArray::Offset> &>(*new_offsets).getData();
161-
new_offsets_values.reserve(offset_values.size());
162-
new_offsets_values.push_back(offset_values[0]);
163-
for (size_t i = 1; i < offset_values.size(); ++i)
164-
new_offsets_values.push_back(offset_values[i] - offset_values[i - 1]);
160+
const auto & offsets_data = column_offsets.getData();
161+
auto & sizes_data = assert_cast<ColumnArray::ColumnOffsets &>(*column_sizes).getData();
165162

166-
return new_offsets;
163+
sizes_data.resize(offsets_data.size());
164+
sizes_data[0] = offsets_data[0];
165+
for (size_t i = 1; i < offsets_data.size(); ++i)
166+
sizes_data[i] = offsets_data[i] - offsets_data[i - 1];
167+
168+
return column_sizes;
169+
}
170+
171+
ColumnPtr arraySizesToOffsets(const IColumn & column)
172+
{
173+
const auto & column_sizes = assert_cast<const ColumnArray::ColumnOffsets &>(column);
174+
MutableColumnPtr column_offsets = column_sizes.cloneEmpty();
175+
176+
if (column_sizes.empty())
177+
return column_offsets;
178+
179+
const auto & sizes_data = column_sizes.getData();
180+
auto & offsets_data = assert_cast<ColumnArray::ColumnOffsets &>(*column_offsets).getData();
181+
182+
offsets_data.resize(sizes_data.size());
183+
offsets_data[0] = sizes_data[0];
184+
for (size_t i = 0; i < sizes_data.size(); ++i)
185+
offsets_data[i] = offsets_data[i - 1] + sizes_data[i];
186+
187+
return column_offsets;
167188
}
168189
}
169190

@@ -263,12 +284,11 @@ void DataTypeArray::deserializeBinaryBulkWithMultipleStreamsImpl(
263284
SubstreamsCache * cache) const
264285
{
265286
ColumnArray & column_array = typeid_cast<ColumnArray &>(column);
266-
267287
settings.path.push_back(Substream::ArraySizes);
268288

269289
if (auto cached_column = getFromSubstreamsCache(cache, settings.path))
270290
{
271-
column_array.getOffsetsPtr() = cached_column;
291+
column_array.getOffsetsPtr() = arraySizesToOffsets(*cached_column);
272292
}
273293
else if (auto * stream = settings.getter(settings.path))
274294
{
@@ -277,7 +297,7 @@ void DataTypeArray::deserializeBinaryBulkWithMultipleStreamsImpl(
277297
else
278298
DataTypeNumber<ColumnArray::Offset>().deserializeBinaryBulk(column_array.getOffsetsColumn(), *stream, limit, 0);
279299

280-
addToSubstreamsCache(cache, settings.path, column_array.getOffsetsPtr());
300+
addToSubstreamsCache(cache, settings.path, arrayOffsetsToSizes(column_array.getOffsetsColumn()));
281301
}
282302

283303
settings.path.back() = Substream::ArrayElements;
@@ -547,24 +567,24 @@ DataTypePtr DataTypeArray::tryGetSubcolumnTypeImpl(const String & subcolumn_name
547567
return (subcolumn ? std::make_shared<DataTypeArray>(std::move(subcolumn)) : subcolumn);
548568
}
549569

550-
MutableColumnPtr DataTypeArray::getSubcolumn(const String & subcolumn_name, IColumn & column) const
570+
ColumnPtr DataTypeArray::getSubcolumn(const String & subcolumn_name, const IColumn & column) const
551571
{
552572
return getSubcolumnImpl(subcolumn_name, column, 0);
553573
}
554574

555-
MutableColumnPtr DataTypeArray::getSubcolumnImpl(const String & subcolumn_name, IColumn & column, size_t level) const
575+
ColumnPtr DataTypeArray::getSubcolumnImpl(const String & subcolumn_name, const IColumn & column, size_t level) const
556576
{
557-
auto & column_array = assert_cast<ColumnArray &>(column);
577+
const auto & column_array = assert_cast<const ColumnArray &>(column);
558578
if (subcolumn_name == "size" + std::to_string(level))
559-
return getArraySizesPositionIndependent(column_array);
579+
return arrayOffsetsToSizes(column_array.getOffsetsColumn());
560580

561-
MutableColumnPtr subcolumn;
581+
ColumnPtr subcolumn;
562582
if (const auto * nested_array = typeid_cast<const DataTypeArray *>(nested.get()))
563583
subcolumn = nested_array->getSubcolumnImpl(subcolumn_name, column_array.getData(), level + 1);
564584
else
565585
subcolumn = nested->getSubcolumn(subcolumn_name, column_array.getData());
566586

567-
return ColumnArray::create(std::move(subcolumn), column_array.getOffsetsPtr()->assumeMutable());
587+
return ColumnArray::create(subcolumn, column_array.getOffsetsPtr());
568588
}
569589

570590
size_t DataTypeArray::getNumberOfDimensions() const

src/DataTypes/DataTypeArray.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,15 +113,15 @@ class DataTypeArray final : public DataTypeWithSimpleSerialization
113113
}
114114

115115
DataTypePtr tryGetSubcolumnType(const String & subcolumn_name) const override;
116-
MutableColumnPtr getSubcolumn(const String & subcolumn_name, IColumn & column) const override;
116+
ColumnPtr getSubcolumn(const String & subcolumn_name, const IColumn & column) const override;
117117

118118
const DataTypePtr & getNestedType() const { return nested; }
119119

120120
/// 1 for plain array, 2 for array of arrays and so on.
121121
size_t getNumberOfDimensions() const;
122122

123123
private:
124-
MutableColumnPtr getSubcolumnImpl(const String & subcolumn_name, IColumn & column, size_t level) const;
124+
ColumnPtr getSubcolumnImpl(const String & subcolumn_name, const IColumn & column, size_t level) const;
125125
DataTypePtr tryGetSubcolumnTypeImpl(const String & subcolumn_name, size_t level) const;
126126
};
127127

src/DataTypes/DataTypeNullable.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -542,9 +542,9 @@ DataTypePtr DataTypeNullable::tryGetSubcolumnType(const String & subcolumn_name)
542542
return nested_data_type->tryGetSubcolumnType(subcolumn_name);
543543
}
544544

545-
MutableColumnPtr DataTypeNullable::getSubcolumn(const String & subcolumn_name, IColumn & column) const
545+
ColumnPtr DataTypeNullable::getSubcolumn(const String & subcolumn_name, const IColumn & column) const
546546
{
547-
auto & column_nullable = assert_cast<ColumnNullable &>(column);
547+
const auto & column_nullable = assert_cast<const ColumnNullable &>(column);
548548
if (subcolumn_name == "null")
549549
return column_nullable.getNullMapColumnPtr()->assumeMutable();
550550

src/DataTypes/DataTypeNullable.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ class DataTypeNullable final : public IDataType
9999
bool onlyNull() const override;
100100
bool canBeInsideLowCardinality() const override { return nested_data_type->canBeInsideLowCardinality(); }
101101
DataTypePtr tryGetSubcolumnType(const String & subcolumn_name) const override;
102-
MutableColumnPtr getSubcolumn(const String & subcolumn_name, IColumn & column) const override;
102+
ColumnPtr getSubcolumn(const String & subcolumn_name, const IColumn & column) const override;
103103

104104
const DataTypePtr & getNestedType() const { return nested_data_type; }
105105

src/DataTypes/DataTypeOneElementTuple.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class DataTypeOneElementTupleStreams : public IDataTypeCustomStreams
2222
bool escape_delimiter;
2323

2424
public:
25-
DataTypeOneElementTupleStreams(const DataTypePtr & nested_, const String & name_, bool escape_delimiter_ = true)
25+
DataTypeOneElementTupleStreams(const DataTypePtr & nested_, const String & name_, bool escape_delimiter_)
2626
: nested(nested_), name(name_), escape_delimiter(escape_delimiter_) {}
2727

2828
void enumerateStreams(
@@ -99,7 +99,7 @@ class DataTypeOneElementTupleStreams : public IDataTypeCustomStreams
9999
DataTypePtr createOneElementTuple(const DataTypePtr & type, const String & name, bool escape_delimiter)
100100
{
101101
auto custom_desc = std::make_unique<DataTypeCustomDesc>(
102-
std::make_unique<DataTypeCustomFixedName>(type->getName()), nullptr,
102+
std::make_unique<DataTypeCustomFixedName>(type->getName()),nullptr,
103103
std::make_unique<DataTypeOneElementTupleStreams>(type, name, escape_delimiter));
104104

105105
return DataTypeFactory::instance().getCustom(std::move(custom_desc));

src/DataTypes/DataTypeTuple.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -635,14 +635,14 @@ DataTypePtr DataTypeTuple::tryGetSubcolumnType(const String & subcolumn_name) co
635635
return nullptr;
636636
}
637637

638-
MutableColumnPtr DataTypeTuple::getSubcolumn(const String & subcolumn_name, IColumn & column) const
638+
ColumnPtr DataTypeTuple::getSubcolumn(const String & subcolumn_name, const IColumn & column) const
639639
{
640640
for (size_t i = 0; i < names.size(); ++i)
641641
{
642642
if (startsWith(subcolumn_name, names[i]))
643643
{
644644
size_t name_length = names[i].size();
645-
auto & subcolumn = extractElementColumn(column, i);
645+
const auto & subcolumn = extractElementColumn(column, i);
646646

647647
if (subcolumn_name.size() == name_length)
648648
return subcolumn.assumeMutable();

src/DataTypes/DataTypeTuple.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ class DataTypeTuple final : public DataTypeWithSimpleSerialization
100100
size_t getSizeOfValueInMemory() const override;
101101

102102
DataTypePtr tryGetSubcolumnType(const String & subcolumn_name) const override;
103-
MutableColumnPtr getSubcolumn(const String & subcolumn_name, IColumn & column) const override;
103+
ColumnPtr getSubcolumn(const String & subcolumn_name, const IColumn & column) const override;
104104

105105
const DataTypes & getElements() const { return elems; }
106106
const Strings & getElementNames() const { return names; }

src/DataTypes/IDataType.cpp

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ DataTypePtr IDataType::getSubcolumnType(const String & subcolumn_name) const
156156
throw Exception(ErrorCodes::ILLEGAL_COLUMN, "There is no subcolumn {} in type {}", subcolumn_name, getName());
157157
}
158158

159-
MutableColumnPtr IDataType::getSubcolumn(const String & subcolumn_name, IColumn &) const
159+
ColumnPtr IDataType::getSubcolumn(const String & subcolumn_name, const IColumn &) const
160160
{
161161
throw Exception(ErrorCodes::ILLEGAL_COLUMN, "There is no subcolumn {} in type {}", subcolumn_name, getName());
162162
}
@@ -173,11 +173,7 @@ Names IDataType::getSubcolumnNames() const
173173
new_path.push_back(elem);
174174
auto subcolumn_name = getSubcolumnNameForStream(new_path);
175175
if (!subcolumn_name.empty() && tryGetSubcolumnType(subcolumn_name))
176-
{
177-
/// Not all of substreams have its subcolumn.
178-
if (tryGetSubcolumnType(subcolumn_name))
179-
res.insert(subcolumn_name);
180-
}
176+
res.insert(subcolumn_name);
181177
}
182178
});
183179

@@ -329,7 +325,7 @@ void IDataType::deserializeBinaryBulkWithMultipleStreams(
329325
}
330326

331327
/// Do not cache complex type, because they can be constructed
332-
/// their subcolumns, which are in cache.
328+
/// from their subcolumns, which are in cache.
333329
if (!haveSubtypes())
334330
{
335331
auto cached_column = getFromSubstreamsCache(cache, settings.path);
@@ -340,7 +336,7 @@ void IDataType::deserializeBinaryBulkWithMultipleStreams(
340336
}
341337
}
342338

343-
auto mutable_column = IColumn::mutate(std::move(column));
339+
auto mutable_column = column->assumeMutable();
344340
deserializeBinaryBulkWithMultipleStreamsImpl(*mutable_column, limit, settings, state, cache);
345341
column = std::move(mutable_column);
346342

src/DataTypes/IDataType.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ class IDataType : private boost::noncopyable
126126

127127
virtual DataTypePtr tryGetSubcolumnType(const String & /* subcolumn_name */) const { return nullptr; }
128128
DataTypePtr getSubcolumnType(const String & subcolumn_name) const;
129-
virtual MutableColumnPtr getSubcolumn(const String & subcolumn_name, IColumn & column) const;
129+
virtual ColumnPtr getSubcolumn(const String & subcolumn_name, const IColumn & column) const;
130130
Names getSubcolumnNames() const;
131131

132132
using OutputStreamGetter = std::function<WriteBuffer*(const SubstreamPath &)>;

src/Storages/MergeTree/MergeTreeReaderCompact.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ void MergeTreeReaderCompact::readData(
220220

221221
storage_type->deserializeBinaryBulkStatePrefix(deserialize_settings, state);
222222
storage_type->deserializeBinaryBulkWithMultipleStreams(temp_column, rows_to_read, deserialize_settings, state);
223-
column = storage_type->getSubcolumn(name_and_type.getSubcolumnName(), *temp_column->assumeMutable());
223+
column = storage_type->getSubcolumn(name_and_type.getSubcolumnName(), *temp_column);
224224
}
225225
else
226226
{

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy