#include "Storages/ColumnsDescription.h" #include #include #include #include #include #include #include #include #include namespace DB { static String typeToString(FilesystemCacheLogElement::CacheType type) { switch (type) { case FilesystemCacheLogElement::CacheType::READ_FROM_CACHE: return "READ_FROM_CACHE"; case FilesystemCacheLogElement::CacheType::READ_FROM_FS_AND_DOWNLOADED_TO_CACHE: return "READ_FROM_FS_AND_DOWNLOADED_TO_CACHE"; case FilesystemCacheLogElement::CacheType::READ_FROM_FS_BYPASSING_CACHE: return "READ_FROM_FS_BYPASSING_CACHE"; case FilesystemCacheLogElement::CacheType::WRITE_THROUGH_CACHE: return "WRITE_THROUGH_CACHE"; } UNREACHABLE(); } ColumnsDescription FilesystemCacheLogElement::getColumnsDescription() { DataTypes types{ std::make_shared>(), std::make_shared>(), }; return ColumnsDescription { {"hostname", std::make_shared(std::make_shared()), "Hostname"}, {"event_date", std::make_shared(), "Event date"}, {"event_time", std::make_shared(), "Event time"}, {"query_id", std::make_shared(), "Id of the query"}, {"source_file_path", std::make_shared(), "File segment path on filesystem"}, {"file_segment_range", std::make_shared(types), "File segment range"}, {"total_requested_range", std::make_shared(types), "Full read range"}, {"key", std::make_shared(), "File segment key"}, {"offset", std::make_shared(), "File segment offset"}, {"size", std::make_shared(), "Read size"}, {"read_type", std::make_shared(), "Read type: READ_FROM_CACHE, READ_FROM_FS_AND_DOWNLOADED_TO_CACHE, READ_FROM_FS_BYPASSING_CACHE"}, {"read_from_cache_attempted", std::make_shared(), "Whether reading from cache was attempted"}, {"ProfileEvents", std::make_shared(std::make_shared(), std::make_shared()), "Profile events collected while reading this file segment"}, {"read_buffer_id", std::make_shared(), "Internal implementation read buffer id"}, }; } void FilesystemCacheLogElement::appendToBlock(MutableColumns & columns) const { size_t i = 0; columns[i++]->insert(getFQDNOrHostName()); columns[i++]->insert(DateLUT::instance().toDayNum(event_time).toUnderType()); columns[i++]->insert(event_time); columns[i++]->insert(query_id); columns[i++]->insert(source_file_path); columns[i++]->insert(Tuple{file_segment_range.first, file_segment_range.second}); columns[i++]->insert(Tuple{requested_range.first, requested_range.second}); columns[i++]->insert(file_segment_key); columns[i++]->insert(file_segment_offset); columns[i++]->insert(file_segment_size); columns[i++]->insert(typeToString(cache_type)); columns[i++]->insert(read_from_cache_attempted); if (profile_counters) { auto * column = columns[i++].get(); ProfileEvents::dumpToMapColumn(*profile_counters, column, true); } else { columns[i++]->insertDefault(); } columns[i++]->insert(read_buffer_id); } }