#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace DB { template <> struct NearestFieldTypeImpl { using Type = UInt64; }; Block QueryLogElement::createBlock() { auto query_status_datatype = std::make_shared( DataTypeEnum8::Values { {"QueryStart", static_cast(QUERY_START)}, {"QueryFinish", static_cast(QUERY_FINISH)}, {"ExceptionBeforeStart", static_cast(EXCEPTION_BEFORE_START)}, {"ExceptionWhileProcessing", static_cast(EXCEPTION_WHILE_PROCESSING)} }); return { {std::move(query_status_datatype), "type"}, {std::make_shared(), "event_date"}, {std::make_shared(), "event_time"}, {std::make_shared(), "query_start_time"}, {std::make_shared(), "query_duration_ms"}, {std::make_shared(), "read_rows"}, {std::make_shared(), "read_bytes"}, {std::make_shared(), "written_rows"}, {std::make_shared(), "written_bytes"}, {std::make_shared(), "result_rows"}, {std::make_shared(), "result_bytes"}, {std::make_shared(), "memory_usage"}, {std::make_shared(), "query"}, {std::make_shared(), "exception"}, {std::make_shared(), "stack_trace"}, {std::make_shared(), "is_initial_query"}, {std::make_shared(), "user"}, {std::make_shared(), "query_id"}, {DataTypeFactory::instance().get("IPv6"), "address"}, {std::make_shared(), "port"}, {std::make_shared(), "initial_user"}, {std::make_shared(), "initial_query_id"}, {DataTypeFactory::instance().get("IPv6"), "initial_address"}, {std::make_shared(), "initial_port"}, {std::make_shared(), "interface"}, {std::make_shared(), "os_user"}, {std::make_shared(), "client_hostname"}, {std::make_shared(), "client_name"}, {std::make_shared(), "client_revision"}, {std::make_shared(), "client_version_major"}, {std::make_shared(), "client_version_minor"}, {std::make_shared(), "client_version_patch"}, {std::make_shared(), "http_method"}, {std::make_shared(), "http_user_agent"}, {std::make_shared(), "quota_key"}, {std::make_shared(), "revision"}, {std::make_shared(std::make_shared()), "thread_numbers"}, {std::make_shared(std::make_shared()), "os_thread_ids"}, {std::make_shared(std::make_shared()), "ProfileEvents.Names"}, {std::make_shared(std::make_shared()), "ProfileEvents.Values"}, {std::make_shared(std::make_shared()), "Settings.Names"}, {std::make_shared(std::make_shared()), "Settings.Values"} }; } void QueryLogElement::appendToBlock(Block & block) const { MutableColumns columns = block.mutateColumns(); size_t i = 0; columns[i++]->insert(type); columns[i++]->insert(DateLUT::instance().toDayNum(event_time)); columns[i++]->insert(event_time); columns[i++]->insert(query_start_time); columns[i++]->insert(query_duration_ms); columns[i++]->insert(read_rows); columns[i++]->insert(read_bytes); columns[i++]->insert(written_rows); columns[i++]->insert(written_bytes); columns[i++]->insert(result_rows); columns[i++]->insert(result_bytes); columns[i++]->insert(memory_usage); columns[i++]->insertData(query.data(), query.size()); columns[i++]->insertData(exception.data(), exception.size()); columns[i++]->insertData(stack_trace.data(), stack_trace.size()); appendClientInfo(client_info, columns, i); columns[i++]->insert(ClickHouseRevision::get()); { Array threads_array; threads_array.reserve(thread_numbers.size()); for (const UInt32 thread_number : thread_numbers) threads_array.emplace_back(UInt64(thread_number)); columns[i++]->insert(threads_array); } { Array threads_array; threads_array.reserve(os_thread_ids.size()); for (const UInt32 thread_number : os_thread_ids) threads_array.emplace_back(UInt64(thread_number)); columns[i++]->insert(threads_array); } if (profile_counters) { auto column_names = columns[i++].get(); auto column_values = columns[i++].get(); ProfileEvents::dumpToArrayColumns(*profile_counters, column_names, column_values, true); } else { columns[i++]->insertDefault(); columns[i++]->insertDefault(); } if (query_settings) { auto column_names = columns[i++].get(); auto column_values = columns[i++].get(); query_settings->dumpToArrayColumns(column_names, column_values, true); } else { columns[i++]->insertDefault(); columns[i++]->insertDefault(); } block.setColumns(std::move(columns)); } void QueryLogElement::appendClientInfo(const ClientInfo & client_info, MutableColumns & columns, size_t & i) { columns[i++]->insert(client_info.query_kind == ClientInfo::QueryKind::INITIAL_QUERY); columns[i++]->insert(client_info.current_user); columns[i++]->insert(client_info.current_query_id); columns[i++]->insertData(IPv6ToBinary(client_info.current_address.host()).data(), 16); columns[i++]->insert(client_info.current_address.port()); columns[i++]->insert(client_info.initial_user); columns[i++]->insert(client_info.initial_query_id); columns[i++]->insertData(IPv6ToBinary(client_info.initial_address.host()).data(), 16); columns[i++]->insert(client_info.initial_address.port()); columns[i++]->insert(UInt64(client_info.interface)); columns[i++]->insert(client_info.os_user); columns[i++]->insert(client_info.client_hostname); columns[i++]->insert(client_info.client_name); columns[i++]->insert(client_info.client_revision); columns[i++]->insert(client_info.client_version_major); columns[i++]->insert(client_info.client_version_minor); columns[i++]->insert(client_info.client_version_patch); columns[i++]->insert(UInt64(client_info.http_method)); columns[i++]->insert(client_info.http_user_agent); columns[i++]->insert(client_info.quota_key); } }