You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jc...@apache.org on 2017/01/30 12:07:01 UTC
calcite git commit: [CALCITE-1589] Druid adapter: timeseries query
shows all days, even if no data
Repository: calcite
Updated Branches:
refs/heads/master bc232c269 -> 0187cfc53
[CALCITE-1589] Druid adapter: timeseries query shows all days, even if no data
Close apache/calcite#358
Project: http://git-wip-us.apache.org/repos/asf/calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/0187cfc5
Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/0187cfc5
Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/0187cfc5
Branch: refs/heads/master
Commit: 0187cfc53aec4b1d472baebdc899038e5c970b7b
Parents: bc232c2
Author: Jesus Camacho Rodriguez <jc...@apache.org>
Authored: Fri Jan 20 15:07:15 2017 +0000
Committer: Jesus Camacho Rodriguez <jc...@apache.org>
Committed: Mon Jan 30 12:05:26 2017 +0000
----------------------------------------------------------------------
.../calcite/adapter/druid/DruidQuery.java | 6 ++++
.../org/apache/calcite/test/DruidAdapterIT.java | 36 ++++++++++++++++----
2 files changed, 36 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/calcite/blob/0187cfc5/druid/src/main/java/org/apache/calcite/adapter/druid/DruidQuery.java
----------------------------------------------------------------------
diff --git a/druid/src/main/java/org/apache/calcite/adapter/druid/DruidQuery.java b/druid/src/main/java/org/apache/calcite/adapter/druid/DruidQuery.java
index 5a40849..df2dbd8 100644
--- a/druid/src/main/java/org/apache/calcite/adapter/druid/DruidQuery.java
+++ b/druid/src/main/java/org/apache/calcite/adapter/druid/DruidQuery.java
@@ -576,6 +576,12 @@ public class DruidQuery extends AbstractRelNode implements BindableRel {
writeFieldIf(generator, "postAggregations", null);
writeField(generator, "intervals", intervals);
+ generator.writeFieldName("context");
+ // The following field is necessary to conform with SQL semantics (CALCITE-1589)
+ generator.writeStartObject();
+ generator.writeBooleanField("skipEmptyBuckets", true);
+ generator.writeEndObject();
+
generator.writeEndObject();
break;
http://git-wip-us.apache.org/repos/asf/calcite/blob/0187cfc5/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT.java
----------------------------------------------------------------------
diff --git a/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT.java b/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT.java
index ea156f4..3c7a7c8 100644
--- a/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT.java
+++ b/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT.java
@@ -185,7 +185,8 @@ public class DruidAdapterIT {
final String druidQuery = "{'queryType':'timeseries',"
+ "'dataSource':'wikiticker','descending':false,'granularity':'day',"
+ "'aggregations':[{'type':'longSum','name':'EXPR$0','fieldName':'added'}],"
- + "'intervals':['1900-01-01T00:00:00.000Z/3000-01-01T00:00:00.000Z']}";
+ + "'intervals':['1900-01-01T00:00:00.000Z/3000-01-01T00:00:00.000Z'],"
+ + "'context':{'skipEmptyBuckets':true}}";
sql(sql, WIKI_AUTO2)
.explainContains(explain)
.queryContains(druidChecker(druidQuery));
@@ -223,7 +224,8 @@ public class DruidAdapterIT {
final String druidQuery = "{'queryType':'timeseries',"
+ "'dataSource':'wikiticker','descending':false,'granularity':'day',"
+ "'aggregations':[{'type':'longSum','name':'EXPR$1','fieldName':'added'}],"
- + "'intervals':['1900-01-01T00:00:00.000Z/3000-01-01T00:00:00.000Z']}";
+ + "'intervals':['1900-01-01T00:00:00.000Z/3000-01-01T00:00:00.000Z'],"
+ + "'context':{'skipEmptyBuckets':true}}";
sql(sql, WIKI_AUTO2)
.returnsUnordered("day=2015-09-12 00:00:00; EXPR$1=9385573")
.explainContains(explain)
@@ -256,6 +258,24 @@ public class DruidAdapterIT {
.queryContains(druidChecker(druidQuery));
}
+ @Test public void testSkipEmptyBuckets() {
+ final String sql = "select floor(\"__time\" to SECOND) as \"second\", sum(\"added\")\n"
+ + "from \"wikiticker\"\n"
+ + "where \"page\" = 'Jeremy Corbyn'\n"
+ + "group by floor(\"__time\" to SECOND)";
+ final String druidQuery = "{'queryType':'timeseries',"
+ + "'dataSource':'wikiticker','descending':false,'granularity':'second',"
+ + "'filter':{'type':'selector','dimension':'page','value':'Jeremy Corbyn'},"
+ + "'aggregations':[{'type':'longSum','name':'EXPR$1','fieldName':'added'}],"
+ + "'intervals':['1900-01-01T00:00:00.000Z/3000-01-01T00:00:00.000Z'],"
+ + "'context':{'skipEmptyBuckets':true}}";
+ sql(sql, WIKI_AUTO2)
+ .limit(1)
+ // Result without 'skipEmptyBuckets':true => "second=2015-09-12 00:46:58; EXPR$1=0"
+ .returnsUnordered("second=2015-09-12 01:20:19; EXPR$1=1075")
+ .queryContains(druidChecker(druidQuery));
+ }
+
private CalciteAssert.AssertQuery checkSelectDistinctWiki(URL url, String tableName) {
final String sql = "select distinct \"countryName\"\n"
+ "from \"" + tableName + "\"\n"
@@ -768,7 +788,8 @@ public class DruidAdapterIT {
final String druidQuery = "{'queryType':'timeseries','dataSource':'foodmart',"
+ "'descending':false,'granularity':'all',"
+ "'aggregations':[{'type':'count','name':'EXPR$0'}],"
- + "'intervals':['1900-01-09T00:00:00.000Z/2992-01-10T00:00:00.000Z']}";
+ + "'intervals':['1900-01-09T00:00:00.000Z/2992-01-10T00:00:00.000Z'],"
+ + "'context':{'skipEmptyBuckets':true}}";
final String explain = "PLAN=EnumerableInterpreter\n"
+ " DruidQuery(table=[[foodmart, foodmart]], intervals=[[1900-01-09T00:00:00.000Z/2992-01-10T00:00:00.000Z]], projects=[[]], groups=[{}], aggs=[[COUNT()]])";
final String sql = "select count(*) from \"foodmart\"";
@@ -882,7 +903,8 @@ public class DruidAdapterIT {
+ "'descending':false,'granularity':'month',"
+ "'aggregations':[{'type':'longSum','name':'S','fieldName':'unit_sales'},"
+ "{'type':'count','name':'C','fieldName':'store_sqft'}],"
- + "'intervals':['1900-01-09T00:00:00.000Z/2992-01-10T00:00:00.000Z']}";
+ + "'intervals':['1900-01-09T00:00:00.000Z/2992-01-10T00:00:00.000Z'],"
+ + "'context':{'skipEmptyBuckets':true}}";
sql(sql)
.limit(3)
.returnsUnordered("S=20957; C=6844", "S=21628; C=7033", "S=23706; C=7710")
@@ -952,7 +974,8 @@ public class DruidAdapterIT {
+ "'descending':false,'granularity':'day',"
+ "'aggregations':[{'type':'longSum','name':'S','fieldName':'unit_sales'},"
+ "{'type':'count','name':'C','fieldName':'store_sqft'}],"
- + "'intervals':['1900-01-09T00:00:00.000Z/2992-01-10T00:00:00.000Z']}";
+ + "'intervals':['1900-01-09T00:00:00.000Z/2992-01-10T00:00:00.000Z'],"
+ + "'context':{'skipEmptyBuckets':true}}";
sql(sql)
.limit(3)
.returnsUnordered("S=348; C=117", "S=589; C=189", "S=635; C=206")
@@ -970,7 +993,8 @@ public class DruidAdapterIT {
+ "'descending':false,'granularity':'month',"
+ "'aggregations':[{'type':'longSum','name':'S','fieldName':'unit_sales'},"
+ "{'type':'count','name':'C','fieldName':'store_sqft'}],"
- + "'intervals':['1996-01-01T00:00:00.000Z/1998-01-01T00:00:00.000Z']}";
+ + "'intervals':['1996-01-01T00:00:00.000Z/1998-01-01T00:00:00.000Z'],"
+ + "'context':{'skipEmptyBuckets':true}}";
sql(sql)
.limit(3)
.returnsUnordered("S=20957; C=6844", "S=21628; C=7033", "S=23706; C=7710")