From 4162e2a4e33cd3af2a747b7e894c0ee8e5111e7f Mon Sep 17 00:00:00 2001 From: Nishant Bangarwa Date: Tue, 29 May 2018 09:22:01 -0700 Subject: [PATCH] HIVE-18583 : Enable DateRangeRules Signed-off-by: Ashutosh Chauhan --- .../test/resources/testconfiguration.properties | 1 + .../ql/optimizer/calcite/rules/HiveDruidRules.java | 4 + .../hadoop/hive/ql/parse/CalcitePlanner.java | 1 + .../test/queries/clientpositive/druid_intervals.q | 29 ++++ .../queries/clientpositive/druidmini_extractTime.q | 3 +- .../{ => druid}/druid_intervals.q.out | 178 ++++++++++++++++++--- .../druid/druidmini_extractTime.q.out | 2 +- .../clientpositive/druid/druidmini_floorTime.q.out | 2 +- 8 files changed, 197 insertions(+), 23 deletions(-) rename ql/src/test/results/clientpositive/{ => druid}/druid_intervals.q.out (70%) diff --git a/itests/src/test/resources/testconfiguration.properties b/itests/src/test/resources/testconfiguration.properties index f7def351dd..c22948b703 100644 --- a/itests/src/test/resources/testconfiguration.properties +++ b/itests/src/test/resources/testconfiguration.properties @@ -1684,6 +1684,7 @@ spark.perf.disabled.query.files=query14.q,\ druid.query.files=druidmini_test1.q,\ druidmini_test_insert.q,\ + druid_intervals.q,\ druidmini_mv.q,\ druid_timestamptz.q,\ druidmini_dynamic_partition.q,\ diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveDruidRules.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveDruidRules.java index 7d2b9dc59a..5f1d0ef526 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveDruidRules.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveDruidRules.java @@ -30,6 +30,7 @@ import org.apache.calcite.adapter.druid.DruidRules.DruidProjectSortTransposeRule; import org.apache.calcite.adapter.druid.DruidRules.DruidSortProjectTransposeRule; import org.apache.calcite.adapter.druid.DruidRules.DruidSortRule; +import org.apache.calcite.rel.rules.DateRangeRules; import org.apache.hadoop.hive.ql.optimizer.calcite.HiveRelFactories; /** @@ -75,4 +76,7 @@ public static final DruidHavingFilterRule HAVING_FILTER_RULE = new DruidHavingFilterRule(HiveRelFactories.HIVE_BUILDER); + + public static final DateRangeRules.FilterDateRangeRule FILTER_DATE_RANGE_RULE = + new DateRangeRules.FilterDateRangeRule(HiveRelFactories.HIVE_BUILDER); } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java index 0bc9d230e5..1715c4cadf 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java @@ -1834,6 +1834,7 @@ public RelNode apply(RelOptCluster cluster, RelOptSchema relOptSchema, SchemaPlu perfLogger.PerfLogBegin(this.getClass().getName(), PerfLogger.OPTIMIZER); calciteOptimizedPlan = hepPlan(calciteOptimizedPlan, false, mdProvider.getMetadataProvider(), null, HepMatchOrder.BOTTOM_UP, + HiveDruidRules.FILTER_DATE_RANGE_RULE, HiveDruidRules.FILTER, HiveDruidRules.PROJECT_FILTER_TRANSPOSE, HiveDruidRules.AGGREGATE_FILTER_TRANSPOSE, diff --git a/ql/src/test/queries/clientpositive/druid_intervals.q b/ql/src/test/queries/clientpositive/druid_intervals.q index a7ee052ab5..18a87d4d46 100644 --- a/ql/src/test/queries/clientpositive/druid_intervals.q +++ b/ql/src/test/queries/clientpositive/druid_intervals.q @@ -65,3 +65,32 @@ EXPLAIN SELECT `__time`, robot FROM druid_table_1_n0 WHERE robot = 'user1' OR `__time` IN ('2010-01-01 00:00:00','2011-01-01 00:00:00'); + +-- Filter on FLOOR converted to druid date range +EXPLAIN +SELECT `__time`, robot +FROM druid_table_1_n0 +WHERE floor(`__time` to MONTH) = '2010-01-01 00:00:00'; + +EXPLAIN +SELECT `__time`, robot +FROM druid_table_1_n0 +WHERE floor(`__time` to MONTH) > '2010-01-01 00:00:00' and floor(`__time` to MONTH) <= '2011-01-01 00:00:00'; + +EXPLAIN +SELECT floor(`__time` to YEAR), robot +FROM druid_table_1_n0 +WHERE floor(`__time` to MONTH) > '2010-01-01 00:00:00' and floor(`__time` to MONTH) <= '2011-01-01 00:00:00'; + +-- Combination of Filter on floor and extract on month +EXPLAIN +SELECT `__time`, robot +FROM druid_table_1_n0 +WHERE floor(`__time` to YEAR) = '2010-01-01 00:00:00' AND extract(MONTH from `__time`) = 4; + +EXPLAIN +SELECT `__time`, robot +FROM druid_table_1_n0 +WHERE floor(`__time` to YEAR) >= '2010-01-01 00:00:00' AND extract(YEAR from `__time`) = 2010; + +drop TABLE druid_table_1_n0; diff --git a/ql/src/test/queries/clientpositive/druidmini_extractTime.q b/ql/src/test/queries/clientpositive/druidmini_extractTime.q index 2f7129edeb..758d687bda 100644 --- a/ql/src/test/queries/clientpositive/druidmini_extractTime.q +++ b/ql/src/test/queries/clientpositive/druidmini_extractTime.q @@ -1,3 +1,4 @@ +--! qt:dataset:alltypesorc SET hive.vectorized.execution.enabled=false; CREATE TABLE druid_table STORED BY 'org.apache.hadoop.hive.druid.DruidStorageHandler' @@ -161,4 +162,4 @@ SELECT EXTRACT(YEAR from `__time`), SUBSTRING(CAST(CAST(`__time` AS DATE) AS STR AND CAST(EXTRACT(YEAR from `__time`) as STRING) = '1969' LIMIT 1; -DROP TABLE druid_table; \ No newline at end of file +DROP TABLE druid_table; diff --git a/ql/src/test/results/clientpositive/druid_intervals.q.out b/ql/src/test/results/clientpositive/druid/druid_intervals.q.out similarity index 70% rename from ql/src/test/results/clientpositive/druid_intervals.q.out rename to ql/src/test/results/clientpositive/druid/druid_intervals.q.out index fde446cecb..203933a9e1 100644 --- a/ql/src/test/results/clientpositive/druid_intervals.q.out +++ b/ql/src/test/results/clientpositive/druid/druid_intervals.q.out @@ -83,11 +83,9 @@ STAGE PLANS: druid.fieldTypes timestamp with local time zone druid.query.json {"queryType":"scan","dataSource":"wikipedia","intervals":["1900-01-01T00:00:00.000Z/3000-01-01T00:00:00.000Z"],"virtualColumns":[{"type":"expression","name":"vc","expression":"\"__time\"","outputType":"LONG"}],"columns":["vc"],"resultFormat":"compactedList"} druid.query.type scan - Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE Select Operator expressions: vc (type: timestamp with local time zone) outputColumnNames: _col0 - Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE ListSink PREHOOK: query: EXPLAIN @@ -115,11 +113,9 @@ STAGE PLANS: druid.fieldTypes timestamp with local time zone druid.query.json {"queryType":"scan","dataSource":"wikipedia","intervals":["1900-01-01T00:00:00.000Z/2012-03-01T08:00:00.000Z"],"virtualColumns":[{"type":"expression","name":"vc","expression":"\"__time\"","outputType":"LONG"}],"columns":["vc"],"resultFormat":"compactedList"} druid.query.type scan - Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE Select Operator expressions: vc (type: timestamp with local time zone) outputColumnNames: _col0 - Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE ListSink PREHOOK: query: EXPLAIN @@ -147,11 +143,9 @@ STAGE PLANS: druid.fieldTypes timestamp with local time zone druid.query.json {"queryType":"scan","dataSource":"wikipedia","intervals":["2010-01-01T08:00:00.000Z/2012-03-01T08:00:00.001Z"],"virtualColumns":[{"type":"expression","name":"vc","expression":"\"__time\"","outputType":"LONG"}],"columns":["vc"],"resultFormat":"compactedList"} druid.query.type scan - Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE Select Operator expressions: vc (type: timestamp with local time zone) outputColumnNames: _col0 - Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE ListSink PREHOOK: query: EXPLAIN @@ -181,11 +175,9 @@ STAGE PLANS: druid.fieldTypes timestamp with local time zone druid.query.json {"queryType":"scan","dataSource":"wikipedia","intervals":["2010-01-01T08:00:00.000Z/2011-01-01T08:00:00.000Z"],"virtualColumns":[{"type":"expression","name":"vc","expression":"\"__time\"","outputType":"LONG"}],"columns":["vc"],"resultFormat":"compactedList"} druid.query.type scan - Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE Select Operator expressions: vc (type: timestamp with local time zone) outputColumnNames: _col0 - Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE ListSink PREHOOK: query: EXPLAIN @@ -213,11 +205,9 @@ STAGE PLANS: druid.fieldTypes timestamp with local time zone druid.query.json {"queryType":"scan","dataSource":"wikipedia","intervals":["2010-01-01T08:00:00.000Z/2011-01-01T08:00:00.001Z"],"virtualColumns":[{"type":"expression","name":"vc","expression":"\"__time\"","outputType":"LONG"}],"columns":["vc"],"resultFormat":"compactedList"} druid.query.type scan - Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE Select Operator expressions: vc (type: timestamp with local time zone) outputColumnNames: _col0 - Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE ListSink PREHOOK: query: EXPLAIN @@ -247,11 +237,9 @@ STAGE PLANS: druid.fieldTypes timestamp with local time zone druid.query.json {"queryType":"scan","dataSource":"wikipedia","intervals":["2010-01-01T08:00:00.000Z/2011-01-01T08:00:00.001Z","2012-01-01T08:00:00.000Z/2013-01-01T08:00:00.001Z"],"virtualColumns":[{"type":"expression","name":"vc","expression":"\"__time\"","outputType":"LONG"}],"columns":["vc"],"resultFormat":"compactedList"} druid.query.type scan - Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE Select Operator expressions: vc (type: timestamp with local time zone) outputColumnNames: _col0 - Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE ListSink PREHOOK: query: EXPLAIN @@ -281,11 +269,9 @@ STAGE PLANS: druid.fieldTypes timestamp with local time zone druid.query.json {"queryType":"scan","dataSource":"wikipedia","intervals":["2010-01-01T08:00:00.000Z/2012-01-01T08:00:00.001Z"],"virtualColumns":[{"type":"expression","name":"vc","expression":"\"__time\"","outputType":"LONG"}],"columns":["vc"],"resultFormat":"compactedList"} druid.query.type scan - Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE Select Operator expressions: vc (type: timestamp with local time zone) outputColumnNames: _col0 - Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE ListSink PREHOOK: query: EXPLAIN @@ -313,11 +299,9 @@ STAGE PLANS: druid.fieldTypes timestamp with local time zone druid.query.json {"queryType":"scan","dataSource":"wikipedia","intervals":["2010-01-01T08:00:00.000Z/2010-01-01T08:00:00.001Z","2011-01-01T08:00:00.000Z/2011-01-01T08:00:00.001Z"],"virtualColumns":[{"type":"expression","name":"vc","expression":"\"__time\"","outputType":"LONG"}],"columns":["vc"],"resultFormat":"compactedList"} druid.query.type scan - Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE Select Operator expressions: vc (type: timestamp with local time zone) outputColumnNames: _col0 - Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE ListSink PREHOOK: query: EXPLAIN @@ -345,11 +329,9 @@ STAGE PLANS: druid.fieldTypes timestamp with local time zone,string druid.query.json {"queryType":"scan","dataSource":"wikipedia","intervals":["2010-01-01T08:00:00.000Z/2010-01-01T08:00:00.001Z","2011-01-01T08:00:00.000Z/2011-01-01T08:00:00.001Z"],"filter":{"type":"selector","dimension":"robot","value":"user1"},"virtualColumns":[{"type":"expression","name":"vc","expression":"\"__time\"","outputType":"LONG"},{"type":"expression","name":"vc0","expression":"'user1'","outputType":"STRING"}],"columns":["vc","vc0"],"resultFormat":"compactedList"} druid.query.type scan - Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE Select Operator expressions: vc (type: timestamp with local time zone), vc0 (type: string) outputColumnNames: _col0, _col1 - Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE ListSink PREHOOK: query: EXPLAIN @@ -377,10 +359,166 @@ STAGE PLANS: druid.fieldTypes timestamp with local time zone,string druid.query.json {"queryType":"scan","dataSource":"wikipedia","intervals":["1900-01-01T00:00:00.000Z/3000-01-01T00:00:00.000Z"],"filter":{"type":"or","fields":[{"type":"in","dimension":"__time","values":["2010-01-01T00:00:00.000Z","2011-01-01T00:00:00.000Z"],"extractionFn":{"type":"timeFormat","format":"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'","timeZone":"US/Pacific"}},{"type":"selector","dimension":"robot","value":"user1"}]},"virtualColumns":[{"type":"expression","name":"vc","expression":"\"__time\"","outputType":"LONG"}],"columns":["vc","robot"],"resultFormat":"compactedList"} druid.query.type scan - Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE Select Operator expressions: vc (type: timestamp with local time zone), robot (type: string) outputColumnNames: _col0, _col1 - Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE ListSink +PREHOOK: query: EXPLAIN +SELECT `__time`, robot +FROM druid_table_1_n0 +WHERE floor(`__time` to MONTH) = '2010-01-01 00:00:00' +PREHOOK: type: QUERY +POSTHOOK: query: EXPLAIN +SELECT `__time`, robot +FROM druid_table_1_n0 +WHERE floor(`__time` to MONTH) = '2010-01-01 00:00:00' +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-0 + Fetch Operator + limit: -1 + Processor Tree: + TableScan + alias: druid_table_1_n0 + properties: + druid.fieldNames vc,robot + druid.fieldTypes timestamp with local time zone,string + druid.query.json {"queryType":"scan","dataSource":"wikipedia","intervals":["2010-01-01T08:00:00.000Z/2010-02-01T08:00:00.000Z"],"virtualColumns":[{"type":"expression","name":"vc","expression":"\"__time\"","outputType":"LONG"}],"columns":["vc","robot"],"resultFormat":"compactedList"} + druid.query.type scan + Select Operator + expressions: vc (type: timestamp with local time zone), robot (type: string) + outputColumnNames: _col0, _col1 + ListSink + +PREHOOK: query: EXPLAIN +SELECT `__time`, robot +FROM druid_table_1_n0 +WHERE floor(`__time` to MONTH) > '2010-01-01 00:00:00' and floor(`__time` to MONTH) <= '2011-01-01 00:00:00' +PREHOOK: type: QUERY +POSTHOOK: query: EXPLAIN +SELECT `__time`, robot +FROM druid_table_1_n0 +WHERE floor(`__time` to MONTH) > '2010-01-01 00:00:00' and floor(`__time` to MONTH) <= '2011-01-01 00:00:00' +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-0 + Fetch Operator + limit: -1 + Processor Tree: + TableScan + alias: druid_table_1_n0 + properties: + druid.fieldNames vc,robot + druid.fieldTypes timestamp with local time zone,string + druid.query.json {"queryType":"scan","dataSource":"wikipedia","intervals":["2010-02-01T08:00:00.000Z/2011-02-01T08:00:00.000Z"],"virtualColumns":[{"type":"expression","name":"vc","expression":"\"__time\"","outputType":"LONG"}],"columns":["vc","robot"],"resultFormat":"compactedList"} + druid.query.type scan + Select Operator + expressions: vc (type: timestamp with local time zone), robot (type: string) + outputColumnNames: _col0, _col1 + ListSink + +PREHOOK: query: EXPLAIN +SELECT floor(`__time` to YEAR), robot +FROM druid_table_1_n0 +WHERE floor(`__time` to MONTH) > '2010-01-01 00:00:00' and floor(`__time` to MONTH) <= '2011-01-01 00:00:00' +PREHOOK: type: QUERY +POSTHOOK: query: EXPLAIN +SELECT floor(`__time` to YEAR), robot +FROM druid_table_1_n0 +WHERE floor(`__time` to MONTH) > '2010-01-01 00:00:00' and floor(`__time` to MONTH) <= '2011-01-01 00:00:00' +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-0 + Fetch Operator + limit: -1 + Processor Tree: + TableScan + alias: druid_table_1_n0 + properties: + druid.fieldNames vc,robot + druid.fieldTypes timestamp with local time zone,string + druid.query.json {"queryType":"scan","dataSource":"wikipedia","intervals":["2010-02-01T08:00:00.000Z/2011-02-01T08:00:00.000Z"],"virtualColumns":[{"type":"expression","name":"vc","expression":"timestamp_floor(\"__time\",'P1Y','','US/Pacific')","outputType":"LONG"}],"columns":["vc","robot"],"resultFormat":"compactedList"} + druid.query.type scan + Select Operator + expressions: vc (type: timestamp with local time zone), robot (type: string) + outputColumnNames: _col0, _col1 + ListSink + +PREHOOK: query: EXPLAIN +SELECT `__time`, robot +FROM druid_table_1_n0 +WHERE floor(`__time` to YEAR) = '2010-01-01 00:00:00' AND extract(MONTH from `__time`) = 4 +PREHOOK: type: QUERY +POSTHOOK: query: EXPLAIN +SELECT `__time`, robot +FROM druid_table_1_n0 +WHERE floor(`__time` to YEAR) = '2010-01-01 00:00:00' AND extract(MONTH from `__time`) = 4 +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-0 + Fetch Operator + limit: -1 + Processor Tree: + TableScan + alias: druid_table_1_n0 + properties: + druid.fieldNames vc,robot + druid.fieldTypes timestamp with local time zone,string + druid.query.json {"queryType":"scan","dataSource":"wikipedia","intervals":["2010-04-01T07:00:00.000Z/2010-05-01T07:00:00.000Z"],"virtualColumns":[{"type":"expression","name":"vc","expression":"\"__time\"","outputType":"LONG"}],"columns":["vc","robot"],"resultFormat":"compactedList"} + druid.query.type scan + Select Operator + expressions: vc (type: timestamp with local time zone), robot (type: string) + outputColumnNames: _col0, _col1 + ListSink + +PREHOOK: query: EXPLAIN +SELECT `__time`, robot +FROM druid_table_1_n0 +WHERE floor(`__time` to YEAR) >= '2010-01-01 00:00:00' AND extract(YEAR from `__time`) = 2010 +PREHOOK: type: QUERY +POSTHOOK: query: EXPLAIN +SELECT `__time`, robot +FROM druid_table_1_n0 +WHERE floor(`__time` to YEAR) >= '2010-01-01 00:00:00' AND extract(YEAR from `__time`) = 2010 +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-0 + Fetch Operator + limit: -1 + Processor Tree: + TableScan + alias: druid_table_1_n0 + properties: + druid.fieldNames vc,robot + druid.fieldTypes timestamp with local time zone,string + druid.query.json {"queryType":"scan","dataSource":"wikipedia","intervals":["2010-01-01T08:00:00.000Z/2011-01-01T08:00:00.000Z"],"virtualColumns":[{"type":"expression","name":"vc","expression":"\"__time\"","outputType":"LONG"}],"columns":["vc","robot"],"resultFormat":"compactedList"} + druid.query.type scan + Select Operator + expressions: vc (type: timestamp with local time zone), robot (type: string) + outputColumnNames: _col0, _col1 + ListSink + +PREHOOK: query: drop TABLE druid_table_1_n0 +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@druid_table_1_n0 +PREHOOK: Output: default@druid_table_1_n0 +POSTHOOK: query: drop TABLE druid_table_1_n0 +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@druid_table_1_n0 +POSTHOOK: Output: default@druid_table_1_n0 diff --git a/ql/src/test/results/clientpositive/druid/druidmini_extractTime.q.out b/ql/src/test/results/clientpositive/druid/druidmini_extractTime.q.out index c3679a328e..c73c8094dd 100644 --- a/ql/src/test/results/clientpositive/druid/druidmini_extractTime.q.out +++ b/ql/src/test/results/clientpositive/druid/druidmini_extractTime.q.out @@ -991,7 +991,7 @@ STAGE PLANS: properties: druid.fieldNames vc,vc0 druid.fieldTypes int,string - druid.query.json {"queryType":"scan","dataSource":"default.druid_table","intervals":["1900-01-01T00:00:00.000Z/3000-01-01T00:00:00.000Z"],"filter":{"type":"and","fields":[{"type":"bound","dimension":"__time","lower":"1969","lowerStrict":false,"ordering":"numeric","extractionFn":{"type":"timeFormat","format":"yyyy","timeZone":"US/Pacific","locale":"en-US"}},{"type":"expression","expression":"(CAST(timestamp_extract(\"__time\",'YEAR','US/Pacific'), 'STRING') == '1969')"}]},"virtualColumns":[{"type":"expression","name":"vc","expression":"timestamp_extract(\"__time\",'YEAR','US/Pacific')","outputType":"LONG"},{"type":"expression","name":"vc0","expression":"substring(timestamp_format(timestamp_floor(\"__time\",'P1D','','US/Pacific'),'yyyy-MM-dd','US/Pacific'), 0, 4)","outputType":"STRING"}],"columns":["vc","vc0"],"resultFormat":"compactedList","limit":1} + druid.query.json {"queryType":"scan","dataSource":"default.druid_table","intervals":["1900-01-01T00:00:00.000Z/3000-01-01T00:00:00.000Z"],"filter":{"type":"and","fields":[{"type":"bound","dimension":"__time","lower":"1969-01-01T00:00:00.000Z","lowerStrict":false,"ordering":"lexicographic","extractionFn":{"type":"timeFormat","format":"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'","timeZone":"US/Pacific"}},{"type":"expression","expression":"(CAST(timestamp_extract(\"__time\",'YEAR','US/Pacific'), 'STRING') == '1969')"}]},"virtualColumns":[{"type":"expression","name":"vc","expression":"timestamp_extract(\"__time\",'YEAR','US/Pacific')","outputType":"LONG"},{"type":"expression","name":"vc0","expression":"substring(timestamp_format(timestamp_floor(\"__time\",'P1D','','US/Pacific'),'yyyy-MM-dd','US/Pacific'), 0, 4)","outputType":"STRING"}],"columns":["vc","vc0"],"resultFormat":"compactedList","limit":1} druid.query.type scan Select Operator expressions: vc (type: int), vc0 (type: string) diff --git a/ql/src/test/results/clientpositive/druid/druidmini_floorTime.q.out b/ql/src/test/results/clientpositive/druid/druidmini_floorTime.q.out index 97d07049fe..5e1ffaea45 100644 --- a/ql/src/test/results/clientpositive/druid/druidmini_floorTime.q.out +++ b/ql/src/test/results/clientpositive/druid/druidmini_floorTime.q.out @@ -992,7 +992,7 @@ STAGE PLANS: properties: druid.fieldNames vc,vc0 druid.fieldTypes int,string - druid.query.json {"queryType":"scan","dataSource":"default.druid_table_n2","intervals":["1900-01-01T00:00:00.000Z/3000-01-01T00:00:00.000Z"],"filter":{"type":"and","fields":[{"type":"bound","dimension":"__time","lower":"1969","lowerStrict":false,"ordering":"numeric","extractionFn":{"type":"timeFormat","format":"yyyy","timeZone":"US/Pacific","locale":"en-US"}},{"type":"expression","expression":"(CAST(timestamp_extract(\"__time\",'YEAR','US/Pacific'), 'STRING') == '1969')"}]},"virtualColumns":[{"type":"expression","name":"vc","expression":"timestamp_extract(\"__time\",'YEAR','US/Pacific')","outputType":"LONG"},{"type":"expression","name":"vc0","expression":"substring(timestamp_format(timestamp_floor(\"__time\",'P1D','','US/Pacific'),'yyyy-MM-dd','US/Pacific'), 0, 4)","outputType":"STRING"}],"columns":["vc","vc0"],"resultFormat":"compactedList","limit":1} + druid.query.json {"queryType":"scan","dataSource":"default.druid_table_n2","intervals":["1900-01-01T00:00:00.000Z/3000-01-01T00:00:00.000Z"],"filter":{"type":"and","fields":[{"type":"bound","dimension":"__time","lower":"1969-01-01T00:00:00.000Z","lowerStrict":false,"ordering":"lexicographic","extractionFn":{"type":"timeFormat","format":"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'","timeZone":"US/Pacific"}},{"type":"expression","expression":"(CAST(timestamp_extract(\"__time\",'YEAR','US/Pacific'), 'STRING') == '1969')"}]},"virtualColumns":[{"type":"expression","name":"vc","expression":"timestamp_extract(\"__time\",'YEAR','US/Pacific')","outputType":"LONG"},{"type":"expression","name":"vc0","expression":"substring(timestamp_format(timestamp_floor(\"__time\",'P1D','','US/Pacific'),'yyyy-MM-dd','US/Pacific'), 0, 4)","outputType":"STRING"}],"columns":["vc","vc0"],"resultFormat":"compactedList","limit":1} druid.query.type scan Select Operator expressions: vc (type: int), vc0 (type: string) -- 2.15.1 (Apple Git-101)