Hi, I got my Grafana connected to my MySQL DB and visualize one table using a panel.
This is the sample data I want to see as a graph on hourly basis:
SELECT server_name, stat_dtm, cpu_max_usage, memory_max_usage FROM mytable where stat_type = 60;
So I wrote the following query in Grafana panel page as below. I will set server_name value as the names of the servers I want to show.
select *
from (
select unix_timestamp(str_to_date(stat_dtm,'%Y%m%d%H%i%s')) 'time', server_name, CPU_MAX_USAGE, MEMORY_MAX_USAGE
from mytable
where stat_type = 60 and server_name = 'servername'
) as t
where $__timeFilter(time)
ORDER BY time
But what I see where the graph has to show up is ‘Data does not have a time field’, even though I set the name of timestamp as time. What am I missing to properly show the data? Thanks in advance.
have you tried changing this option
from time series to table
btw why do you need nested query for that?
cant you use this?
and even if I need to use nested query on that
I would love to avoid SELECT *
and use column names instead
SELECT STR_TO_DATE(stat_dtm,'%Y-%m-%d %H:%i:%s') AS 'time',
server_name,
CPU_MAX_USAGE,
MEMORY_MAX_USAGE
FROM mytable
WHERE $__timeFilter(STR_TO_DATE(stat_dtm,'%Y-%m-%d %H:%i:%s'))
AND stat_type = 60
AND server_name = 'servername'
2 Likes
The reason why I nested the query was that the panel said there was no time field even though I set the column name of timestamp as ‘time’; so I tried to make the table itself in FROM clause have ‘time’ column .
hmm hmm…
let me know if my query above doesnt work
1 Like
The query that Grafana generated using yours is as below; checked the log and it said "Error 1582: Incorrect parameter count in the call to native function 'STR_TO_DATE'"
, the problem is that Grafana did not parse $__timeFilter()
correctly. This is where I had nested my weird query, to pass ‘time’ as the parameter of $__timeFilter()
not STR_TO_DATE()
. Think I have to work on this more…
SELECT STR_TO_DATE(stat_dtm,'%Y-%m-%d %H:%i:%s') AS 'time',
server_name,
CPU_MAX_USAGE,
MEMORY_MAX_USAGE
FROM mytable
WHERE STR_TO_DATE(stat_dtm BETWEEN FROM_UNIXTIME(1624303700) AND FROM_UNIXTIME(1624325300))
AND stat_type = 60
AND server_name = 'servername'
Thank you though, I really appreciate your comment.
try casting it as DATETIME
WHERE $__timeFilter(CAST(STR_TO_DATE(stat_dtm,'%Y-%m-%d %H:%i:%s') AS DATETIME))
or you can use this
WHERE STR_TO_DATE(stat_dtm,'%Y-%m-%d %H:%i:%s') BETWEEN FROM_UNIXTIME($__unixEpochFrom()) AND FROM_UNIXTIME($__unixEpochTo())
$__unixEpochFrom() and $__unixEpochTo() are functions to get date selection
the str to date format will depend on your string,
maybe yours fit more than mine: ‘%Y%m%d%H%i%s’
2 Likes
Buddy I appreciate it so much! I tested the second one you proposed, and I tried $__timeFrom()
and $__timeTo()
instead. I did not have to use $__timeFilter()
which cannot convert to the actual query correctly.
WHERE CAST(STR_TO_DATE(stat_dtm,‘%Y-%m-%d %H:%i:%s’) AS DATETIME) between $__timeFrom() AND $__timeTo()
So all I have to do now is just to set the time range and it is not a hard job at all. Your comment help me solve this problem. Hope you to enjoy your day.
For those who read this:
If you put some functions in $__timeFilter()
like $__timeFilter(fn(param))
, Grafana might convert it to fn(param BETWEEN FROM_UNIXTIME(<from>) AND FROM_UNIXTIME(<to>))
, not fn(param) BETWEEN FROM_UNIXTIME(<from>) AND FROM_UNIXTIME(<to>)
. So I recommend to use $__timeFrom()
and $__timeTo()
instead.
1 Like
if you look at the generated SQL
what is the result of $__timeFrom() AND $__timeTo()
?
*I didnt know that function haha - thanks for this new tips
I always use $__unixEpochFrom()
and then convert it to normal date haha
This is the WHERE clause I entered,
(STR_TO_DATE(stat_dtm,‘%Y%m%d%H%i%s’) between $__timeFrom() AND $__timeTo())
and this the converted one I get in the query inspector.
(STR_TO_DATE(stat_dtm,‘%Y%m%d%H%i%s’) between FROM_UNIXTIME(1619794800) AND FROM_UNIXTIME(1622473199))
Each function retrieves starting and finishing timestamps in the selected time range. The unix times above are 2021-05-01 00:00:00
and 2021-05-31 23:59:59
, respectively.
1 Like