Supported operations
Open Distro for Elasticsearch supports the following SQL operations.
Table of contents
Statements
  
    
      | Statement | Example | 
  
  
    
      | Select | SELECT * FROM my-index | 
    
      | Delete | DELETE FROM my-index WHERE _id=1 | 
    
      | Where | SELECT * FROM my-index WHERE ['field']='value' | 
    
      | Order by | SELECT * FROM my-index ORDER BY _id asc | 
    
      | Group by | SELECT * FROM my-index GROUP BY range(age, 20,30,39) | 
    
      | Limit | SELECT * FROM my-index LIMIT 50(default is 200) | 
    
      | Union | SELECT * FROM my-index1 UNION SELECT * FROM my-index2 | 
    
      | Minus | SELECT * FROM my-index1 MINUS SELECT * FROM my-index2 | 
  
Like any complex query, large UNION and MINUS statements can strain or even crash your cluster.
Conditions
  
    
      | Condition | Example | 
  
  
    
      | Like | SELECT * FROM my-index WHERE name LIKE 'j%' | 
    
      | And | SELECT * FROM my-index WHERE name LIKE 'j%' AND age > 21 | 
    
      | Or | SELECT * FROM my-index WHERE name LIKE 'j%' OR age > 21 | 
    
      | Count distinct | SELECT count(distinct age) FROM my-index | 
    
      | In | SELECT * FROM my-index WHERE name IN ('alejandro', 'carolina') | 
    
      | Not | SELECT * FROM my-index WHERE name NOT IN ('jane') | 
    
      | Between | SELECT * FROM my-index WHERE age BETWEEN 20 AND 30 | 
    
      | Aliases | SELECT avg(age) AS Average_Age FROM my-index | 
    
      | Date | SELECT * FROM my-index WHERE birthday='1990-11-15' | 
    
      | Null | SELECT * FROM my-index WHERE name IS NULL | 
  
Aggregations
  
    
      | Aggregation | Example | 
  
  
    
      | avg() | SELECT avg(age) FROM my-index | 
    
      | count() | SELECT count(age) FROM my-index | 
    
      | max() | SELECT max(age) AS Highest_Age FROM my-index | 
    
      | min() | SELECT min(age) AS Lowest_Age FROM my-index | 
    
      | sum() | SELECT sum(age) AS Age_Sum FROM my-index | 
  
Include and exclude fields
  
    
      | Pattern | Example | 
  
  
    
      | include() | SELECT include('a*'), exclude('age') FROM my-index | 
    
      | exclude() | SELECT exclude('*name') FROM my-index | 
  
Functions
You must enable fielddata in the document mapping for most string functions to work properly.
  
    
      | Function | Example | 
  
  
    
      | floor | SELECT floor(number) AS Rounded_Down FROM my-index | 
    
      | trim | SELECT trim(name) FROM my-index | 
    
      | log | SELECT log(number) FROM my-index | 
    
      | log10 | SELECT log10(number) FROM my-index | 
    
      | substring | SELECT substring(name, 2,5) FROM my-index | 
    
      | round | SELECT round(number) FROM my-index | 
    
      | sqrt | SELECT sqrt(number) FROM my-index | 
    
      | concat_ws | SELECT concat_ws(' ', age, height) AS combined FROM my-index | 
    
      | / | SELECT number / 100 FROM my-index | 
    
      | % | SELECT number % 100 FROM my-index | 
    
      | date_format | SELECT date_format(date, 'Y') FROM my-index | 
  
Joins
See Joins for constraints and limitations.
  
    
      | Join | Example | 
  
  
    
      | Inner join | SELECT p.firstname, p.lastname, p.gender, dogs.name FROM people p JOIN dogs d ON d.holdersName = p.firstname WHERE p.age > 12 AND d.age > 1 | 
    
      | Left outer join | SELECT p.firstname, p.lastname, p.gender, dogs.name FROM people p LEFT JOIN dogs d ON d.holdersName = p.firstname | 
    
      | Cross join | SELECT p.firstname, p.lastname, p.gender, dogs.name FROM people p CROSS JOIN dogs d | 
  
Show
Show commands, well, show you indices and mappings that match an index pattern. You can use * or % for wildcards.
  
    
      | Show | Example | 
  
  
    
      | Show tables like | SHOW TABLES LIKE logs-* |