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 2019/04/23 16:28:17 UTC
[calcite] branch master updated: [CALCITE-3001] Upgrade to Apache
Druid 0.14.0-incubating
This is an automated email from the ASF dual-hosted git repository.
jcamacho pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite.git
The following commit(s) were added to refs/heads/master by this push:
new 898ddbd [CALCITE-3001] Upgrade to Apache Druid 0.14.0-incubating
898ddbd is described below
commit 898ddbd8388ed28066a598297d82121557dde7d7
Author: Nishant <ni...@gmail.com>
AuthorDate: Thu Apr 18 17:45:58 2019 +0530
[CALCITE-3001] Upgrade to Apache Druid 0.14.0-incubating
Close apache/calcite#1174
---
.../org/apache/calcite/test/DruidAdapterIT.java | 112 ++++++++++-----------
.../org/apache/calcite/test/DruidAdapterIT2.java | 2 +-
druid/src/test/resources/druid-wiki-model.json | 2 +-
.../resources/druid-wiki-no-columns-model.json | 2 +-
site/_docs/history.md | 11 ++
5 files changed, 70 insertions(+), 59 deletions(-)
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 d4c7748..cfb29e7 100644
--- a/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT.java
+++ b/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT.java
@@ -77,17 +77,17 @@ public class DruidAdapterIT {
DruidAdapterIT.class.getResource("/druid-foodmart-model.json");
/** URL of the "druid-wiki" model
- * and the "wikiticker" data set. */
+ * and the "wikipedia" data set. */
public static final URL WIKI =
DruidAdapterIT.class.getResource("/druid-wiki-model.json");
/** URL of the "druid-wiki-no-columns" model
- * and the "wikiticker" data set. */
+ * and the "wikipedia" data set. */
public static final URL WIKI_AUTO =
DruidAdapterIT.class.getResource("/druid-wiki-no-columns-model.json");
/** URL of the "druid-wiki-no-tables" model
- * and the "wikiticker" data set. */
+ * and the "wikipedia" data set. */
public static final URL WIKI_AUTO2 =
DruidAdapterIT.class.getResource("/druid-wiki-no-tables-model.json");
@@ -154,7 +154,7 @@ public class DruidAdapterIT {
/** Tests a query against the {@link #WIKI} data set.
*
* <p>Most of the others in this suite are against {@link #FOODMART},
- * but our examples in "druid-adapter.md" use wikiticker. */
+ * but our examples in "druid-adapter.md" use wikipedia. */
@Test public void testSelectDistinctWiki() {
final String explain = "PLAN="
+ "EnumerableInterpreter\n"
@@ -170,7 +170,7 @@ public class DruidAdapterIT {
+ "EnumerableInterpreter\n"
+ " DruidQuery(table=[[wiki, wiki]], "
+ "intervals=[[1900-01-09T00:00:00.000Z/2992-01-10T00:00:00.000Z]], "
- + "filter=[=($17, 'Jeremy Corbyn')], groups=[{7}], aggs=[[]])\n";
+ + "filter=[=($16, 'Jeremy Corbyn')], groups=[{6}], aggs=[[]])\n";
checkSelectDistinctWiki(WIKI_AUTO, "wiki")
.explainContains(explain);
}
@@ -181,15 +181,15 @@ public class DruidAdapterIT {
// different. This is expected.
// Interval is different, as default is taken.
final String sql = "select distinct \"countryName\"\n"
- + "from \"wikiticker\"\n"
+ + "from \"wikipedia\"\n"
+ "where \"page\" = 'Jeremy Corbyn'";
final String explain = "PLAN="
+ "EnumerableInterpreter\n"
- + " DruidQuery(table=[[wiki, wikiticker]], "
+ + " DruidQuery(table=[[wiki, wikipedia]], "
+ "intervals=[[1900-01-01T00:00:00.000Z/3000-01-01T00:00:00.000Z]], "
- + "filter=[=($17, 'Jeremy Corbyn')], groups=[{7}], aggs=[[]])\n";
+ + "filter=[=($16, 'Jeremy Corbyn')], groups=[{6}], aggs=[[]])\n";
final String druidQuery = "{'queryType':'groupBy',"
- + "'dataSource':'wikiticker','granularity':'all',"
+ + "'dataSource':'wikipedia','granularity':'all',"
+ "'dimensions':[{'type':'default','dimension':'countryName','outputName':'countryName',"
+ "'outputType':'STRING'}],'limitSpec':{'type':'default'},"
+ "'filter':{'type':'selector','dimension':'page','value':'Jeremy Corbyn'},"
@@ -209,14 +209,14 @@ public class DruidAdapterIT {
// Since columns are not explicitly declared, we use the default time
// column in the query.
final String sql = "select sum(\"added\")\n"
- + "from \"wikiticker\"\n"
+ + "from \"wikipedia\"\n"
+ "group by floor(\"__time\" to DAY)";
final String explain = "PLAN="
+ "EnumerableInterpreter\n"
+ " BindableProject(EXPR$0=[$1])\n"
- + " DruidQuery(table=[[wiki, wikiticker]], intervals=[[1900-01-01T00:00:00.000Z/3000-01-01T00:00:00.000Z]], projects=[[FLOOR($0, FLAG(DAY)), $1]], groups=[{0}], aggs=[[SUM($1)]])\n";
+ + " DruidQuery(table=[[wiki, wikipedia]], intervals=[[1900-01-01T00:00:00.000Z/3000-01-01T00:00:00.000Z]], projects=[[FLOOR($0, FLAG(DAY)), $1]], groups=[{0}], aggs=[[SUM($1)]])\n";
final String druidQuery = "{'queryType':'timeseries',"
- + "'dataSource':'wikiticker','descending':false,'granularity':{'type':'period','period':'P1D','timeZone':'UTC'},"
+ + "'dataSource':'wikipedia','descending':false,'granularity':{'type':'period','period':'P1D','timeZone':'UTC'},"
+ "'aggregations':[{'type':'longSum','name':'EXPR$0','fieldName':'added'}],"
+ "'intervals':['1900-01-01T00:00:00.000Z/3000-01-01T00:00:00.000Z'],"
+ "'context':{'skipEmptyBuckets':true}}";
@@ -229,14 +229,14 @@ public class DruidAdapterIT {
// Since columns are not explicitly declared, we use the default time
// column in the query.
final String sql = "select cast(\"__time\" as timestamp) as \"__time\"\n"
- + "from \"wikiticker\"\n"
+ + "from \"wikipedia\"\n"
+ "limit 1\n";
final String explain =
"PLAN=EnumerableInterpreter\n"
- + " DruidQuery(table=[[wiki, wikiticker]], intervals=[[1900-01-01T00:00:00.000Z/"
+ + " DruidQuery(table=[[wiki, wikipedia]], intervals=[[1900-01-01T00:00:00.000Z/"
+ "3000-01-01T00:00:00.000Z]], projects=[[CAST($0):TIMESTAMP(0) NOT NULL]], fetch=[1])";
final String druidQuery = "{'queryType':'scan',"
- + "'dataSource':'wikiticker',"
+ + "'dataSource':'wikipedia',"
+ "'intervals':['1900-01-01T00:00:00.000Z/3000-01-01T00:00:00.000Z'],"
+ "'columns':['__time'],'granularity':'all',"
+ "'resultFormat':'compactedList','limit':1}";
@@ -251,13 +251,13 @@ public class DruidAdapterIT {
// column in the query.
final String sql =
"select cast(floor(\"__time\" to DAY) as timestamp) as \"day\", sum(\"added\")\n"
- + "from \"wikiticker\"\n"
+ + "from \"wikipedia\"\n"
+ "group by floor(\"__time\" to DAY)";
final String explain =
"PLAN=EnumerableInterpreter\n"
- + " DruidQuery(table=[[wiki, wikiticker]], intervals=[[1900-01-01T00:00:00.000Z/3000-01-01T00:00:00.000Z]], projects=[[FLOOR($0, FLAG(DAY)), $1]], groups=[{0}], aggs=[[SUM($1)]], post_projects=[[CAST($0):TIMESTAMP(0) NOT NULL, $1]])";
+ + " DruidQuery(table=[[wiki, wikipedia]], intervals=[[1900-01-01T00:00:00.000Z/3000-01-01T00:00:00.000Z]], projects=[[FLOOR($0, FLAG(DAY)), $1]], groups=[{0}], aggs=[[SUM($1)]], post_projects=[[CAST($0):TIMESTAMP(0) NOT NULL, $1]])";
final String druidQuery = "{'queryType':'timeseries',"
- + "'dataSource':'wikiticker','descending':false,'granularity':{'type':'period','period':'P1D','timeZone':'UTC'},"
+ + "'dataSource':'wikipedia','descending':false,'granularity':{'type':'period','period':'P1D','timeZone':'UTC'},"
+ "'aggregations':[{'type':'longSum','name':'EXPR$1','fieldName':'added'}],"
+ "'intervals':['1900-01-01T00:00:00.000Z/3000-01-01T00:00:00.000Z'],"
+ "'context':{'skipEmptyBuckets':true}}";
@@ -272,11 +272,11 @@ public class DruidAdapterIT {
// column in the query.
final String sql = "select sum(\"added\") as \"s\", \"page\", "
+ "cast(floor(\"__time\" to DAY) as timestamp) as \"day\"\n"
- + "from \"wikiticker\"\n"
+ + "from \"wikipedia\"\n"
+ "group by \"page\", floor(\"__time\" to DAY)\n"
+ "order by \"s\" desc";
final String explain = "PLAN=EnumerableInterpreter\n"
- + " DruidQuery(table=[[wiki, wikiticker]], intervals=[[1900-01-01T00:00:00.000Z/3000-01-01T00:00:00.000Z]], projects=[[$17, FLOOR($0, FLAG(DAY)), $1]], groups=[{0, 1}], aggs=[[SUM($2)]], post_projects=[[$2, $0, CAST($1):TIMESTAMP(0) NOT NULL]], sort0=[0], dir0=[DESC])";
+ + " DruidQuery(table=[[wiki, wikipedia]], intervals=[[1900-01-01T00:00:00.000Z/3000-01-01T00:00:00.000Z]], projects=[[$16, FLOOR($0, FLAG(DAY)), $1]], groups=[{0, 1}], aggs=[[SUM($2)]], post_projects=[[$2, $0, CAST($1):TIMESTAMP(0) NOT NULL]], sort0=[0], dir0=[DESC])";
sql(sql, WIKI_AUTO2)
.limit(1)
.returnsUnordered("s=199818; page=User:QuackGuru/Electronic cigarettes 1; "
@@ -290,11 +290,11 @@ public class DruidAdapterIT {
@Test public void testSkipEmptyBuckets() {
final String sql =
"select cast(floor(\"__time\" to SECOND) as timestamp) as \"second\", sum(\"added\")\n"
- + "from \"wikiticker\"\n"
+ + "from \"wikipedia\"\n"
+ "where \"page\" = 'Jeremy Corbyn'\n"
+ "group by floor(\"__time\" to SECOND)";
final String druidQuery = "{'queryType':'timeseries',"
- + "'dataSource':'wikiticker','descending':false,'granularity':{'type':'period','period':'PT1S','timeZone':'UTC'},"
+ + "'dataSource':'wikipedia','descending':false,'granularity':{'type':'period','period':'PT1S','timeZone':'UTC'},"
+ "'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'],"
@@ -311,7 +311,7 @@ public class DruidAdapterIT {
+ "from \"" + tableName + "\"\n"
+ "where \"page\" = 'Jeremy Corbyn'";
final String druidQuery = "{'queryType':'groupBy',"
- + "'dataSource':'wikiticker','granularity':'all',"
+ + "'dataSource':'wikipedia','granularity':'all',"
+ "'dimensions':[{'type':'default','dimension':'countryName','outputName':'countryName',"
+ "'outputType':'STRING'}],'limitSpec':{'type':'default'},"
+ "'filter':{'type':'selector','dimension':'page','value':'Jeremy Corbyn'},"
@@ -329,14 +329,14 @@ public class DruidAdapterIT {
* UTC</a>. */
@Test public void testFilterTime() {
final String sql = "select cast(\"__time\" as timestamp) as \"__time\"\n"
- + "from \"wikiticker\"\n"
+ + "from \"wikipedia\"\n"
+ "where \"__time\" < '2015-10-12 00:00:00 UTC'";
final String explain = "PLAN=EnumerableInterpreter\n"
- + " DruidQuery(table=[[wiki, wikiticker]],"
+ + " DruidQuery(table=[[wiki, wikipedia]],"
+ " intervals=[[1900-01-01T00:00:00.000Z/2015-10-12T00:00:00.000Z]], "
+ "projects=[[CAST($0):TIMESTAMP(0) NOT NULL]])";
final String druidQuery = "{'queryType':'scan',"
- + "'dataSource':'wikiticker',"
+ + "'dataSource':'wikipedia',"
+ "'intervals':['1900-01-01T00:00:00.000Z/2015-10-12T00:00:00.000Z'],"
+ "'virtualColumns':[{'type':'expression','name':'vc','expression':";
sql(sql, WIKI_AUTO2)
@@ -350,13 +350,13 @@ public class DruidAdapterIT {
@Test public void testFilterTimeDistinct() {
final String sql = "select CAST(\"c1\" AS timestamp) as \"time\" from\n"
+ "(select distinct \"__time\" as \"c1\"\n"
- + "from \"wikiticker\"\n"
+ + "from \"wikipedia\"\n"
+ "where \"__time\" < '2015-10-12 00:00:00 UTC')";
final String explain = "PLAN=EnumerableInterpreter\n"
- + " DruidQuery(table=[[wiki, wikiticker]], intervals=[[1900-01-01T00:00:00.000Z/"
+ + " DruidQuery(table=[[wiki, wikipedia]], intervals=[[1900-01-01T00:00:00.000Z/"
+ "3000-01-01T00:00:00.000Z]], projects=[[$0]], groups=[{0}], aggs=[[]], "
+ "filter=[<($0, 2015-10-12 00:00:00)], projects=[[CAST($0):TIMESTAMP(0) NOT NULL]])\n";
- final String subDruidQuery = "{'queryType':'groupBy','dataSource':'wikiticker',"
+ final String subDruidQuery = "{'queryType':'groupBy','dataSource':'wikipedia',"
+ "'granularity':'all','dimensions':[{'type':'extraction',"
+ "'dimension':'__time','outputName':'extract',"
+ "'extractionFn':{'type':'timeFormat'";
@@ -1396,15 +1396,15 @@ public class DruidAdapterIT {
/** Tests a query that exposed several bugs in the interpreter. */
@Test public void testWhereGroupBy() {
- String sql = "select \"wikiticker\".\"countryName\" as \"c0\",\n"
- + " sum(\"wikiticker\".\"count\") as \"m1\",\n"
- + " sum(\"wikiticker\".\"deleted\") as \"m2\",\n"
- + " sum(\"wikiticker\".\"delta\") as \"m3\"\n"
- + "from \"wiki\" as \"wikiticker\"\n"
- + "where (\"wikiticker\".\"countryName\" in ('Colombia', 'France',\n"
+ String sql = "select \"wikipedia\".\"countryName\" as \"c0\",\n"
+ + " sum(\"wikipedia\".\"count\") as \"m1\",\n"
+ + " sum(\"wikipedia\".\"deleted\") as \"m2\",\n"
+ + " sum(\"wikipedia\".\"delta\") as \"m3\"\n"
+ + "from \"wiki\" as \"wikipedia\"\n"
+ + "where (\"wikipedia\".\"countryName\" in ('Colombia', 'France',\n"
+ " 'Germany', 'India', 'Italy', 'Russia', 'United Kingdom',\n"
- + " 'United States') or \"wikiticker\".\"countryName\" is null)\n"
- + "group by \"wikiticker\".\"countryName\"";
+ + " 'United States') or \"wikipedia\".\"countryName\" is null)\n"
+ + "group by \"wikipedia\".\"countryName\"";
String druidQuery = "{'type':'selector','dimension':'countryName','value':null}";
sql(sql, WIKI)
.queryContains(druidChecker(druidQuery))
@@ -2156,8 +2156,8 @@ public class DruidAdapterIT {
+ " DruidQuery(table=[[foodmart, foodmart]], "
+ "intervals=[[1900-01-09T00:00:00.000Z/2992-01-10T00:00:00.000Z]], "
+ "filter=[AND(=($2, 'Bird Call'), OR(=(EXTRACT(FLAG(WEEK), $0), 10), "
- + "=(EXTRACT(FLAG(WEEK), $0), 11)))], projects=[[$63, $90, $91]], "
- + "groups=[{0}], aggs=[[SUM($1), SUM($2)]], post_projects=[[$0, 'Bird Call', -($1, $2)]])";
+ + "=(EXTRACT(FLAG(WEEK), $0), 11)))], projects=[[$0, $2, $63, $90, $91]], "
+ + "groups=[{2}], aggs=[[SUM($3), SUM($4)]], post_projects=[[$0, 'Bird Call', -($1, $2)]])";
sql(sql, FOODMART)
.returnsOrdered("store_state=CA; brand_name=Bird Call; A=34.364599999999996",
"store_state=OR; brand_name=Bird Call; A=39.16359999999999",
@@ -2793,24 +2793,24 @@ public class DruidAdapterIT {
*/
@Test public void testCountColumn() {
final String sql = "SELECT count(\"countryName\") FROM (SELECT \"countryName\" FROM "
- + "\"wikiticker\" WHERE \"countryName\" IS NOT NULL) as a";
+ + "\"wikipedia\" WHERE \"countryName\" IS NOT NULL) as a";
sql(sql, WIKI_AUTO2)
.returnsUnordered("EXPR$0=3799");
final String sql2 = "SELECT count(\"countryName\") FROM (SELECT \"countryName\" FROM "
- + "\"wikiticker\") as a";
+ + "\"wikipedia\") as a";
final String plan2 = "PLAN=EnumerableInterpreter\n"
- + " DruidQuery(table=[[wiki, wikiticker]], "
- + "intervals=[[1900-01-01T00:00:00.000Z/3000-01-01T00:00:00.000Z]], projects=[[$7]], "
+ + " DruidQuery(table=[[wiki, wikipedia]], "
+ + "intervals=[[1900-01-01T00:00:00.000Z/3000-01-01T00:00:00.000Z]], projects=[[$6]], "
+ "groups=[{}], aggs=[[COUNT($0)]])";
sql(sql2, WIKI_AUTO2)
.returnsUnordered("EXPR$0=3799")
.explainContains(plan2);
- final String sql3 = "SELECT count(*), count(\"countryName\") FROM \"wikiticker\"";
+ final String sql3 = "SELECT count(*), count(\"countryName\") FROM \"wikipedia\"";
final String plan3 = "PLAN=EnumerableInterpreter\n"
- + " DruidQuery(table=[[wiki, wikiticker]], "
- + "intervals=[[1900-01-01T00:00:00.000Z/3000-01-01T00:00:00.000Z]], projects=[[$7]], "
+ + " DruidQuery(table=[[wiki, wikipedia]], "
+ + "intervals=[[1900-01-01T00:00:00.000Z/3000-01-01T00:00:00.000Z]], projects=[[$6]], "
+ "groups=[{}], aggs=[[COUNT(), COUNT($0)]])";
sql(sql3, WIKI_AUTO2)
.explainContains(plan3);
@@ -2819,7 +2819,7 @@ public class DruidAdapterIT {
@Test public void testCountColumn2() {
final String sql = "SELECT count(\"countryName\") FROM (SELECT \"countryName\" FROM "
- + "\"wikiticker\" WHERE \"countryName\" IS NOT NULL) as a";
+ + "\"wikipedia\" WHERE \"countryName\" IS NOT NULL) as a";
sql(sql, WIKI_AUTO2)
.queryContains(druidChecker("timeseries"))
.returnsUnordered("EXPR$0=3799");
@@ -3098,7 +3098,7 @@ public class DruidAdapterIT {
sql(sql, WIKI)
// make sure user_id column is not present
.queryContains(
- druidChecker("{'queryType':'scan','dataSource':'wikiticker','intervals':"
+ druidChecker("{'queryType':'scan','dataSource':'wikipedia','intervals':"
+ "['1900-01-09T00:00:00.000Z/2992-01-10T00:00:00.000Z'],'virtualColumns':"
+ "[{'type':'expression','name':'vc','expression':'\\'__time\\'',"
+ "'outputType':'LONG'}],'columns':['vc','channel','cityName','comment',"
@@ -3113,7 +3113,7 @@ public class DruidAdapterIT {
* */
@Test public void testTableMapReused() {
AbstractSchema schema = new DruidSchema("http://localhost:8082", "http://localhost:8081", true);
- assertSame(schema.getTable("wikiticker"), schema.getTable("wikiticker"));
+ assertSame(schema.getTable("wikipedia"), schema.getTable("wikipedia"));
}
@Test public void testPushEqualsCastDimension() {
@@ -3245,7 +3245,7 @@ public class DruidAdapterIT {
@Test public void testTimeWithFilterOnFloorOnTimeWithTimezone() {
final String sql = "Select cast(\"__time\" as timestamp) as t from "
- + "\"wikiticker\" where floor(\"__time\" to HOUR) >= cast('2015-09-12 08:00:00'"
+ + "\"wikipedia\" where floor(\"__time\" to HOUR) >= cast('2015-09-12 08:00:00'"
+ " as TIMESTAMP) order by t limit 1";
final String druidQueryPart1 = "filter\":{\"type\":\"bound\",\"dimension\":\"__time\","
+ "\"lower\":\"2015-09-12T08:00:00.000Z\",\"lowerStrict\":false,"
@@ -3267,7 +3267,7 @@ public class DruidAdapterIT {
@Test public void testTimeWithFilterOnFloorOnTimeWithTimezoneConversion() {
final String sql = "Select cast(\"__time\" as timestamp) as t, \"countryName\" as s, "
- + "count(*) as c from \"wikiticker\" where floor(\"__time\" to HOUR)"
+ + "count(*) as c from \"wikipedia\" where floor(\"__time\" to HOUR)"
+ " >= '2015-09-12 08:00:00 Asia/Kolkata' group by cast(\"__time\" as timestamp), \"countryName\""
+ " order by t limit 4";
final String druidQueryPart1 = "filter\":{\"type\":\"bound\",\"dimension\":\"__time\","
@@ -3292,7 +3292,7 @@ public class DruidAdapterIT {
@Test public void testTimeWithFilterOnFloorOnTimeWithTimezoneConversionCast() {
final String sql = "Select cast(\"__time\" as timestamp) as t, \"countryName\" as s, "
- + "count(*) as c from \"wikiticker\" where floor(\"__time\" to HOUR)"
+ + "count(*) as c from \"wikipedia\" where floor(\"__time\" to HOUR)"
+ " >= '2015-09-12 08:00:00 Asia/Kolkata' group by cast(\"__time\" as timestamp), \"countryName\""
+ " order by t limit 4";
final String druidQueryPart1 = "filter\":{\"type\":\"bound\",\"dimension\":\"__time\","
@@ -4181,11 +4181,11 @@ public class DruidAdapterIT {
@Test
public void testAggOnTimeExtractColumn() {
- final String sql = "SELECT SUM(EXTRACT(MONTH FROM \"__time\")) FROM \"wikiticker\"";
+ final String sql = "SELECT SUM(EXTRACT(MONTH FROM \"__time\")) FROM \"wikipedia\"";
sql(sql, WIKI_AUTO2)
.returnsOrdered("EXPR$0=353196")
.queryContains(
- druidChecker("{'queryType':'timeseries','dataSource':'wikiticker',"
+ druidChecker("{'queryType':'timeseries','dataSource':'wikipedia',"
+ "'descending':false,'granularity':'all','aggregations':[{"
+ "'type':'longSum','name':'EXPR$0','expression':'timestamp_extract(\\'__time\\'"));
}
@@ -4331,7 +4331,7 @@ public class DruidAdapterIT {
final String sql = "SELECT * FROM (SELECT QUARTER(\"__time\") AS QUARTER ,"
+ "EXTRACT(WEEK FROM \"__time\") AS WEEK, DAYOFWEEK(\"__time\") AS DAYOFWEEK, "
+ "DAYOFMONTH(\"__time\") AS DAYOFMONTH, DAYOFYEAR(\"__time\") AS DAYOFYEAR, "
- + "SUM(\"added\") AS sum_added FROM \"wikiticker\" GROUP BY EXTRACT(WEEK FROM \"__time\"),"
+ + "SUM(\"added\") AS sum_added FROM \"wikipedia\" GROUP BY EXTRACT(WEEK FROM \"__time\"),"
+ " DAYOFWEEK(\"__time\"), DAYOFMONTH(\"__time\"), DAYOFYEAR(\"__time\") ,"
+ " QUARTER(\"__time\") order by sum_added) LIMIT_ZERO LIMIT 1";
@@ -4341,7 +4341,7 @@ public class DruidAdapterIT {
.explainContains("PLAN=EnumerableInterpreter\n"
+ " BindableProject(QUARTER=[$4], WEEK=[$0], DAYOFWEEK=[$1], "
+ "DAYOFMONTH=[$2], DAYOFYEAR=[$3], SUM_ADDED=[$5])\n"
- + " DruidQuery(table=[[wiki, wikiticker]], "
+ + " DruidQuery(table=[[wiki, wikipedia]], "
+ "intervals=[[1900-01-01T00:00:00.000Z/3000-01-01T00:00:00.000Z]], "
+ "projects=[[EXTRACT(FLAG(WEEK), $0), EXTRACT(FLAG(DOW), $0), "
+ "EXTRACT(FLAG(DAY), $0), EXTRACT(FLAG(DOY), $0), EXTRACT(FLAG(QUARTER), $0), $1]], "
diff --git a/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT2.java b/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT2.java
index f849157..5c2b85b 100644
--- a/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT2.java
+++ b/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT2.java
@@ -1895,7 +1895,7 @@ public class DruidAdapterIT2 {
+ " DruidQuery(table=[[foodmart, foodmart]], intervals=[[1900-01-09T00:00:00.000Z/"
+ "2992-01-10T00:00:00.000Z]], filter=[AND(=($2, 'Bird Call'), "
+ "OR(=(EXTRACT(FLAG(WEEK), $0), 10), =(EXTRACT(FLAG(WEEK), $0), 11)))], "
- + "projects=[[$63, $90, $91]], groups=[{0}], aggs=[[SUM($1), SUM($2)]], "
+ + "projects=[[$0, $2, $63, $90, $91]], groups=[{2}], aggs=[[SUM($3), SUM($4)]], "
+ "post_projects=[[$0, 'Bird Call', -($1, $2)]])";
sql(sql, FOODMART)
.returnsOrdered("store_state=CA; brand_name=Bird Call; A=34.364599999999996",
diff --git a/druid/src/test/resources/druid-wiki-model.json b/druid/src/test/resources/druid-wiki-model.json
index abfe424..d7fed61 100644
--- a/druid/src/test/resources/druid-wiki-model.json
+++ b/druid/src/test/resources/druid-wiki-model.json
@@ -31,7 +31,7 @@
"name": "wiki",
"factory": "org.apache.calcite.adapter.druid.DruidTableFactory",
"operand": {
- "dataSource": "wikiticker",
+ "dataSource": "wikipedia",
"interval": "1900-01-09T00:00:00.000Z/2992-01-10T00:00:00.000Z",
"timestampColumn": "time",
"dimensions": [
diff --git a/druid/src/test/resources/druid-wiki-no-columns-model.json b/druid/src/test/resources/druid-wiki-no-columns-model.json
index c9231c4..ea36381 100644
--- a/druid/src/test/resources/druid-wiki-no-columns-model.json
+++ b/druid/src/test/resources/druid-wiki-no-columns-model.json
@@ -34,7 +34,7 @@
"name": "wiki",
"factory": "org.apache.calcite.adapter.druid.DruidTableFactory",
"operand": {
- "dataSource": "wikiticker",
+ "dataSource": "wikipedia",
"interval": "1900-01-09T00:00:00.000Z/2992-01-10T00:00:00.000Z",
"timestampColumn": "time"
}
diff --git a/site/_docs/history.md b/site/_docs/history.md
index 4bd0851..424d585 100644
--- a/site/_docs/history.md
+++ b/site/_docs/history.md
@@ -28,6 +28,17 @@ For a full list of releases, see
Downloads are available on the
[downloads page]({{ site.baseurl }}/downloads/).
+## <a href="https://github.com/apache/calcite/releases/tag/calcite-1.20.0">1.20.0</a> / under development
+{: #v1-20-0}
+
+
+Compatibility: This release is tested
+on Linux, macOS, Microsoft Windows;
+using Oracle JDK 8, 9, 10, 11, 12 and OpenJDK 8, 9, 10, 11, 12;
+Guava versions 19.0 to 27.1-jre;
+Apache Druid version 0.14.0-incubating;
+other software versions as specified in `pom.xml`.
+
## <a href="https://github.com/apache/calcite/releases/tag/calcite-1.19.0">1.19.0</a> / 2019-03-25
{: #v1-19-0}