diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g index c903e8f..7072109 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g +++ ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g @@ -109,6 +109,7 @@ TOK_DATE; TOK_DATELITERAL; TOK_DATETIME; TOK_TIMESTAMP; +TOK_TIMESTAMPLITERAL; TOK_STRING; TOK_CHAR; TOK_VARCHAR; diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/IdentifiersParser.g ql/src/java/org/apache/hadoop/hive/ql/parse/IdentifiersParser.g index 13d5255..ce9a9f8 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/IdentifiersParser.g +++ ql/src/java/org/apache/hadoop/hive/ql/parse/IdentifiersParser.g @@ -218,6 +218,7 @@ constant : Number | dateLiteral + | timestampLiteral | StringLiteral | stringLiteralSequence | BigintLiteral @@ -250,6 +251,14 @@ dateLiteral } ; +timestampLiteral + : + KW_TIMESTAMP StringLiteral -> + { + adaptor.create(TOK_TIMESTAMPLITERAL, $StringLiteral.text) + } + ; + expression @init { gParent.pushMsg("expression specification", state); } @after { gParent.popMsg(state); } @@ -260,7 +269,6 @@ expression atomExpression : KW_NULL -> TOK_NULL - | dateLiteral | constant | castExpression | caseExpression diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java index e065983..4d90327 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java @@ -19,6 +19,7 @@ package org.apache.hadoop.hive.ql.parse; import java.sql.Date; +import java.sql.Timestamp; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -170,7 +171,8 @@ public static ExprNodeDesc processGByExpr(Node nd, Object procCtx) tf.getStrExprProcessor()); opRules.put(new RuleRegExp("R4", HiveParser.KW_TRUE + "%|" + HiveParser.KW_FALSE + "%"), tf.getBoolExprProcessor()); - opRules.put(new RuleRegExp("R5", HiveParser.TOK_DATELITERAL + "%"), tf.getDateExprProcessor()); + opRules.put(new RuleRegExp("R5", HiveParser.TOK_DATELITERAL + "%|" + + HiveParser.TOK_TIMESTAMPLITERAL + "%"), tf.getDateTimeExprProcessor()); opRules.put(new RuleRegExp("R6", HiveParser.TOK_TABLE_OR_COL + "%"), tf.getColumnExprProcessor()); opRules.put(new RuleRegExp("R7", HiveParser.TOK_SUBQUERY_OP + "%"), @@ -420,7 +422,7 @@ public BoolExprProcessor getBoolExprProcessor() { /** * Processor for date constants. */ - public static class DateExprProcessor implements NodeProcessor { + public static class DateTimeExprProcessor implements NodeProcessor { @Override public Object process(Node nd, Stack stack, NodeProcessorCtx procCtx, @@ -437,14 +439,24 @@ public Object process(Node nd, Stack stack, NodeProcessorCtx procCtx, } ASTNode expr = (ASTNode) nd; + String timeString = BaseSemanticAnalyzer.stripQuotes(expr.getText()); // Get the string value and convert to a Date value. try { - String dateString = BaseSemanticAnalyzer.stripQuotes(expr.getText()); - Date date = Date.valueOf(dateString); - return new ExprNodeConstantDesc(TypeInfoFactory.dateTypeInfo, date); - } catch (IllegalArgumentException err) { - throw new SemanticException("Unable to convert date literal string to date value.", err); + // todo replace below with joda-time, which supports timezone + if (expr.getType() == HiveParser.TOK_DATELITERAL) { + PrimitiveTypeInfo typeInfo = TypeInfoFactory.dateTypeInfo; + return new ExprNodeConstantDesc(typeInfo, + Date.valueOf(timeString)); + } + if (expr.getType() == HiveParser.TOK_TIMESTAMPLITERAL) { + return new ExprNodeConstantDesc(TypeInfoFactory.timestampTypeInfo, + Timestamp.valueOf(timeString)); + } + throw new IllegalArgumentException("Invalid time literal type " + expr.getType()); + } catch (Exception err) { + throw new SemanticException( + "Unable to convert time literal '" + timeString + "' to time value.", err); } } } @@ -454,8 +466,8 @@ public Object process(Node nd, Stack stack, NodeProcessorCtx procCtx, * * @return DateExprProcessor. */ - public DateExprProcessor getDateExprProcessor() { - return new DateExprProcessor(); + public DateTimeExprProcessor getDateTimeExprProcessor() { + return new DateTimeExprProcessor(); } /** diff --git ql/src/test/queries/clientnegative/timestamp_literal.q ql/src/test/queries/clientnegative/timestamp_literal.q new file mode 100644 index 0000000..1360dc9 --- /dev/null +++ ql/src/test/queries/clientnegative/timestamp_literal.q @@ -0,0 +1,2 @@ +-- TimeZone is not yet supported +SELECT TIMESTAMP '2012-12-29 20:01:00 +03:00'; diff --git ql/src/test/queries/clientpositive/partition_timestamp.q ql/src/test/queries/clientpositive/partition_timestamp.q new file mode 100644 index 0000000..aa1a0c0 --- /dev/null +++ ql/src/test/queries/clientpositive/partition_timestamp.q @@ -0,0 +1,57 @@ +drop table partition_timestamp_1; + +create table partition_timestamp_1 (key string, value string) partitioned by (dt timestamp, region string); + +insert overwrite table partition_timestamp_1 partition(dt='2000-01-01 01:00:00', region= '1') + select * from src tablesample (10 rows); +insert overwrite table partition_timestamp_1 partition(dt='2000-01-01 02:00:00', region= '2') + select * from src tablesample (5 rows); +insert overwrite table partition_timestamp_1 partition(dt='2001-01-01 01:00:00', region= '2020-20-20') + select * from src tablesample (5 rows); +insert overwrite table partition_timestamp_1 partition(dt='2001-01-01 02:00:00', region= '1') + select * from src tablesample (20 rows); +insert overwrite table partition_timestamp_1 partition(dt='2001-01-01 03:00:00', region= '10') + select * from src tablesample (11 rows); + +select distinct dt from partition_timestamp_1; +select * from partition_timestamp_1 where dt = '2000-01-01 01:00:00' and region = '2' order by key,value; + +-- 10 +select count(*) from partition_timestamp_1 where dt = timestamp '2000-01-01 01:00:00'; +-- 10. Also try with string value in predicate +select count(*) from partition_timestamp_1 where dt = '2000-01-01 01:00:00'; +-- 5 +select count(*) from partition_timestamp_1 where dt = timestamp '2000-01-01 02:00:00' and region = '2'; +-- 11 +select count(*) from partition_timestamp_1 where dt = timestamp '2001-01-01 03:00:00' and region = '10'; +-- 30 +select count(*) from partition_timestamp_1 where region = '1'; +-- 0 +select count(*) from partition_timestamp_1 where dt = timestamp '2000-01-01 01:00:00' and region = '3'; +-- 0 +select count(*) from partition_timestamp_1 where dt = timestamp '1999-01-01 01:00:00'; + +-- Try other comparison operations + +-- 20 +select count(*) from partition_timestamp_1 where dt > timestamp '2000-01-01 01:00:00' and region = '1'; +-- 10 +select count(*) from partition_timestamp_1 where dt < timestamp '2000-01-02 01:00:00' and region = '1'; +-- 20 +select count(*) from partition_timestamp_1 where dt >= timestamp '2000-01-02 01:00:00' and region = '1'; +-- 10 +select count(*) from partition_timestamp_1 where dt <= timestamp '2000-01-01 01:00:00' and region = '1'; +-- 20 +select count(*) from partition_timestamp_1 where dt <> timestamp '2000-01-01 01:00:00' and region = '1'; +-- 10 +select count(*) from partition_timestamp_1 where dt between timestamp '1999-12-30 12:00:00' and timestamp '2000-01-03 12:00:00' and region = '1'; + + +-- Try a string key with timestamp-like strings + +-- 5 +select count(*) from partition_timestamp_1 where region = '2020-20-20'; +-- 5 +select count(*) from partition_timestamp_1 where region > '2010-01-01'; + +drop table partition_timestamp_1; diff --git ql/src/test/queries/clientpositive/partition_timestamp2.q ql/src/test/queries/clientpositive/partition_timestamp2.q new file mode 100644 index 0000000..1f5ec26 --- /dev/null +++ ql/src/test/queries/clientpositive/partition_timestamp2.q @@ -0,0 +1,56 @@ +drop table partition_timestamp2_1; + +create table partition_timestamp2_1 (key string, value string) partitioned by (dt timestamp, region int); + +-- test timestamp literal syntax +from (select * from src tablesample (1 rows)) x +insert overwrite table partition_timestamp2_1 partition(dt=timestamp '2000-01-01 00:00:00', region=1) select * +insert overwrite table partition_timestamp2_1 partition(dt=timestamp '2000-01-01 01:00:00', region=1) select * +insert overwrite table partition_timestamp2_1 partition(dt=timestamp '1999-01-01 00:00:00', region=2) select * +insert overwrite table partition_timestamp2_1 partition(dt=timestamp '1999-01-01 01:00:00', region=2) select *; + +select distinct dt from partition_timestamp2_1; +select * from partition_timestamp2_1; + +-- insert overwrite +insert overwrite table partition_timestamp2_1 partition(dt=timestamp '2000-01-01 00:00:00', region=1) + select 'changed_key', 'changed_value' from src tablesample (2 rows); +select * from partition_timestamp2_1; + +-- truncate +truncate table partition_timestamp2_1 partition(dt=timestamp '2000-01-01 00:00:00', region=1); +select distinct dt from partition_timestamp2_1; +select * from partition_timestamp2_1; + +-- alter table add partition +alter table partition_timestamp2_1 add partition (dt=timestamp '1980-01-02 00:00:00', region=3); +select distinct dt from partition_timestamp2_1; +select * from partition_timestamp2_1; + +-- alter table drop +alter table partition_timestamp2_1 drop partition (dt=timestamp '1999-01-01 01:00:00', region=2); +select distinct dt from partition_timestamp2_1; +select * from partition_timestamp2_1; + +-- alter table set serde +alter table partition_timestamp2_1 partition(dt=timestamp '1980-01-02 00:00:00', region=3) + set serde 'org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe'; + +-- alter table set fileformat +alter table partition_timestamp2_1 partition(dt=timestamp '1980-01-02 00:00:00', region=3) + set fileformat rcfile; +describe extended partition_timestamp2_1 partition(dt=timestamp '1980-01-02 00:00:00', region=3); + +insert overwrite table partition_timestamp2_1 partition(dt=timestamp '1980-01-02 00:00:00', region=3) + select * from src tablesample (2 rows); +select * from partition_timestamp2_1 order by key,value,dt,region; + +-- alter table set location +alter table partition_timestamp2_1 partition(dt=timestamp '1980-01-02 00:00:00', region=3) + set location "file:///tmp/partition_timestamp2_1"; +describe extended partition_timestamp2_1 partition(dt=timestamp '1980-01-02 00:00:00', region=3); + +-- alter table touch +alter table partition_timestamp2_1 touch partition(dt=timestamp '1980-01-02 00:00:00', region=3); + +drop table partition_timestamp2_1; diff --git ql/src/test/queries/clientpositive/timestamp_literal.q ql/src/test/queries/clientpositive/timestamp_literal.q new file mode 100644 index 0000000..2a7b91b --- /dev/null +++ ql/src/test/queries/clientpositive/timestamp_literal.q @@ -0,0 +1,12 @@ +explain +select timestamp '2011-01-01 01:01:01'; +select timestamp '2011-01-01 01:01:01'; + +explain +select '2011-01-01 01:01:01.101' <> timestamp '2011-01-01 01:01:01.100'; +select '2011-01-01 01:01:01.101' <> timestamp '2011-01-01 01:01:01.100'; + +explain +select 1 where timestamp '2011-01-01 01:01:01.101' <> timestamp '2011-01-01 01:01:01.100'; +select 1 where timestamp '2011-01-01 01:01:01.101' <> timestamp '2011-01-01 01:01:01.100'; + diff --git ql/src/test/results/clientnegative/date_literal2.q.out ql/src/test/results/clientnegative/date_literal2.q.out index 82f6425..a34cac0 100644 --- ql/src/test/results/clientnegative/date_literal2.q.out +++ ql/src/test/results/clientnegative/date_literal2.q.out @@ -1 +1 @@ -FAILED: SemanticException Unable to convert date literal string to date value. +FAILED: SemanticException Unable to convert time literal '2001/01/01' to time value. diff --git ql/src/test/results/clientnegative/date_literal3.q.out ql/src/test/results/clientnegative/date_literal3.q.out index 82f6425..f51de7c 100644 --- ql/src/test/results/clientnegative/date_literal3.q.out +++ ql/src/test/results/clientnegative/date_literal3.q.out @@ -1 +1 @@ -FAILED: SemanticException Unable to convert date literal string to date value. +FAILED: SemanticException Unable to convert time literal '2001-01-32' to time value. diff --git ql/src/test/results/clientnegative/illegal_partition_type4.q.out ql/src/test/results/clientnegative/illegal_partition_type4.q.out index e388086..861ee51 100644 --- ql/src/test/results/clientnegative/illegal_partition_type4.q.out +++ ql/src/test/results/clientnegative/illegal_partition_type4.q.out @@ -6,4 +6,4 @@ POSTHOOK: query: create table tab1(s string) PARTITIONED BY(dt date, st string) POSTHOOK: type: CREATETABLE POSTHOOK: Output: database:default POSTHOOK: Output: default@tab1 -FAILED: SemanticException Unable to convert date literal string to date value. +FAILED: SemanticException Unable to convert time literal 'foo' to time value. diff --git ql/src/test/results/clientnegative/timestamp_literal.q.out ql/src/test/results/clientnegative/timestamp_literal.q.out new file mode 100644 index 0000000..b9c92e6 --- /dev/null +++ ql/src/test/results/clientnegative/timestamp_literal.q.out @@ -0,0 +1 @@ +FAILED: SemanticException Unable to convert time literal '2012-12-29 20:01:00 +03:00' to time value. diff --git ql/src/test/results/clientpositive/partition_timestamp.q.out ql/src/test/results/clientpositive/partition_timestamp.q.out new file mode 100644 index 0000000..bc6ab10 --- /dev/null +++ ql/src/test/results/clientpositive/partition_timestamp.q.out @@ -0,0 +1,312 @@ +PREHOOK: query: drop table partition_timestamp_1 +PREHOOK: type: DROPTABLE +POSTHOOK: query: drop table partition_timestamp_1 +POSTHOOK: type: DROPTABLE +PREHOOK: query: create table partition_timestamp_1 (key string, value string) partitioned by (dt timestamp, region string) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@partition_timestamp_1 +POSTHOOK: query: create table partition_timestamp_1 (key string, value string) partitioned by (dt timestamp, region string) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@partition_timestamp_1 +PREHOOK: query: insert overwrite table partition_timestamp_1 partition(dt='2000-01-01 01:00:00', region= '1') + select * from src tablesample (10 rows) +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: default@partition_timestamp_1@dt=2000-01-01 01%3A00%3A00/region=1 +POSTHOOK: query: insert overwrite table partition_timestamp_1 partition(dt='2000-01-01 01:00:00', region= '1') + select * from src tablesample (10 rows) +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: default@partition_timestamp_1@dt=2000-01-01 01%3A00%3A00/region=1 +POSTHOOK: Lineage: partition_timestamp_1 PARTITION(dt=2000-01-01 01:00:00,region=1).key SIMPLE [(src)src.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: partition_timestamp_1 PARTITION(dt=2000-01-01 01:00:00,region=1).value SIMPLE [(src)src.FieldSchema(name:value, type:string, comment:default), ] +PREHOOK: query: insert overwrite table partition_timestamp_1 partition(dt='2000-01-01 02:00:00', region= '2') + select * from src tablesample (5 rows) +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: default@partition_timestamp_1@dt=2000-01-01 02%3A00%3A00/region=2 +POSTHOOK: query: insert overwrite table partition_timestamp_1 partition(dt='2000-01-01 02:00:00', region= '2') + select * from src tablesample (5 rows) +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: default@partition_timestamp_1@dt=2000-01-01 02%3A00%3A00/region=2 +POSTHOOK: Lineage: partition_timestamp_1 PARTITION(dt=2000-01-01 02:00:00,region=2).key SIMPLE [(src)src.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: partition_timestamp_1 PARTITION(dt=2000-01-01 02:00:00,region=2).value SIMPLE [(src)src.FieldSchema(name:value, type:string, comment:default), ] +PREHOOK: query: insert overwrite table partition_timestamp_1 partition(dt='2001-01-01 01:00:00', region= '2020-20-20') + select * from src tablesample (5 rows) +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: default@partition_timestamp_1@dt=2001-01-01 01%3A00%3A00/region=2020-20-20 +POSTHOOK: query: insert overwrite table partition_timestamp_1 partition(dt='2001-01-01 01:00:00', region= '2020-20-20') + select * from src tablesample (5 rows) +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: default@partition_timestamp_1@dt=2001-01-01 01%3A00%3A00/region=2020-20-20 +POSTHOOK: Lineage: partition_timestamp_1 PARTITION(dt=2001-01-01 01:00:00,region=2020-20-20).key SIMPLE [(src)src.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: partition_timestamp_1 PARTITION(dt=2001-01-01 01:00:00,region=2020-20-20).value SIMPLE [(src)src.FieldSchema(name:value, type:string, comment:default), ] +PREHOOK: query: insert overwrite table partition_timestamp_1 partition(dt='2001-01-01 02:00:00', region= '1') + select * from src tablesample (20 rows) +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: default@partition_timestamp_1@dt=2001-01-01 02%3A00%3A00/region=1 +POSTHOOK: query: insert overwrite table partition_timestamp_1 partition(dt='2001-01-01 02:00:00', region= '1') + select * from src tablesample (20 rows) +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: default@partition_timestamp_1@dt=2001-01-01 02%3A00%3A00/region=1 +POSTHOOK: Lineage: partition_timestamp_1 PARTITION(dt=2001-01-01 02:00:00,region=1).key SIMPLE [(src)src.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: partition_timestamp_1 PARTITION(dt=2001-01-01 02:00:00,region=1).value SIMPLE [(src)src.FieldSchema(name:value, type:string, comment:default), ] +PREHOOK: query: insert overwrite table partition_timestamp_1 partition(dt='2001-01-01 03:00:00', region= '10') + select * from src tablesample (11 rows) +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: default@partition_timestamp_1@dt=2001-01-01 03%3A00%3A00/region=10 +POSTHOOK: query: insert overwrite table partition_timestamp_1 partition(dt='2001-01-01 03:00:00', region= '10') + select * from src tablesample (11 rows) +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: default@partition_timestamp_1@dt=2001-01-01 03%3A00%3A00/region=10 +POSTHOOK: Lineage: partition_timestamp_1 PARTITION(dt=2001-01-01 03:00:00,region=10).key SIMPLE [(src)src.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: partition_timestamp_1 PARTITION(dt=2001-01-01 03:00:00,region=10).value SIMPLE [(src)src.FieldSchema(name:value, type:string, comment:default), ] +PREHOOK: query: select distinct dt from partition_timestamp_1 +PREHOOK: type: QUERY +PREHOOK: Input: default@partition_timestamp_1 +PREHOOK: Input: default@partition_timestamp_1@dt=2000-01-01 01%3A00%3A00/region=1 +PREHOOK: Input: default@partition_timestamp_1@dt=2000-01-01 02%3A00%3A00/region=2 +PREHOOK: Input: default@partition_timestamp_1@dt=2001-01-01 01%3A00%3A00/region=2020-20-20 +PREHOOK: Input: default@partition_timestamp_1@dt=2001-01-01 02%3A00%3A00/region=1 +PREHOOK: Input: default@partition_timestamp_1@dt=2001-01-01 03%3A00%3A00/region=10 +#### A masked pattern was here #### +POSTHOOK: query: select distinct dt from partition_timestamp_1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@partition_timestamp_1 +POSTHOOK: Input: default@partition_timestamp_1@dt=2000-01-01 01%3A00%3A00/region=1 +POSTHOOK: Input: default@partition_timestamp_1@dt=2000-01-01 02%3A00%3A00/region=2 +POSTHOOK: Input: default@partition_timestamp_1@dt=2001-01-01 01%3A00%3A00/region=2020-20-20 +POSTHOOK: Input: default@partition_timestamp_1@dt=2001-01-01 02%3A00%3A00/region=1 +POSTHOOK: Input: default@partition_timestamp_1@dt=2001-01-01 03%3A00%3A00/region=10 +#### A masked pattern was here #### +2000-01-01 01:00:00 +2000-01-01 02:00:00 +2001-01-01 01:00:00 +2001-01-01 02:00:00 +2001-01-01 03:00:00 +PREHOOK: query: select * from partition_timestamp_1 where dt = '2000-01-01 01:00:00' and region = '2' order by key,value +PREHOOK: type: QUERY +PREHOOK: Input: default@partition_timestamp_1 +#### A masked pattern was here #### +POSTHOOK: query: select * from partition_timestamp_1 where dt = '2000-01-01 01:00:00' and region = '2' order by key,value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@partition_timestamp_1 +#### A masked pattern was here #### +PREHOOK: query: -- 10 +select count(*) from partition_timestamp_1 where dt = timestamp '2000-01-01 01:00:00' +PREHOOK: type: QUERY +PREHOOK: Input: default@partition_timestamp_1 +PREHOOK: Input: default@partition_timestamp_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +POSTHOOK: query: -- 10 +select count(*) from partition_timestamp_1 where dt = timestamp '2000-01-01 01:00:00' +POSTHOOK: type: QUERY +POSTHOOK: Input: default@partition_timestamp_1 +POSTHOOK: Input: default@partition_timestamp_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +10 +PREHOOK: query: -- 10. Also try with string value in predicate +select count(*) from partition_timestamp_1 where dt = '2000-01-01 01:00:00' +PREHOOK: type: QUERY +PREHOOK: Input: default@partition_timestamp_1 +PREHOOK: Input: default@partition_timestamp_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +POSTHOOK: query: -- 10. Also try with string value in predicate +select count(*) from partition_timestamp_1 where dt = '2000-01-01 01:00:00' +POSTHOOK: type: QUERY +POSTHOOK: Input: default@partition_timestamp_1 +POSTHOOK: Input: default@partition_timestamp_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +10 +PREHOOK: query: -- 5 +select count(*) from partition_timestamp_1 where dt = timestamp '2000-01-01 02:00:00' and region = '2' +PREHOOK: type: QUERY +PREHOOK: Input: default@partition_timestamp_1 +PREHOOK: Input: default@partition_timestamp_1@dt=2000-01-01 02%3A00%3A00/region=2 +#### A masked pattern was here #### +POSTHOOK: query: -- 5 +select count(*) from partition_timestamp_1 where dt = timestamp '2000-01-01 02:00:00' and region = '2' +POSTHOOK: type: QUERY +POSTHOOK: Input: default@partition_timestamp_1 +POSTHOOK: Input: default@partition_timestamp_1@dt=2000-01-01 02%3A00%3A00/region=2 +#### A masked pattern was here #### +5 +PREHOOK: query: -- 11 +select count(*) from partition_timestamp_1 where dt = timestamp '2001-01-01 03:00:00' and region = '10' +PREHOOK: type: QUERY +PREHOOK: Input: default@partition_timestamp_1 +PREHOOK: Input: default@partition_timestamp_1@dt=2001-01-01 03%3A00%3A00/region=10 +#### A masked pattern was here #### +POSTHOOK: query: -- 11 +select count(*) from partition_timestamp_1 where dt = timestamp '2001-01-01 03:00:00' and region = '10' +POSTHOOK: type: QUERY +POSTHOOK: Input: default@partition_timestamp_1 +POSTHOOK: Input: default@partition_timestamp_1@dt=2001-01-01 03%3A00%3A00/region=10 +#### A masked pattern was here #### +11 +PREHOOK: query: -- 30 +select count(*) from partition_timestamp_1 where region = '1' +PREHOOK: type: QUERY +PREHOOK: Input: default@partition_timestamp_1 +PREHOOK: Input: default@partition_timestamp_1@dt=2000-01-01 01%3A00%3A00/region=1 +PREHOOK: Input: default@partition_timestamp_1@dt=2001-01-01 02%3A00%3A00/region=1 +#### A masked pattern was here #### +POSTHOOK: query: -- 30 +select count(*) from partition_timestamp_1 where region = '1' +POSTHOOK: type: QUERY +POSTHOOK: Input: default@partition_timestamp_1 +POSTHOOK: Input: default@partition_timestamp_1@dt=2000-01-01 01%3A00%3A00/region=1 +POSTHOOK: Input: default@partition_timestamp_1@dt=2001-01-01 02%3A00%3A00/region=1 +#### A masked pattern was here #### +30 +PREHOOK: query: -- 0 +select count(*) from partition_timestamp_1 where dt = timestamp '2000-01-01 01:00:00' and region = '3' +PREHOOK: type: QUERY +PREHOOK: Input: default@partition_timestamp_1 +#### A masked pattern was here #### +POSTHOOK: query: -- 0 +select count(*) from partition_timestamp_1 where dt = timestamp '2000-01-01 01:00:00' and region = '3' +POSTHOOK: type: QUERY +POSTHOOK: Input: default@partition_timestamp_1 +#### A masked pattern was here #### +0 +PREHOOK: query: -- 0 +select count(*) from partition_timestamp_1 where dt = timestamp '1999-01-01 01:00:00' +PREHOOK: type: QUERY +PREHOOK: Input: default@partition_timestamp_1 +#### A masked pattern was here #### +POSTHOOK: query: -- 0 +select count(*) from partition_timestamp_1 where dt = timestamp '1999-01-01 01:00:00' +POSTHOOK: type: QUERY +POSTHOOK: Input: default@partition_timestamp_1 +#### A masked pattern was here #### +0 +PREHOOK: query: -- Try other comparison operations + +-- 20 +select count(*) from partition_timestamp_1 where dt > timestamp '2000-01-01 01:00:00' and region = '1' +PREHOOK: type: QUERY +PREHOOK: Input: default@partition_timestamp_1 +PREHOOK: Input: default@partition_timestamp_1@dt=2001-01-01 02%3A00%3A00/region=1 +#### A masked pattern was here #### +POSTHOOK: query: -- Try other comparison operations + +-- 20 +select count(*) from partition_timestamp_1 where dt > timestamp '2000-01-01 01:00:00' and region = '1' +POSTHOOK: type: QUERY +POSTHOOK: Input: default@partition_timestamp_1 +POSTHOOK: Input: default@partition_timestamp_1@dt=2001-01-01 02%3A00%3A00/region=1 +#### A masked pattern was here #### +20 +PREHOOK: query: -- 10 +select count(*) from partition_timestamp_1 where dt < timestamp '2000-01-02 01:00:00' and region = '1' +PREHOOK: type: QUERY +PREHOOK: Input: default@partition_timestamp_1 +PREHOOK: Input: default@partition_timestamp_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +POSTHOOK: query: -- 10 +select count(*) from partition_timestamp_1 where dt < timestamp '2000-01-02 01:00:00' and region = '1' +POSTHOOK: type: QUERY +POSTHOOK: Input: default@partition_timestamp_1 +POSTHOOK: Input: default@partition_timestamp_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +10 +PREHOOK: query: -- 20 +select count(*) from partition_timestamp_1 where dt >= timestamp '2000-01-02 01:00:00' and region = '1' +PREHOOK: type: QUERY +PREHOOK: Input: default@partition_timestamp_1 +PREHOOK: Input: default@partition_timestamp_1@dt=2001-01-01 02%3A00%3A00/region=1 +#### A masked pattern was here #### +POSTHOOK: query: -- 20 +select count(*) from partition_timestamp_1 where dt >= timestamp '2000-01-02 01:00:00' and region = '1' +POSTHOOK: type: QUERY +POSTHOOK: Input: default@partition_timestamp_1 +POSTHOOK: Input: default@partition_timestamp_1@dt=2001-01-01 02%3A00%3A00/region=1 +#### A masked pattern was here #### +20 +PREHOOK: query: -- 10 +select count(*) from partition_timestamp_1 where dt <= timestamp '2000-01-01 01:00:00' and region = '1' +PREHOOK: type: QUERY +PREHOOK: Input: default@partition_timestamp_1 +PREHOOK: Input: default@partition_timestamp_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +POSTHOOK: query: -- 10 +select count(*) from partition_timestamp_1 where dt <= timestamp '2000-01-01 01:00:00' and region = '1' +POSTHOOK: type: QUERY +POSTHOOK: Input: default@partition_timestamp_1 +POSTHOOK: Input: default@partition_timestamp_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +10 +PREHOOK: query: -- 20 +select count(*) from partition_timestamp_1 where dt <> timestamp '2000-01-01 01:00:00' and region = '1' +PREHOOK: type: QUERY +PREHOOK: Input: default@partition_timestamp_1 +PREHOOK: Input: default@partition_timestamp_1@dt=2001-01-01 02%3A00%3A00/region=1 +#### A masked pattern was here #### +POSTHOOK: query: -- 20 +select count(*) from partition_timestamp_1 where dt <> timestamp '2000-01-01 01:00:00' and region = '1' +POSTHOOK: type: QUERY +POSTHOOK: Input: default@partition_timestamp_1 +POSTHOOK: Input: default@partition_timestamp_1@dt=2001-01-01 02%3A00%3A00/region=1 +#### A masked pattern was here #### +20 +PREHOOK: query: -- 10 +select count(*) from partition_timestamp_1 where dt between timestamp '1999-12-30 12:00:00' and timestamp '2000-01-03 12:00:00' and region = '1' +PREHOOK: type: QUERY +PREHOOK: Input: default@partition_timestamp_1 +PREHOOK: Input: default@partition_timestamp_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +POSTHOOK: query: -- 10 +select count(*) from partition_timestamp_1 where dt between timestamp '1999-12-30 12:00:00' and timestamp '2000-01-03 12:00:00' and region = '1' +POSTHOOK: type: QUERY +POSTHOOK: Input: default@partition_timestamp_1 +POSTHOOK: Input: default@partition_timestamp_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +10 +PREHOOK: query: -- Try a string key with timestamp-like strings + +-- 5 +select count(*) from partition_timestamp_1 where region = '2020-20-20' +PREHOOK: type: QUERY +PREHOOK: Input: default@partition_timestamp_1 +PREHOOK: Input: default@partition_timestamp_1@dt=2001-01-01 01%3A00%3A00/region=2020-20-20 +#### A masked pattern was here #### +POSTHOOK: query: -- Try a string key with timestamp-like strings + +-- 5 +select count(*) from partition_timestamp_1 where region = '2020-20-20' +POSTHOOK: type: QUERY +POSTHOOK: Input: default@partition_timestamp_1 +POSTHOOK: Input: default@partition_timestamp_1@dt=2001-01-01 01%3A00%3A00/region=2020-20-20 +#### A masked pattern was here #### +5 +PREHOOK: query: -- 5 +select count(*) from partition_timestamp_1 where region > '2010-01-01' +PREHOOK: type: QUERY +PREHOOK: Input: default@partition_timestamp_1 +PREHOOK: Input: default@partition_timestamp_1@dt=2001-01-01 01%3A00%3A00/region=2020-20-20 +#### A masked pattern was here #### +POSTHOOK: query: -- 5 +select count(*) from partition_timestamp_1 where region > '2010-01-01' +POSTHOOK: type: QUERY +POSTHOOK: Input: default@partition_timestamp_1 +POSTHOOK: Input: default@partition_timestamp_1@dt=2001-01-01 01%3A00%3A00/region=2020-20-20 +#### A masked pattern was here #### +5 +PREHOOK: query: drop table partition_timestamp_1 +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@partition_timestamp_1 +PREHOOK: Output: default@partition_timestamp_1 +POSTHOOK: query: drop table partition_timestamp_1 +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@partition_timestamp_1 +POSTHOOK: Output: default@partition_timestamp_1 diff --git ql/src/test/results/clientpositive/partition_timestamp2.q.out ql/src/test/results/clientpositive/partition_timestamp2.q.out new file mode 100644 index 0000000..365df69 --- /dev/null +++ ql/src/test/results/clientpositive/partition_timestamp2.q.out @@ -0,0 +1,395 @@ +PREHOOK: query: drop table partition_timestamp2_1 +PREHOOK: type: DROPTABLE +POSTHOOK: query: drop table partition_timestamp2_1 +POSTHOOK: type: DROPTABLE +PREHOOK: query: create table partition_timestamp2_1 (key string, value string) partitioned by (dt timestamp, region int) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@partition_timestamp2_1 +POSTHOOK: query: create table partition_timestamp2_1 (key string, value string) partitioned by (dt timestamp, region int) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@partition_timestamp2_1 +PREHOOK: query: -- test timestamp literal syntax +from (select * from src tablesample (1 rows)) x +insert overwrite table partition_timestamp2_1 partition(dt=timestamp '2000-01-01 00:00:00', region=1) select * +insert overwrite table partition_timestamp2_1 partition(dt=timestamp '2000-01-01 01:00:00', region=1) select * +insert overwrite table partition_timestamp2_1 partition(dt=timestamp '1999-01-01 00:00:00', region=2) select * +insert overwrite table partition_timestamp2_1 partition(dt=timestamp '1999-01-01 01:00:00', region=2) select * +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: default@partition_timestamp2_1@dt=1999-01-01 00%3A00%3A00/region=2 +PREHOOK: Output: default@partition_timestamp2_1@dt=1999-01-01 01%3A00%3A00/region=2 +PREHOOK: Output: default@partition_timestamp2_1@dt=2000-01-01 00%3A00%3A00/region=1 +PREHOOK: Output: default@partition_timestamp2_1@dt=2000-01-01 01%3A00%3A00/region=1 +POSTHOOK: query: -- test timestamp literal syntax +from (select * from src tablesample (1 rows)) x +insert overwrite table partition_timestamp2_1 partition(dt=timestamp '2000-01-01 00:00:00', region=1) select * +insert overwrite table partition_timestamp2_1 partition(dt=timestamp '2000-01-01 01:00:00', region=1) select * +insert overwrite table partition_timestamp2_1 partition(dt=timestamp '1999-01-01 00:00:00', region=2) select * +insert overwrite table partition_timestamp2_1 partition(dt=timestamp '1999-01-01 01:00:00', region=2) select * +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: default@partition_timestamp2_1@dt=1999-01-01 00%3A00%3A00/region=2 +POSTHOOK: Output: default@partition_timestamp2_1@dt=1999-01-01 01%3A00%3A00/region=2 +POSTHOOK: Output: default@partition_timestamp2_1@dt=2000-01-01 00%3A00%3A00/region=1 +POSTHOOK: Output: default@partition_timestamp2_1@dt=2000-01-01 01%3A00%3A00/region=1 +POSTHOOK: Lineage: partition_timestamp2_1 PARTITION(dt=1999-01-01 00:00:00,region=2).key SIMPLE [(src)src.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: partition_timestamp2_1 PARTITION(dt=1999-01-01 00:00:00,region=2).value SIMPLE [(src)src.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: partition_timestamp2_1 PARTITION(dt=1999-01-01 01:00:00,region=2).key SIMPLE [(src)src.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: partition_timestamp2_1 PARTITION(dt=1999-01-01 01:00:00,region=2).value SIMPLE [(src)src.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: partition_timestamp2_1 PARTITION(dt=2000-01-01 00:00:00,region=1).key SIMPLE [(src)src.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: partition_timestamp2_1 PARTITION(dt=2000-01-01 00:00:00,region=1).value SIMPLE [(src)src.FieldSchema(name:value, type:string, comment:default), ] +POSTHOOK: Lineage: partition_timestamp2_1 PARTITION(dt=2000-01-01 01:00:00,region=1).key SIMPLE [(src)src.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: partition_timestamp2_1 PARTITION(dt=2000-01-01 01:00:00,region=1).value SIMPLE [(src)src.FieldSchema(name:value, type:string, comment:default), ] +PREHOOK: query: select distinct dt from partition_timestamp2_1 +PREHOOK: type: QUERY +PREHOOK: Input: default@partition_timestamp2_1 +PREHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 00%3A00%3A00/region=2 +PREHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 01%3A00%3A00/region=2 +PREHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 00%3A00%3A00/region=1 +PREHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +POSTHOOK: query: select distinct dt from partition_timestamp2_1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@partition_timestamp2_1 +POSTHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 00%3A00%3A00/region=2 +POSTHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 01%3A00%3A00/region=2 +POSTHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 00%3A00%3A00/region=1 +POSTHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +1999-01-01 00:00:00 +1999-01-01 01:00:00 +2000-01-01 00:00:00 +2000-01-01 01:00:00 +PREHOOK: query: select * from partition_timestamp2_1 +PREHOOK: type: QUERY +PREHOOK: Input: default@partition_timestamp2_1 +PREHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 00%3A00%3A00/region=2 +PREHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 01%3A00%3A00/region=2 +PREHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 00%3A00%3A00/region=1 +PREHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +POSTHOOK: query: select * from partition_timestamp2_1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@partition_timestamp2_1 +POSTHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 00%3A00%3A00/region=2 +POSTHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 01%3A00%3A00/region=2 +POSTHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 00%3A00%3A00/region=1 +POSTHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +238 val_238 1999-01-01 00:00:00 2 +238 val_238 1999-01-01 01:00:00 2 +238 val_238 2000-01-01 00:00:00 1 +238 val_238 2000-01-01 01:00:00 1 +PREHOOK: query: -- insert overwrite +insert overwrite table partition_timestamp2_1 partition(dt=timestamp '2000-01-01 00:00:00', region=1) + select 'changed_key', 'changed_value' from src tablesample (2 rows) +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: default@partition_timestamp2_1@dt=2000-01-01 00%3A00%3A00/region=1 +POSTHOOK: query: -- insert overwrite +insert overwrite table partition_timestamp2_1 partition(dt=timestamp '2000-01-01 00:00:00', region=1) + select 'changed_key', 'changed_value' from src tablesample (2 rows) +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: default@partition_timestamp2_1@dt=2000-01-01 00%3A00%3A00/region=1 +POSTHOOK: Lineage: partition_timestamp2_1 PARTITION(dt=2000-01-01 00:00:00,region=1).key SIMPLE [] +POSTHOOK: Lineage: partition_timestamp2_1 PARTITION(dt=2000-01-01 00:00:00,region=1).value SIMPLE [] +PREHOOK: query: select * from partition_timestamp2_1 +PREHOOK: type: QUERY +PREHOOK: Input: default@partition_timestamp2_1 +PREHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 00%3A00%3A00/region=2 +PREHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 01%3A00%3A00/region=2 +PREHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 00%3A00%3A00/region=1 +PREHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +POSTHOOK: query: select * from partition_timestamp2_1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@partition_timestamp2_1 +POSTHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 00%3A00%3A00/region=2 +POSTHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 01%3A00%3A00/region=2 +POSTHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 00%3A00%3A00/region=1 +POSTHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +238 val_238 1999-01-01 00:00:00 2 +238 val_238 1999-01-01 01:00:00 2 +changed_key changed_value 2000-01-01 00:00:00 1 +changed_key changed_value 2000-01-01 00:00:00 1 +238 val_238 2000-01-01 01:00:00 1 +PREHOOK: query: -- truncate +truncate table partition_timestamp2_1 partition(dt=timestamp '2000-01-01 00:00:00', region=1) +PREHOOK: type: TRUNCATETABLE +PREHOOK: Output: default@partition_timestamp2_1@dt=2000-01-01 00%3A00%3A00/region=1 +POSTHOOK: query: -- truncate +truncate table partition_timestamp2_1 partition(dt=timestamp '2000-01-01 00:00:00', region=1) +POSTHOOK: type: TRUNCATETABLE +POSTHOOK: Output: default@partition_timestamp2_1@dt=2000-01-01 00%3A00%3A00/region=1 +PREHOOK: query: select distinct dt from partition_timestamp2_1 +PREHOOK: type: QUERY +PREHOOK: Input: default@partition_timestamp2_1 +PREHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 00%3A00%3A00/region=2 +PREHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 01%3A00%3A00/region=2 +PREHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 00%3A00%3A00/region=1 +PREHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +POSTHOOK: query: select distinct dt from partition_timestamp2_1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@partition_timestamp2_1 +POSTHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 00%3A00%3A00/region=2 +POSTHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 01%3A00%3A00/region=2 +POSTHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 00%3A00%3A00/region=1 +POSTHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +1999-01-01 00:00:00 +1999-01-01 01:00:00 +2000-01-01 00:00:00 +2000-01-01 01:00:00 +PREHOOK: query: select * from partition_timestamp2_1 +PREHOOK: type: QUERY +PREHOOK: Input: default@partition_timestamp2_1 +PREHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 00%3A00%3A00/region=2 +PREHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 01%3A00%3A00/region=2 +PREHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 00%3A00%3A00/region=1 +PREHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +POSTHOOK: query: select * from partition_timestamp2_1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@partition_timestamp2_1 +POSTHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 00%3A00%3A00/region=2 +POSTHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 01%3A00%3A00/region=2 +POSTHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 00%3A00%3A00/region=1 +POSTHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +238 val_238 1999-01-01 00:00:00 2 +238 val_238 1999-01-01 01:00:00 2 +238 val_238 2000-01-01 01:00:00 1 +PREHOOK: query: -- alter table add partition +alter table partition_timestamp2_1 add partition (dt=timestamp '1980-01-02 00:00:00', region=3) +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: default@partition_timestamp2_1 +POSTHOOK: query: -- alter table add partition +alter table partition_timestamp2_1 add partition (dt=timestamp '1980-01-02 00:00:00', region=3) +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: default@partition_timestamp2_1 +POSTHOOK: Output: default@partition_timestamp2_1@dt=1980-01-02 00%3A00%3A00/region=3 +PREHOOK: query: select distinct dt from partition_timestamp2_1 +PREHOOK: type: QUERY +PREHOOK: Input: default@partition_timestamp2_1 +PREHOOK: Input: default@partition_timestamp2_1@dt=1980-01-02 00%3A00%3A00/region=3 +PREHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 00%3A00%3A00/region=2 +PREHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 01%3A00%3A00/region=2 +PREHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 00%3A00%3A00/region=1 +PREHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +POSTHOOK: query: select distinct dt from partition_timestamp2_1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@partition_timestamp2_1 +POSTHOOK: Input: default@partition_timestamp2_1@dt=1980-01-02 00%3A00%3A00/region=3 +POSTHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 00%3A00%3A00/region=2 +POSTHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 01%3A00%3A00/region=2 +POSTHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 00%3A00%3A00/region=1 +POSTHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +1980-01-02 00:00:00 +1999-01-01 00:00:00 +1999-01-01 01:00:00 +2000-01-01 00:00:00 +2000-01-01 01:00:00 +PREHOOK: query: select * from partition_timestamp2_1 +PREHOOK: type: QUERY +PREHOOK: Input: default@partition_timestamp2_1 +PREHOOK: Input: default@partition_timestamp2_1@dt=1980-01-02 00%3A00%3A00/region=3 +PREHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 00%3A00%3A00/region=2 +PREHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 01%3A00%3A00/region=2 +PREHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 00%3A00%3A00/region=1 +PREHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +POSTHOOK: query: select * from partition_timestamp2_1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@partition_timestamp2_1 +POSTHOOK: Input: default@partition_timestamp2_1@dt=1980-01-02 00%3A00%3A00/region=3 +POSTHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 00%3A00%3A00/region=2 +POSTHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 01%3A00%3A00/region=2 +POSTHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 00%3A00%3A00/region=1 +POSTHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +238 val_238 1999-01-01 00:00:00 2 +238 val_238 1999-01-01 01:00:00 2 +238 val_238 2000-01-01 01:00:00 1 +PREHOOK: query: -- alter table drop +alter table partition_timestamp2_1 drop partition (dt=timestamp '1999-01-01 01:00:00', region=2) +PREHOOK: type: ALTERTABLE_DROPPARTS +PREHOOK: Input: default@partition_timestamp2_1 +PREHOOK: Output: default@partition_timestamp2_1@dt=1999-01-01 01%3A00%3A00/region=2 +POSTHOOK: query: -- alter table drop +alter table partition_timestamp2_1 drop partition (dt=timestamp '1999-01-01 01:00:00', region=2) +POSTHOOK: type: ALTERTABLE_DROPPARTS +POSTHOOK: Input: default@partition_timestamp2_1 +POSTHOOK: Output: default@partition_timestamp2_1@dt=1999-01-01 01%3A00%3A00/region=2 +PREHOOK: query: select distinct dt from partition_timestamp2_1 +PREHOOK: type: QUERY +PREHOOK: Input: default@partition_timestamp2_1 +PREHOOK: Input: default@partition_timestamp2_1@dt=1980-01-02 00%3A00%3A00/region=3 +PREHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 00%3A00%3A00/region=2 +PREHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 00%3A00%3A00/region=1 +PREHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +POSTHOOK: query: select distinct dt from partition_timestamp2_1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@partition_timestamp2_1 +POSTHOOK: Input: default@partition_timestamp2_1@dt=1980-01-02 00%3A00%3A00/region=3 +POSTHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 00%3A00%3A00/region=2 +POSTHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 00%3A00%3A00/region=1 +POSTHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +1980-01-02 00:00:00 +1999-01-01 00:00:00 +2000-01-01 00:00:00 +2000-01-01 01:00:00 +PREHOOK: query: select * from partition_timestamp2_1 +PREHOOK: type: QUERY +PREHOOK: Input: default@partition_timestamp2_1 +PREHOOK: Input: default@partition_timestamp2_1@dt=1980-01-02 00%3A00%3A00/region=3 +PREHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 00%3A00%3A00/region=2 +PREHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 00%3A00%3A00/region=1 +PREHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +POSTHOOK: query: select * from partition_timestamp2_1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@partition_timestamp2_1 +POSTHOOK: Input: default@partition_timestamp2_1@dt=1980-01-02 00%3A00%3A00/region=3 +POSTHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 00%3A00%3A00/region=2 +POSTHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 00%3A00%3A00/region=1 +POSTHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +238 val_238 1999-01-01 00:00:00 2 +238 val_238 2000-01-01 01:00:00 1 +PREHOOK: query: -- alter table set serde +alter table partition_timestamp2_1 partition(dt=timestamp '1980-01-02 00:00:00', region=3) + set serde 'org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe' +PREHOOK: type: ALTERPARTITION_SERIALIZER +PREHOOK: Input: default@partition_timestamp2_1 +PREHOOK: Output: default@partition_timestamp2_1@dt=1980-01-02 00%3A00%3A00/region=3 +POSTHOOK: query: -- alter table set serde +alter table partition_timestamp2_1 partition(dt=timestamp '1980-01-02 00:00:00', region=3) + set serde 'org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe' +POSTHOOK: type: ALTERPARTITION_SERIALIZER +POSTHOOK: Input: default@partition_timestamp2_1 +POSTHOOK: Input: default@partition_timestamp2_1@dt=1980-01-02 00%3A00%3A00/region=3 +POSTHOOK: Output: default@partition_timestamp2_1@dt=1980-01-02 00%3A00%3A00/region=3 +PREHOOK: query: -- alter table set fileformat +alter table partition_timestamp2_1 partition(dt=timestamp '1980-01-02 00:00:00', region=3) + set fileformat rcfile +PREHOOK: type: ALTERPARTITION_FILEFORMAT +PREHOOK: Input: default@partition_timestamp2_1 +PREHOOK: Output: default@partition_timestamp2_1@dt=1980-01-02 00%3A00%3A00/region=3 +POSTHOOK: query: -- alter table set fileformat +alter table partition_timestamp2_1 partition(dt=timestamp '1980-01-02 00:00:00', region=3) + set fileformat rcfile +POSTHOOK: type: ALTERPARTITION_FILEFORMAT +POSTHOOK: Input: default@partition_timestamp2_1 +POSTHOOK: Input: default@partition_timestamp2_1@dt=1980-01-02 00%3A00%3A00/region=3 +POSTHOOK: Output: default@partition_timestamp2_1@dt=1980-01-02 00%3A00%3A00/region=3 +PREHOOK: query: describe extended partition_timestamp2_1 partition(dt=timestamp '1980-01-02 00:00:00', region=3) +PREHOOK: type: DESCTABLE +PREHOOK: Input: default@partition_timestamp2_1 +POSTHOOK: query: describe extended partition_timestamp2_1 partition(dt=timestamp '1980-01-02 00:00:00', region=3) +POSTHOOK: type: DESCTABLE +POSTHOOK: Input: default@partition_timestamp2_1 +key string +value string +dt timestamp +region int + +# Partition Information +# col_name data_type comment + +dt timestamp +region int + +#### A masked pattern was here #### +PREHOOK: query: insert overwrite table partition_timestamp2_1 partition(dt=timestamp '1980-01-02 00:00:00', region=3) + select * from src tablesample (2 rows) +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: default@partition_timestamp2_1@dt=1980-01-02 00%3A00%3A00/region=3 +POSTHOOK: query: insert overwrite table partition_timestamp2_1 partition(dt=timestamp '1980-01-02 00:00:00', region=3) + select * from src tablesample (2 rows) +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: default@partition_timestamp2_1@dt=1980-01-02 00%3A00%3A00/region=3 +POSTHOOK: Lineage: partition_timestamp2_1 PARTITION(dt=1980-01-02 00:00:00,region=3).key SIMPLE [(src)src.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: partition_timestamp2_1 PARTITION(dt=1980-01-02 00:00:00,region=3).value SIMPLE [(src)src.FieldSchema(name:value, type:string, comment:default), ] +PREHOOK: query: select * from partition_timestamp2_1 order by key,value,dt,region +PREHOOK: type: QUERY +PREHOOK: Input: default@partition_timestamp2_1 +PREHOOK: Input: default@partition_timestamp2_1@dt=1980-01-02 00%3A00%3A00/region=3 +PREHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 00%3A00%3A00/region=2 +PREHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 00%3A00%3A00/region=1 +PREHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +POSTHOOK: query: select * from partition_timestamp2_1 order by key,value,dt,region +POSTHOOK: type: QUERY +POSTHOOK: Input: default@partition_timestamp2_1 +POSTHOOK: Input: default@partition_timestamp2_1@dt=1980-01-02 00%3A00%3A00/region=3 +POSTHOOK: Input: default@partition_timestamp2_1@dt=1999-01-01 00%3A00%3A00/region=2 +POSTHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 00%3A00%3A00/region=1 +POSTHOOK: Input: default@partition_timestamp2_1@dt=2000-01-01 01%3A00%3A00/region=1 +#### A masked pattern was here #### +238 val_238 1980-01-02 00:00:00 3 +238 val_238 1999-01-01 00:00:00 2 +238 val_238 2000-01-01 01:00:00 1 +86 val_86 1980-01-02 00:00:00 3 +PREHOOK: query: -- alter table set location +alter table partition_timestamp2_1 partition(dt=timestamp '1980-01-02 00:00:00', region=3) +#### A masked pattern was here #### +PREHOOK: type: ALTERPARTITION_LOCATION +PREHOOK: Input: default@partition_timestamp2_1 +PREHOOK: Output: default@partition_timestamp2_1@dt=1980-01-02 00%3A00%3A00/region=3 +#### A masked pattern was here #### +POSTHOOK: query: -- alter table set location +alter table partition_timestamp2_1 partition(dt=timestamp '1980-01-02 00:00:00', region=3) +#### A masked pattern was here #### +POSTHOOK: type: ALTERPARTITION_LOCATION +POSTHOOK: Input: default@partition_timestamp2_1 +POSTHOOK: Input: default@partition_timestamp2_1@dt=1980-01-02 00%3A00%3A00/region=3 +POSTHOOK: Output: default@partition_timestamp2_1@dt=1980-01-02 00%3A00%3A00/region=3 +#### A masked pattern was here #### +PREHOOK: query: describe extended partition_timestamp2_1 partition(dt=timestamp '1980-01-02 00:00:00', region=3) +PREHOOK: type: DESCTABLE +PREHOOK: Input: default@partition_timestamp2_1 +POSTHOOK: query: describe extended partition_timestamp2_1 partition(dt=timestamp '1980-01-02 00:00:00', region=3) +POSTHOOK: type: DESCTABLE +POSTHOOK: Input: default@partition_timestamp2_1 +key string +value string +dt timestamp +region int + +# Partition Information +# col_name data_type comment + +dt timestamp +region int + +#### A masked pattern was here #### +PREHOOK: query: -- alter table touch +alter table partition_timestamp2_1 touch partition(dt=timestamp '1980-01-02 00:00:00', region=3) +PREHOOK: type: ALTERTABLE_TOUCH +PREHOOK: Input: default@partition_timestamp2_1 +PREHOOK: Output: default@partition_timestamp2_1@dt=1980-01-02 00%3A00%3A00/region=3 +POSTHOOK: query: -- alter table touch +alter table partition_timestamp2_1 touch partition(dt=timestamp '1980-01-02 00:00:00', region=3) +POSTHOOK: type: ALTERTABLE_TOUCH +POSTHOOK: Input: default@partition_timestamp2_1 +POSTHOOK: Input: default@partition_timestamp2_1@dt=1980-01-02 00%3A00%3A00/region=3 +POSTHOOK: Output: default@partition_timestamp2_1@dt=1980-01-02 00%3A00%3A00/region=3 +PREHOOK: query: drop table partition_timestamp2_1 +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@partition_timestamp2_1 +PREHOOK: Output: default@partition_timestamp2_1 +POSTHOOK: query: drop table partition_timestamp2_1 +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@partition_timestamp2_1 +POSTHOOK: Output: default@partition_timestamp2_1 diff --git ql/src/test/results/clientpositive/timestamp_literal.q.out ql/src/test/results/clientpositive/timestamp_literal.q.out new file mode 100644 index 0000000..13ffaf1 --- /dev/null +++ ql/src/test/results/clientpositive/timestamp_literal.q.out @@ -0,0 +1,99 @@ +PREHOOK: query: explain +select timestamp '2011-01-01 01:01:01' +PREHOOK: type: QUERY +POSTHOOK: query: explain +select timestamp '2011-01-01 01:01:01' +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-0 + Fetch Operator + limit: -1 + Processor Tree: + TableScan + alias: _dummy_table + Row Limit Per Split: 1 + Statistics: Num rows: 0 Data size: 1 Basic stats: PARTIAL Column stats: COMPLETE + Select Operator + expressions: 2011-01-01 01:01:01.0 (type: timestamp) + outputColumnNames: _col0 + Statistics: Num rows: 0 Data size: 1 Basic stats: PARTIAL Column stats: COMPLETE + ListSink + +PREHOOK: query: select timestamp '2011-01-01 01:01:01' +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +POSTHOOK: query: select timestamp '2011-01-01 01:01:01' +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +2011-01-01 01:01:01 +PREHOOK: query: explain +select '2011-01-01 01:01:01.101' <> timestamp '2011-01-01 01:01:01.100' +PREHOOK: type: QUERY +POSTHOOK: query: explain +select '2011-01-01 01:01:01.101' <> timestamp '2011-01-01 01:01:01.100' +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-0 + Fetch Operator + limit: -1 + Processor Tree: + TableScan + alias: _dummy_table + Row Limit Per Split: 1 + Statistics: Num rows: 0 Data size: 1 Basic stats: PARTIAL Column stats: COMPLETE + Select Operator + expressions: true (type: boolean) + outputColumnNames: _col0 + Statistics: Num rows: 0 Data size: 1 Basic stats: PARTIAL Column stats: COMPLETE + ListSink + +PREHOOK: query: select '2011-01-01 01:01:01.101' <> timestamp '2011-01-01 01:01:01.100' +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +POSTHOOK: query: select '2011-01-01 01:01:01.101' <> timestamp '2011-01-01 01:01:01.100' +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +true +PREHOOK: query: explain +select 1 where timestamp '2011-01-01 01:01:01.101' <> timestamp '2011-01-01 01:01:01.100' +PREHOOK: type: QUERY +POSTHOOK: query: explain +select 1 where timestamp '2011-01-01 01:01:01.101' <> timestamp '2011-01-01 01:01:01.100' +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-0 + Fetch Operator + limit: -1 + Processor Tree: + TableScan + alias: _dummy_table + Row Limit Per Split: 1 + Statistics: Num rows: 0 Data size: 1 Basic stats: PARTIAL Column stats: COMPLETE + Select Operator + expressions: 1 (type: int) + outputColumnNames: _col0 + Statistics: Num rows: 0 Data size: 1 Basic stats: PARTIAL Column stats: COMPLETE + ListSink + +PREHOOK: query: select 1 where timestamp '2011-01-01 01:01:01.101' <> timestamp '2011-01-01 01:01:01.100' +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +POSTHOOK: query: select 1 where timestamp '2011-01-01 01:01:01.101' <> timestamp '2011-01-01 01:01:01.100' +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +1