Add docs. Add TEST version of KILL QUERY. [#CLICKHOUSE-2120]

This commit is contained in:
Vitaliy Lyudvichenko 2017-01-24 19:28:24 +03:00 committed by alexey-milovidov
parent 649fd1922b
commit 891437e531
10 changed files with 31 additions and 15 deletions

View File

@ -216,7 +216,7 @@ private:
/// Limit and counter for memory of all simultaneously running queries.
MemoryTracker total_memory_tracker;
/// Call under lock
/// Call under lock. Finds process with specified current_user and current_query_id.
ProcessListElement * tryGetProcessListElement(const String & current_query_id, const String & current_user);
public:
@ -265,7 +265,8 @@ public:
NotFound = 0, /// already cancelled
QueryIsNotInitializedYet = 1,
CancelCannotBeSended = 2,
CancelSended = 3
CancelSended = 3,
Unknown
};
/// Try call cancel() for input and output streams of query with specified id and user

View File

@ -8,7 +8,8 @@ class ASTKillQueryQuery : public ASTQueryWithOutput
{
public:
ASTPtr where_expression;
bool sync;
bool sync = false;
bool test = false;
ASTKillQueryQuery() = default;

View File

@ -3,6 +3,7 @@
#include <DB/Parsers/IParserBase.h>
#include <DB/Parsers/ExpressionElementParsers.h>
namespace DB
{

View File

@ -1 +0,0 @@

View File

@ -6,7 +6,7 @@
namespace DB
{
/** KILL QUERY WHERE <logical expression upon system.processes fields> [SYNC|ASYNC]
/** KILL QUERY WHERE <logical expression upon system.processes fields> [SYNC|ASYNC|TEST]
*/
class ParserKillQueryQuery : public IParserBase
{

View File

@ -115,12 +115,12 @@ public:
String getName() const override
{
return "SyncronizedQueryKiller";
return "SynchronousQueryKiller";
}
String getID() const override
{
return "SyncronizedQueryKiller_" + toString(this);
return "SynchronousQueryKiller_" + toString(this);
}
Block readImpl() override
@ -188,13 +188,13 @@ BlockIO InterpreterKillQueryQuery::execute()
res_io.in_sample = processes_block.cloneEmpty();
res_io.in_sample.insert(0, {std::make_shared<ColumnString>(), std::make_shared<DataTypeString>(), "kill_status"});
if (!query.sync)
if (!query.sync || query.test)
{
Block res = res_io.in_sample.cloneEmpty();
for (const auto & query_desc : queries_to_stop)
{
auto code = process_list.sendCancelToQuery(query_desc.query_id, query_desc.user);
auto code = (query.test) ? CancellationCode::Unknown : process_list.sendCancelToQuery(query_desc.query_id, query_desc.user);
insertResultRow(query_desc.source_num, code, processes_block, res);
}
@ -214,8 +214,6 @@ Block InterpreterKillQueryQuery::getSelectFromSystemProcessesResult()
String system_processes_query = "SELECT query_id, user, query FROM system.processes WHERE "
+ queryToString(static_cast<ASTKillQueryQuery &>(*query_ptr).where_expression);
// std::cerr << "executing: " << system_processes_query << "\n";
BlockIO system_processes_io = executeQuery(system_processes_query, context, true);
Block res = system_processes_io.in->read();

View File

@ -15,7 +15,7 @@ void ASTKillQueryQuery::formatQueryImpl(const FormatSettings & settings, FormatS
if (where_expression)
where_expression->formatImpl(settings, state, frame);
settings.ostr << (sync ? " SYNC" : " ASYNC");
settings.ostr << " " << (test ? "TEST" : (sync ? "SYNC" : "ASYNC"));
}
}

View File

@ -46,13 +46,14 @@ bool ParserKillQueryQuery::parseImpl(Pos & pos, Pos end, ASTPtr & node, Pos & ma
ws.ignore(pos, end);
query->sync = false;
if (ParserString{"SYNC", true, true}.ignore(pos, end))
query->sync = true;
else if (ParserString{"ASYNC", true, true}.ignore(pos, end))
query->sync = false;
else if (ParserString{"TEST", true, true}.ignore(pos, end))
query->test = true;
else
expected = "[SYNC|ASYNC]";
expected = "[SYNC|ASYNC|TEST]";
ws.ignore(pos, end);

View File

@ -23,3 +23,4 @@ clickhouse-client -q "SELECT countIf(query = 'SELECT sleep(1) FROM system.number
clickhouse-client -q "KILL QUERY WHERE 0 ASYNC"
clickhouse-client -q "KILL QUERY WHERE 0 FORMAT TabSeparated"
clickhouse-client -q "KILL QUERY WHERE 0 SYNC FORMAT TabSeparated"
clickhouse-client -q "KILL QUERY WHERE 1 TEST" &>/dev/null

View File

@ -774,7 +774,6 @@ $ echo 'SELECT number FROM system.numbers LIMIT 10' | curl 'http://localhost:812
HTTP интерфейс позволяет передать внешние данные (внешние временные таблицы) для использования запроса. Подробнее смотрите раздел "Внешние данные для обработки запроса"
==JDBC драйвер==
Для ClickHouse существует официальный JDBC драйвер. Смотрите <a href="https://github.com/yandex/clickhouse-jdbc">здесь</a>.
@ -2304,6 +2303,21 @@ ORDER BY EventDate ASC
В других случаях использование звёздочки является издевательством над системой, так как вместо преимуществ столбцовой СУБД вы получаете недостатки. То есть использовать звёздочку не рекомендуется.
===KILL QUERY===
%%KILL QUERY WHERE expression_for_system.processes [SYNC|ASYNC|TEST] [FORMAT format]%%
Пытается завершить исполняющиеся в данный момент запросы.
Запросы для завершения выбираются из таблицы system.processes для которых выражение expression_for_system.processes истинно.
Readonly-пользователи могут совершать только свои запросы.
По-умолчанию используется асинхронный вариант запроса (ASYNC), который завершается не ожидая завершения запросов.
Синхронный вариант (SYNC) ожидает завершения всех запросов и построчно выводит информацию о процессах по ходу их завершения.
Ответ содержит колонку kill_status, которая может принимать следующие значения:
1. 'finished' - запрос успешно завершился;
2. 'waiting' - запросу отправлен сигнал завершения, ожидается его завершение;
3. остальные значения описывают причину невозможности завершения запроса.
Тестовый вариант запроса (TEST) только проверяет права пользователя и выводит список запросов для завершения.
</div>
<div class="island">
<h1>Внешние данные для обработки запроса</h1>