Как получить пользовательскую переменную MySQL / MariaDB, работающую в графане? - PullRequest
0 голосов
/ 10 апреля 2020

Используя MariaDB 5.5 (наша база данных cdr asterisk) и пытаясь построить временной ряд по дате из существующих данных в базе данных, но хотите присоединиться к столбцу всех дат, чтобы учесть дни без данных. Следующий запрос (упрощенный) работает в MySQL Workbench, чтобы получить список всех дат за последние 180 дней, но в графане я получаю синтаксическую ошибку.

SET @i = -1;

SELECT DATE(DATE_ADD(DATE_ADD(CURRENT_DATE(), INTERVAL -180 DAY), INTERVAL @i:=@i+1 DAY)) AS date
FROM queuestats
HAVING 
@i < DATEDIFF(CURRENT_DATE(), DATE_ADD(CURRENT_DATE(), INTERVAL -180 DAY))
;

Я получаю сообщение об ошибке: следующим образом:

Ошибка 1064: в синтаксисе SQL возникла ошибка; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом с 'SELECT DATE (DATE_ADD (DATE_ADD (CURRENT_DATE (), INTERVAL -180 DAY), INTERVAL @i: = @' в строке 3

* 1008) *

Кажется, что возникает проблема с ключевым словом 'SET', так как я не получаю ошибок, но также не возвращаю данные, если я просто удаляю первую строку из запроса. Я протестировал этот синтаксис для обоих этих MariaDB, и отдельная база данных MySQL, и происходит то же самое. Чтобы упростить еще больше, я получаю ту же ошибку даже со следующим запросом:

SET @i = -1;
SELECT CURRENT_DATE() AS time;

Кто-нибудь имеет какое-либо представление о том, почему графана не ' Вам нравится ключевое слово SET? Или как получить список дат между двумя датами без использования переменной?

Заранее спасибо.

1 Ответ

0 голосов
/ 11 апреля 2020

Из-за соображений безопасности (в основном SQL внедрение) по умолчанию MariaDB (а также MySQL) не принимает несколько операторов, разделенных точкой с запятой, если вы явно не включите эту опцию (в C -API вы это можно сделать, установив флаг CLIENT_MULTI_STATEMENTS, в PHP / mysqli есть отдельный вызов API mysqli_multi_query()) - однако я не знаю, есть ли у Grafana возможность поддерживать несколько операторов.

...