You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
So given 2 indexes, with a matching field (to be used in a JOIN) and a timestamp field. When querying without a join, a WHERE clause like WHERE t.timestamp > timestamp('2001-05-07 00:00:00') will work and WHERE t.timestamp > 0 won't work since it's a TIMESTAMP field, that's what opensearch tell you
{\n \"error\": {\n \"reason\": \"Invalid SQL query\",\n \"details\": \"> function expected {[BYTE,BYTE],[SHORT,SHORT],[INTEGER,INTEGER],[LONG,LONG],[FLOAT,FLOAT],[DOUBLE,DOUBLE],[STRING,STRING],[BOOLEAN,BOOLEAN],[DATE,DATE],[TIME,TIME],[DATETIME,DATETIME],[TIMESTAMP,TIMESTAMP],[INTERVAL,INTERVAL],[STRUCT,STRUCT],[ARRAY,ARRAY]}, but get [TIMESTAMP,INTEGER]\",\n \"type\": \"ExpressionEvaluationException\"\n },\n \"status\": 400\n}
But, if you're using a JOIN, the behavior reverses, while the error becomes even more confusing than just "can't match type" WHERE t.timestamp > timestamp('2001-05-07 00:00:00') now will not work and WHERE t.timestamp > 0will with error
{\n \"error\": {\n \"reason\": \"Invalid SQL query\",\n \"details\": \"Cannot invoke \\\"String.startsWith(String)\\\" because \\\"fieldName\\\" is null\",\n \"type\": \"NullPointerException\"\n },\n \"status\": 400\n}
Related component
Search
To Reproduce
Go to 'Dashboard -> Management -> Dev Tools'
Paste the example below
Run those queries one by one and observe the behavior
PUT /a
{
"mappings": {
"properties": {
"some_id": {
"type": "keyword"
},
"timestamp": {
"type": "date"
}
}
}
}
PUT /b
{
"mappings": {
"properties": {
"some_id": {
"type": "keyword"
},
"timestamp": {
"type": "date"
}
}
}
}
POST /a/_doc
{
"some_id": "a1",
"timestamp": "2024-12-15T10:00:00Z"
}
POST /b/_doc
{
"some_id": "a1",
"timestamp": "2024-12-15T11:00:00Z"
}
-- NO JOIN - TIMESTAMP worksPOST /_plugins/_sql
{
"query": "SELECT b.timestamp from b WHERE b.timestamp > timestamp('2001-05-07 00:00:00');"
}
-- NO JOIN - INTEGER doesn't work-- {\n \"error\": {\n \"reason\": \"Invalid SQL query\",\n \"details\": \"> function expected {[BYTE,BYTE],[SHORT,SHORT],[INTEGER,INTEGER],[LONG,LONG],[FLOAT,FLOAT],[DOUBLE,DOUBLE],[STRING,STRING],[BOOLEAN,BOOLEAN],[DATE,DATE],[TIME,TIME],[DATETIME,DATETIME],[TIMESTAMP,TIMESTAMP],[INTERVAL,INTERVAL],[STRUCT,STRUCT],[ARRAY,ARRAY]}, but get [TIMESTAMP,INTEGER]\",\n \"type\": \"ExpressionEvaluationException\"\n },\n \"status\": 400\n}POST /_plugins/_sql
{
"query": "SELECT b.timestamp from b WHERE b.timestamp > 0;"
}
-- JOIN - INTEGER worksPOST /_plugins/_sql
{
"query": "SELECT b.timestamp from b JOIN a ON a.some_id = b.some_id WHERE b.timestamp > 0;"
}
-- JOIN - TIMESTAMP doesn't work-- {\n \"error\": {\n \"reason\": \"Invalid SQL query\",\n \"details\": \"Cannot invoke \\\"String.startsWith(String)\\\" because \\\"fieldName\\\" is null\",\n \"type\": \"NullPointerException\"\n },\n \"status\": 400\n}POST /_plugins/_sql
{
"query": "SELECT b.timestamp from b JOIN a ON a.some_id = b.some_id WHERE b.timestamp > timestamp('2001-05-07 00:00:00');"
}
Expected behavior
Expected to see timestamp filtering work when using a join. Also, since it's a timestamp, i'd also expect INTEGER to work both ways
Additional Details
Plugins
AFAIK, sql, it's a default OpenSearch AWS installation
Screenshots
I've put the whole repro above with error results, so don't really need it
Host/Environment (please complete the following information):
Envrionment: AWS
Version: OpenSearch 2.17 (latest)
Service software version: OpenSearch_2_17_R20241112-P3 (latest)
The text was updated successfully, but these errors were encountered:
Describe the bug
So given 2 indexes, with a matching field (to be used in a JOIN) and a timestamp field. When querying without a join, a
WHERE
clause likeWHERE t.timestamp > timestamp('2001-05-07 00:00:00')
will work andWHERE t.timestamp > 0
won't work since it's a TIMESTAMP field, that's what opensearch tell youBut, if you're using a
JOIN
, the behavior reverses, while the error becomes even more confusing than just "can't match type"WHERE t.timestamp > timestamp('2001-05-07 00:00:00')
now will not work andWHERE t.timestamp > 0
will with errorRelated component
Search
To Reproduce
Expected behavior
Expected to see timestamp filtering work when using a join. Also, since it's a timestamp, i'd also expect INTEGER to work both ways
Additional Details
Plugins
AFAIK, sql, it's a default OpenSearch AWS installation
Screenshots
I've put the whole repro above with error results, so don't really need it
Host/Environment (please complete the following information):
The text was updated successfully, but these errors were encountered: