From 4eb7ba1d40fed09073e5412de393d2236796e7d0 Mon Sep 17 00:00:00 2001 From: Nishant Bangarwa Date: Sun, 27 May 2018 10:46:44 -0700 Subject: [PATCH] HIVE-18583 : Enable DateRangeRules (Nishant Bangarwa via Ashutosh Chauhan) Signed-off-by: Ashutosh Chauhan --- .../ql/optimizer/calcite/rules/HiveDruidRules.java | 4 + .../hadoop/hive/ql/parse/CalcitePlanner.java | 1 + .../test/queries/clientpositive/druid_intervals.q | 29 ++ .../clientpositive/druid/druid_intervals.q.out | 524 +++++++++++++++++++++ 4 files changed, 558 insertions(+) create mode 100644 ql/src/test/results/clientpositive/druid/druid_intervals.q.out 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/results/clientpositive/druid/druid_intervals.q.out b/ql/src/test/results/clientpositive/druid/druid_intervals.q.out new file mode 100644 index 0000000000..203933a9e1 --- /dev/null +++ b/ql/src/test/results/clientpositive/druid/druid_intervals.q.out @@ -0,0 +1,524 @@ +PREHOOK: query: CREATE EXTERNAL TABLE druid_table_1_n0 +STORED BY 'org.apache.hadoop.hive.druid.QTestDruidStorageHandler' +TBLPROPERTIES ("druid.datasource" = "wikipedia") +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@druid_table_1_n0 +POSTHOOK: query: CREATE EXTERNAL TABLE druid_table_1_n0 +STORED BY 'org.apache.hadoop.hive.druid.QTestDruidStorageHandler' +TBLPROPERTIES ("druid.datasource" = "wikipedia") +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@druid_table_1_n0 +PREHOOK: query: DESCRIBE FORMATTED druid_table_1_n0 +PREHOOK: type: DESCTABLE +PREHOOK: Input: default@druid_table_1_n0 +POSTHOOK: query: DESCRIBE FORMATTED druid_table_1_n0 +POSTHOOK: type: DESCTABLE +POSTHOOK: Input: default@druid_table_1_n0 +# col_name data_type comment +__time timestamp with local time zone from deserializer +robot string from deserializer +namespace string from deserializer +anonymous string from deserializer +unpatrolled string from deserializer +page string from deserializer +language string from deserializer +newpage string from deserializer +user string from deserializer +count float from deserializer +added float from deserializer +delta float from deserializer +variation float from deserializer +deleted float from deserializer + +# Detailed Table Information +Database: default +#### A masked pattern was here #### +Retention: 0 +#### A masked pattern was here #### +Table Type: EXTERNAL_TABLE +Table Parameters: + COLUMN_STATS_ACCURATE {\"BASIC_STATS\":\"true\",\"COLUMN_STATS\":{\"__time\":\"true\",\"added\":\"true\",\"anonymous\":\"true\",\"count\":\"true\",\"deleted\":\"true\",\"delta\":\"true\",\"language\":\"true\",\"namespace\":\"true\",\"newpage\":\"true\",\"page\":\"true\",\"robot\":\"true\",\"unpatrolled\":\"true\",\"user\":\"true\",\"variation\":\"true\"}} + EXTERNAL TRUE + bucketing_version 2 + druid.datasource wikipedia + numFiles 0 + numRows 0 + rawDataSize 0 + storage_handler org.apache.hadoop.hive.druid.QTestDruidStorageHandler + totalSize 0 +#### A masked pattern was here #### + +# Storage Information +SerDe Library: org.apache.hadoop.hive.druid.QTestDruidSerDe +InputFormat: null +OutputFormat: null +Compressed: No +Num Buckets: -1 +Bucket Columns: [] +Sort Columns: [] +Storage Desc Params: + serialization.format 1 +PREHOOK: query: EXPLAIN +SELECT `__time` +FROM druid_table_1_n0 +PREHOOK: type: QUERY +POSTHOOK: query: EXPLAIN +SELECT `__time` +FROM druid_table_1_n0 +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 + 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 + Select Operator + expressions: vc (type: timestamp with local time zone) + outputColumnNames: _col0 + ListSink + +PREHOOK: query: EXPLAIN +SELECT `__time` +FROM druid_table_1_n0 +WHERE `__time` < '2012-03-01 00:00:00' +PREHOOK: type: QUERY +POSTHOOK: query: EXPLAIN +SELECT `__time` +FROM druid_table_1_n0 +WHERE `__time` < '2012-03-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 + 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 + Select Operator + expressions: vc (type: timestamp with local time zone) + outputColumnNames: _col0 + ListSink + +PREHOOK: query: EXPLAIN +SELECT `__time` +FROM druid_table_1_n0 +WHERE `__time` >= '2010-01-01 00:00:00' AND `__time` <= '2012-03-01 00:00:00' +PREHOOK: type: QUERY +POSTHOOK: query: EXPLAIN +SELECT `__time` +FROM druid_table_1_n0 +WHERE `__time` >= '2010-01-01 00:00:00' AND `__time` <= '2012-03-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 + 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 + Select Operator + expressions: vc (type: timestamp with local time zone) + outputColumnNames: _col0 + ListSink + +PREHOOK: query: EXPLAIN +SELECT `__time` +FROM druid_table_1_n0 +WHERE `__time` >= '2010-01-01 00:00:00' AND `__time` <= '2012-03-01 00:00:00' + AND `__time` < '2011-01-01 00:00:00' +PREHOOK: type: QUERY +POSTHOOK: query: EXPLAIN +SELECT `__time` +FROM druid_table_1_n0 +WHERE `__time` >= '2010-01-01 00:00:00' AND `__time` <= '2012-03-01 00:00:00' + AND `__time` < '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 + 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 + Select Operator + expressions: vc (type: timestamp with local time zone) + outputColumnNames: _col0 + ListSink + +PREHOOK: query: EXPLAIN +SELECT `__time` +FROM druid_table_1_n0 +WHERE `__time` BETWEEN '2010-01-01 00:00:00' AND '2011-01-01 00:00:00' +PREHOOK: type: QUERY +POSTHOOK: query: EXPLAIN +SELECT `__time` +FROM druid_table_1_n0 +WHERE `__time` BETWEEN '2010-01-01 00:00:00' AND '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 + 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 + Select Operator + expressions: vc (type: timestamp with local time zone) + outputColumnNames: _col0 + ListSink + +PREHOOK: query: EXPLAIN +SELECT `__time` +FROM druid_table_1_n0 +WHERE (`__time` BETWEEN '2010-01-01 00:00:00' AND '2011-01-01 00:00:00') + OR (`__time` BETWEEN '2012-01-01 00:00:00' AND '2013-01-01 00:00:00') +PREHOOK: type: QUERY +POSTHOOK: query: EXPLAIN +SELECT `__time` +FROM druid_table_1_n0 +WHERE (`__time` BETWEEN '2010-01-01 00:00:00' AND '2011-01-01 00:00:00') + OR (`__time` BETWEEN '2012-01-01 00:00:00' AND '2013-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 + 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 + Select Operator + expressions: vc (type: timestamp with local time zone) + outputColumnNames: _col0 + ListSink + +PREHOOK: query: EXPLAIN +SELECT `__time` +FROM druid_table_1_n0 +WHERE (`__time` BETWEEN '2010-01-01 00:00:00' AND '2011-01-01 00:00:00') + OR (`__time` BETWEEN '2010-06-01 00:00:00' AND '2012-01-01 00:00:00') +PREHOOK: type: QUERY +POSTHOOK: query: EXPLAIN +SELECT `__time` +FROM druid_table_1_n0 +WHERE (`__time` BETWEEN '2010-01-01 00:00:00' AND '2011-01-01 00:00:00') + OR (`__time` BETWEEN '2010-06-01 00:00:00' AND '2012-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 + 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 + Select Operator + expressions: vc (type: timestamp with local time zone) + outputColumnNames: _col0 + ListSink + +PREHOOK: query: EXPLAIN +SELECT `__time` +FROM druid_table_1_n0 +WHERE `__time` IN ('2010-01-01 00:00:00','2011-01-01 00:00:00') +PREHOOK: type: QUERY +POSTHOOK: query: EXPLAIN +SELECT `__time` +FROM druid_table_1_n0 +WHERE `__time` IN ('2010-01-01 00:00:00','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 + 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 + Select Operator + expressions: vc (type: timestamp with local time zone) + outputColumnNames: _col0 + ListSink + +PREHOOK: query: EXPLAIN +SELECT `__time`, robot +FROM druid_table_1_n0 +WHERE robot = 'user1' AND `__time` IN ('2010-01-01 00:00:00','2011-01-01 00:00:00') +PREHOOK: type: QUERY +POSTHOOK: query: EXPLAIN +SELECT `__time`, robot +FROM druid_table_1_n0 +WHERE robot = 'user1' AND `__time` IN ('2010-01-01 00:00:00','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,vc0 + 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 + Select Operator + expressions: vc (type: timestamp with local time zone), vc0 (type: string) + outputColumnNames: _col0, _col1 + ListSink + +PREHOOK: query: 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') +PREHOOK: type: QUERY +POSTHOOK: query: 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') +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":["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 + 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' +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 -- 2.15.1 (Apple Git-101)