HIVE-3404: Create quarter UDF (Alex Pivovarov via Jason Dere)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/ec12a61b Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/ec12a61b Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/ec12a61b Branch: refs/heads/llap Commit: ec12a61b129aea416df8913acfb0212f4b09104d Parents: ff64f1d Author: Jason Dere <[email protected]> Authored: Mon May 4 22:54:21 2015 -0700 Committer: Jason Dere <[email protected]> Committed: Mon May 4 22:54:21 2015 -0700 ---------------------------------------------------------------------- .../hadoop/hive/ql/exec/FunctionRegistry.java | 1 + .../hive/ql/udf/generic/GenericUDFQuarter.java | 85 +++++++ .../ql/udf/generic/TestGenericUDFQuarter.java | 182 ++++++++++++++ .../test/queries/clientpositive/udf_quarter.q | 100 ++++++++ .../results/clientpositive/show_functions.q.out | 1 + .../results/clientpositive/udf_quarter.q.out | 246 +++++++++++++++++++ 6 files changed, 615 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/ec12a61b/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java index 10a7502..bf2809c 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java @@ -258,6 +258,7 @@ public final class FunctionRegistry { system.registerUDF("day", UDFDayOfMonth.class, false); system.registerUDF("dayofmonth", UDFDayOfMonth.class, false); system.registerUDF("month", UDFMonth.class, false); + system.registerGenericUDF("quarter", GenericUDFQuarter.class); system.registerUDF("year", UDFYear.class, false); system.registerUDF("hour", UDFHour.class, false); system.registerUDF("minute", UDFMinute.class, false); http://git-wip-us.apache.org/repos/asf/hive/blob/ec12a61b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFQuarter.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFQuarter.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFQuarter.java new file mode 100644 index 0000000..8eef947 --- /dev/null +++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFQuarter.java @@ -0,0 +1,85 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hive.ql.udf.generic; + +import static org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorUtils.PrimitiveGrouping.DATE_GROUP; +import static org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorUtils.PrimitiveGrouping.STRING_GROUP; +import static org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorUtils.PrimitiveGrouping.VOID_GROUP; + +import java.util.Calendar; +import java.util.Date; + +import org.apache.hadoop.hive.ql.exec.Description; +import org.apache.hadoop.hive.ql.exec.UDFArgumentException; +import org.apache.hadoop.hive.ql.metadata.HiveException; +import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; +import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorConverters.Converter; +import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector.PrimitiveCategory; +import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory; +import org.apache.hadoop.io.IntWritable; + +/** + * GenericUDFQuarter. + * + * Returns the quarter of the year for date, in the range 1 to 4. + * + */ +@Description(name = "quarter", value = "_FUNC_(date/timestamp/string) - Returns the " + + "quarter of the year for date, in the range 1 to 4.", + extended = "Example: > SELECT _FUNC_('2015-04-08');\n 2") +public class GenericUDFQuarter extends GenericUDF { + private transient Converter[] converters = new Converter[1]; + private transient PrimitiveCategory[] inputTypes = new PrimitiveCategory[1]; + private final Calendar calendar = Calendar.getInstance(); + private final IntWritable output = new IntWritable(); + + @Override + public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException { + checkArgsSize(arguments, 1, 1); + checkArgPrimitive(arguments, 0); + checkArgGroups(arguments, 0, inputTypes, STRING_GROUP, DATE_GROUP, VOID_GROUP); + obtainDateConverter(arguments, 0, inputTypes, converters); + + ObjectInspector outputOI = PrimitiveObjectInspectorFactory.writableIntObjectInspector; + return outputOI; + } + + @Override + public Object evaluate(DeferredObject[] arguments) throws HiveException { + Date date = getDateValue(arguments, 0, inputTypes, converters); + if (date == null) { + return null; + } + calendar.setTime(date); + int month = calendar.get(Calendar.MONTH); + int quarter = (month + 3) / 3; + + output.set(quarter); + return output; + } + + @Override + protected String getFuncName() { + return "quarter"; + } + + @Override + public String getDisplayString(String[] children) { + return getStandardDisplayString(getFuncName(), children); + } +} http://git-wip-us.apache.org/repos/asf/hive/blob/ec12a61b/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFQuarter.java ---------------------------------------------------------------------- diff --git a/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFQuarter.java b/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFQuarter.java new file mode 100644 index 0000000..5d38fd6 --- /dev/null +++ b/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFQuarter.java @@ -0,0 +1,182 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hive.ql.udf.generic; + +import java.sql.Date; +import java.sql.Timestamp; + +import junit.framework.TestCase; + +import org.apache.hadoop.hive.ql.metadata.HiveException; +import org.apache.hadoop.hive.ql.udf.generic.GenericUDF.DeferredJavaObject; +import org.apache.hadoop.hive.ql.udf.generic.GenericUDF.DeferredObject; +import org.apache.hadoop.hive.serde2.io.DateWritable; +import org.apache.hadoop.hive.serde2.io.TimestampWritable; +import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; +import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory; +import org.apache.hadoop.io.IntWritable; +import org.apache.hadoop.io.Text; + +public class TestGenericUDFQuarter extends TestCase { + + public void testQuarterStr() throws HiveException { + GenericUDFQuarter udf = new GenericUDFQuarter(); + ObjectInspector valueOI0 = PrimitiveObjectInspectorFactory.writableStringObjectInspector; + ObjectInspector[] arguments = { valueOI0 }; + + udf.initialize(arguments); + + // date str + runAndVerifyStr("2014-01-10", 1, udf); + runAndVerifyStr("2014-02-10", 1, udf); + runAndVerifyStr("2014-03-31", 1, udf); + runAndVerifyStr("2014-04-02", 2, udf); + runAndVerifyStr("2014-05-28", 2, udf); + runAndVerifyStr("2016-06-03", 2, udf); + runAndVerifyStr("2016-07-28", 3, udf); + runAndVerifyStr("2016-08-29", 3, udf); + runAndVerifyStr("2016-09-29", 3, udf); + runAndVerifyStr("2016-10-29", 4, udf); + runAndVerifyStr("2016-11-29", 4, udf); + runAndVerifyStr("2016-12-29", 4, udf); + // wrong date str + runAndVerifyStr("2016-03-35", 2, udf); + runAndVerifyStr("2014-01-32", 1, udf); + runAndVerifyStr("01/14/2014", null, udf); + runAndVerifyStr(null, null, udf); + // negative Unix time + runAndVerifyStr("1966-01-01", 1, udf); + runAndVerifyStr("1966-03-31", 1, udf); + runAndVerifyStr("1966-04-01", 2, udf); + runAndVerifyStr("1966-12-31", 4, udf); + + // ts str + runAndVerifyStr("2014-01-01 00:00:00", 1, udf); + runAndVerifyStr("2014-02-10 15:23:00", 1, udf); + runAndVerifyStr("2014-03-31 15:23:00", 1, udf); + runAndVerifyStr("2014-04-02 15:23:00", 2, udf); + runAndVerifyStr("2014-05-28 15:23:00", 2, udf); + runAndVerifyStr("2016-06-03 15:23:00", 2, udf); + runAndVerifyStr("2016-07-28 15:23:00", 3, udf); + runAndVerifyStr("2016-08-29 15:23:00", 3, udf); + runAndVerifyStr("2016-09-29 15:23:00", 3, udf); + runAndVerifyStr("2016-10-29 15:23:00", 4, udf); + runAndVerifyStr("2016-11-29 15:23:00", 4, udf); + runAndVerifyStr("2016-12-31 23:59:59.999", 4, udf); + // wrong date str + runAndVerifyStr("2016-03-35 15:23:00", 2, udf); + runAndVerifyStr("2014-01-32 15:23:00", 1, udf); + runAndVerifyStr("01/14/2014 15:23:00", null, udf); + runAndVerifyStr(null, null, udf); + // negative Unix time + runAndVerifyStr("1966-01-01 00:00:00", 1, udf); + runAndVerifyStr("1966-03-31 23:59:59.999", 1, udf); + runAndVerifyStr("1966-04-01 00:00:00", 2, udf); + runAndVerifyStr("1966-12-31 23:59:59.999", 4, udf); + } + + public void testQuarterDt() throws HiveException { + GenericUDFQuarter udf = new GenericUDFQuarter(); + ObjectInspector valueOI0 = PrimitiveObjectInspectorFactory.writableDateObjectInspector; + ObjectInspector[] arguments = { valueOI0 }; + + udf.initialize(arguments); + // positive Unix time + runAndVerifyDt("2014-01-01", 1, udf); + runAndVerifyDt("2014-02-10", 1, udf); + runAndVerifyDt("2014-03-31", 1, udf); + runAndVerifyDt("2014-04-02", 2, udf); + runAndVerifyDt("2014-05-28", 2, udf); + runAndVerifyDt("2016-06-03", 2, udf); + runAndVerifyDt("2016-07-28", 3, udf); + runAndVerifyDt("2016-08-29", 3, udf); + runAndVerifyDt("2016-09-29", 3, udf); + runAndVerifyDt("2016-10-29", 4, udf); + runAndVerifyDt("2016-11-29", 4, udf); + runAndVerifyDt("2016-12-31", 4, udf); + // negative Unix time + runAndVerifyDt("1966-01-01", 1, udf); + runAndVerifyDt("1966-03-31", 1, udf); + runAndVerifyDt("1966-04-01", 2, udf); + runAndVerifyDt("1966-12-31", 4, udf); + } + + public void testQuarterTs() throws HiveException { + GenericUDFQuarter udf = new GenericUDFQuarter(); + ObjectInspector valueOI0 = PrimitiveObjectInspectorFactory.writableTimestampObjectInspector; + ObjectInspector[] arguments = { valueOI0 }; + + udf.initialize(arguments); + // positive Unix time + runAndVerifyTs("2014-01-01 00:00:00", 1, udf); + runAndVerifyTs("2014-02-10 15:23:00", 1, udf); + runAndVerifyTs("2014-03-31 15:23:00", 1, udf); + runAndVerifyTs("2014-04-02 15:23:00", 2, udf); + runAndVerifyTs("2014-05-28 15:23:00", 2, udf); + runAndVerifyTs("2016-06-03 15:23:00", 2, udf); + runAndVerifyTs("2016-07-28 15:23:00", 3, udf); + runAndVerifyTs("2016-08-29 15:23:00", 3, udf); + runAndVerifyTs("2016-09-29 15:23:00", 3, udf); + runAndVerifyTs("2016-10-29 15:23:00", 4, udf); + runAndVerifyTs("2016-11-29 15:23:00", 4, udf); + runAndVerifyTs("2016-12-31 23:59:59.999", 4, udf); + // negative Unix time + runAndVerifyTs("1966-01-01 00:00:00", 1, udf); + runAndVerifyTs("1966-03-31 23:59:59", 1, udf); + runAndVerifyTs("1966-04-01 00:00:00", 2, udf); + runAndVerifyTs("1966-12-31 23:59:59.999", 4, udf); + } + + private void runAndVerifyStr(String str, Integer expResult, GenericUDF udf) throws HiveException { + DeferredObject valueObj0 = new DeferredJavaObject(str != null ? new Text(str) : null); + DeferredObject[] args = { valueObj0 }; + IntWritable output = (IntWritable) udf.evaluate(args); + if (expResult == null) { + assertNull(output); + } else { + assertNotNull(output); + assertEquals("quarter() test ", expResult.intValue(), output.get()); + } + } + + private void runAndVerifyDt(String str, Integer expResult, GenericUDF udf) throws HiveException { + DeferredObject valueObj0 = new DeferredJavaObject(str != null ? new DateWritable( + Date.valueOf(str)) : null); + DeferredObject[] args = { valueObj0 }; + IntWritable output = (IntWritable) udf.evaluate(args); + if (expResult == null) { + assertNull(output); + } else { + assertNotNull(output); + assertEquals("quarter() test ", expResult.intValue(), output.get()); + } + } + + private void runAndVerifyTs(String str, Integer expResult, GenericUDF udf) throws HiveException { + DeferredObject valueObj0 = new DeferredJavaObject(str != null ? new TimestampWritable( + Timestamp.valueOf(str)) : null); + DeferredObject[] args = { valueObj0 }; + IntWritable output = (IntWritable) udf.evaluate(args); + if (expResult == null) { + assertNull(output); + } else { + assertNotNull(output); + assertEquals("quarter() test ", expResult.intValue(), output.get()); + } + } +} http://git-wip-us.apache.org/repos/asf/hive/blob/ec12a61b/ql/src/test/queries/clientpositive/udf_quarter.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientpositive/udf_quarter.q b/ql/src/test/queries/clientpositive/udf_quarter.q new file mode 100644 index 0000000..fe5d5cf --- /dev/null +++ b/ql/src/test/queries/clientpositive/udf_quarter.q @@ -0,0 +1,100 @@ +DESCRIBE FUNCTION quarter; +DESC FUNCTION EXTENDED quarter; + +explain select quarter('2015-04-24'); + +-- string date +select +quarter('2014-01-10'), +quarter('2014-02-10'), +quarter('2014-03-31'), +quarter('2014-04-02'), +quarter('2014-05-28'), +quarter('2016-06-03'), +quarter('2016-07-28'), +quarter('2016-08-29'), +quarter('2016-09-29'), +quarter('2016-10-29'), +quarter('2016-11-29'), +quarter('2016-12-29'), +-- wrong date str +quarter('2016-03-35'), +quarter('2014-01-32'), +quarter('01/14/2014'), +-- null string +quarter(cast(null as string)), +-- negative Unix time +quarter('1966-01-01'), +quarter('1966-03-31'), +quarter('1966-04-01'), +quarter('1966-12-31'); + +-- string timestamp +select +quarter('2014-01-10 00:00:00'), +quarter('2014-02-10 15:23:00'), +quarter('2014-03-31 15:23:00'), +quarter('2014-04-02 15:23:00'), +quarter('2014-05-28 15:23:00'), +quarter('2016-06-03 15:23:00'), +quarter('2016-07-28 15:23:00'), +quarter('2016-08-29 15:23:00'), +quarter('2016-09-29 15:23:00'), +quarter('2016-10-29 15:23:00'), +quarter('2016-11-29 15:23:00'), +quarter('2016-12-29 15:23:00'), +-- wrong date str +quarter('2016-03-35 15:23:00'), +quarter('2014-01-32 15:23:00'), +quarter('01/14/2014 15:23:00'), +-- null VOID type +quarter(null), +-- negative Unix time +quarter('1966-01-01 00:00:00'), +quarter('1966-03-31 23:59:59.999'), +quarter('1966-04-01 00:00:00'), +quarter('1966-12-31 23:59:59.999'); + +-- date +select +quarter(cast('2014-01-10' as date)), +quarter(cast('2014-02-10' as date)), +quarter(cast('2014-03-31' as date)), +quarter(cast('2014-04-02' as date)), +quarter(cast('2014-05-28' as date)), +quarter(cast('2016-06-03' as date)), +quarter(cast('2016-07-28' as date)), +quarter(cast('2016-08-29' as date)), +quarter(cast('2016-09-29' as date)), +quarter(cast('2016-10-29' as date)), +quarter(cast('2016-11-29' as date)), +quarter(cast('2016-12-29' as date)), +-- null date +quarter(cast(null as date)), +-- negative Unix time +quarter(cast('1966-01-01' as date)), +quarter(cast('1966-03-31' as date)), +quarter(cast('1966-04-01' as date)), +quarter(cast('1966-12-31' as date)); + +-- timestamp +select +quarter(cast('2014-01-10 00:00:00' as timestamp)), +quarter(cast('2014-02-10 15:23:00' as timestamp)), +quarter(cast('2014-03-31 15:23:00' as timestamp)), +quarter(cast('2014-04-02 15:23:00' as timestamp)), +quarter(cast('2014-05-28 15:23:00' as timestamp)), +quarter(cast('2016-06-03 15:23:00' as timestamp)), +quarter(cast('2016-07-28 15:23:00' as timestamp)), +quarter(cast('2016-08-29 15:23:00' as timestamp)), +quarter(cast('2016-09-29 15:23:00' as timestamp)), +quarter(cast('2016-10-29 15:23:00' as timestamp)), +quarter(cast('2016-11-29 15:23:00' as timestamp)), +quarter(cast('2016-12-29 15:23:00' as timestamp)), +-- null timestamp +quarter(cast(null as timestamp)), +-- negative Unix time +quarter(cast('1966-01-01 00:00:00' as timestamp)), +quarter(cast('1966-03-31 23:59:59.999' as timestamp)), +quarter(cast('1966-04-01 00:00:00' as timestamp)), +quarter(cast('1966-12-31 23:59:59.999' as timestamp)); http://git-wip-us.apache.org/repos/asf/hive/blob/ec12a61b/ql/src/test/results/clientpositive/show_functions.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/show_functions.q.out b/ql/src/test/results/clientpositive/show_functions.q.out index 6f3c784..ffc32c8 100644 --- a/ql/src/test/results/clientpositive/show_functions.q.out +++ b/ql/src/test/results/clientpositive/show_functions.q.out @@ -151,6 +151,7 @@ positive pow power printf +quarter radians rand rank http://git-wip-us.apache.org/repos/asf/hive/blob/ec12a61b/ql/src/test/results/clientpositive/udf_quarter.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/udf_quarter.q.out b/ql/src/test/results/clientpositive/udf_quarter.q.out new file mode 100644 index 0000000..b29ba4a --- /dev/null +++ b/ql/src/test/results/clientpositive/udf_quarter.q.out @@ -0,0 +1,246 @@ +PREHOOK: query: DESCRIBE FUNCTION quarter +PREHOOK: type: DESCFUNCTION +POSTHOOK: query: DESCRIBE FUNCTION quarter +POSTHOOK: type: DESCFUNCTION +quarter(date/timestamp/string) - Returns the quarter of the year for date, in the range 1 to 4. +PREHOOK: query: DESC FUNCTION EXTENDED quarter +PREHOOK: type: DESCFUNCTION +POSTHOOK: query: DESC FUNCTION EXTENDED quarter +POSTHOOK: type: DESCFUNCTION +quarter(date/timestamp/string) - Returns the quarter of the year for date, in the range 1 to 4. +Example: > SELECT quarter('2015-04-08'); + 2 +PREHOOK: query: explain select quarter('2015-04-24') +PREHOOK: type: QUERY +POSTHOOK: query: explain select quarter('2015-04-24') +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: 2 (type: int) + outputColumnNames: _col0 + Statistics: Num rows: 0 Data size: 1 Basic stats: PARTIAL Column stats: COMPLETE + ListSink + +PREHOOK: query: -- string date +select +quarter('2014-01-10'), +quarter('2014-02-10'), +quarter('2014-03-31'), +quarter('2014-04-02'), +quarter('2014-05-28'), +quarter('2016-06-03'), +quarter('2016-07-28'), +quarter('2016-08-29'), +quarter('2016-09-29'), +quarter('2016-10-29'), +quarter('2016-11-29'), +quarter('2016-12-29'), +-- wrong date str +quarter('2016-03-35'), +quarter('2014-01-32'), +quarter('01/14/2014'), +-- null string +quarter(cast(null as string)), +-- negative Unix time +quarter('1966-01-01'), +quarter('1966-03-31'), +quarter('1966-04-01'), +quarter('1966-12-31') +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +POSTHOOK: query: -- string date +select +quarter('2014-01-10'), +quarter('2014-02-10'), +quarter('2014-03-31'), +quarter('2014-04-02'), +quarter('2014-05-28'), +quarter('2016-06-03'), +quarter('2016-07-28'), +quarter('2016-08-29'), +quarter('2016-09-29'), +quarter('2016-10-29'), +quarter('2016-11-29'), +quarter('2016-12-29'), +-- wrong date str +quarter('2016-03-35'), +quarter('2014-01-32'), +quarter('01/14/2014'), +-- null string +quarter(cast(null as string)), +-- negative Unix time +quarter('1966-01-01'), +quarter('1966-03-31'), +quarter('1966-04-01'), +quarter('1966-12-31') +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +1 1 1 2 2 2 3 3 3 4 4 4 2 1 NULL NULL 1 1 2 4 +PREHOOK: query: -- string timestamp +select +quarter('2014-01-10 00:00:00'), +quarter('2014-02-10 15:23:00'), +quarter('2014-03-31 15:23:00'), +quarter('2014-04-02 15:23:00'), +quarter('2014-05-28 15:23:00'), +quarter('2016-06-03 15:23:00'), +quarter('2016-07-28 15:23:00'), +quarter('2016-08-29 15:23:00'), +quarter('2016-09-29 15:23:00'), +quarter('2016-10-29 15:23:00'), +quarter('2016-11-29 15:23:00'), +quarter('2016-12-29 15:23:00'), +-- wrong date str +quarter('2016-03-35 15:23:00'), +quarter('2014-01-32 15:23:00'), +quarter('01/14/2014 15:23:00'), +-- null VOID type +quarter(null), +-- negative Unix time +quarter('1966-01-01 00:00:00'), +quarter('1966-03-31 23:59:59.999'), +quarter('1966-04-01 00:00:00'), +quarter('1966-12-31 23:59:59.999') +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +POSTHOOK: query: -- string timestamp +select +quarter('2014-01-10 00:00:00'), +quarter('2014-02-10 15:23:00'), +quarter('2014-03-31 15:23:00'), +quarter('2014-04-02 15:23:00'), +quarter('2014-05-28 15:23:00'), +quarter('2016-06-03 15:23:00'), +quarter('2016-07-28 15:23:00'), +quarter('2016-08-29 15:23:00'), +quarter('2016-09-29 15:23:00'), +quarter('2016-10-29 15:23:00'), +quarter('2016-11-29 15:23:00'), +quarter('2016-12-29 15:23:00'), +-- wrong date str +quarter('2016-03-35 15:23:00'), +quarter('2014-01-32 15:23:00'), +quarter('01/14/2014 15:23:00'), +-- null VOID type +quarter(null), +-- negative Unix time +quarter('1966-01-01 00:00:00'), +quarter('1966-03-31 23:59:59.999'), +quarter('1966-04-01 00:00:00'), +quarter('1966-12-31 23:59:59.999') +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +1 1 1 2 2 2 3 3 3 4 4 4 2 1 NULL NULL 1 1 2 4 +PREHOOK: query: -- date +select +quarter(cast('2014-01-10' as date)), +quarter(cast('2014-02-10' as date)), +quarter(cast('2014-03-31' as date)), +quarter(cast('2014-04-02' as date)), +quarter(cast('2014-05-28' as date)), +quarter(cast('2016-06-03' as date)), +quarter(cast('2016-07-28' as date)), +quarter(cast('2016-08-29' as date)), +quarter(cast('2016-09-29' as date)), +quarter(cast('2016-10-29' as date)), +quarter(cast('2016-11-29' as date)), +quarter(cast('2016-12-29' as date)), +-- null date +quarter(cast(null as date)), +-- negative Unix time +quarter(cast('1966-01-01' as date)), +quarter(cast('1966-03-31' as date)), +quarter(cast('1966-04-01' as date)), +quarter(cast('1966-12-31' as date)) +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +POSTHOOK: query: -- date +select +quarter(cast('2014-01-10' as date)), +quarter(cast('2014-02-10' as date)), +quarter(cast('2014-03-31' as date)), +quarter(cast('2014-04-02' as date)), +quarter(cast('2014-05-28' as date)), +quarter(cast('2016-06-03' as date)), +quarter(cast('2016-07-28' as date)), +quarter(cast('2016-08-29' as date)), +quarter(cast('2016-09-29' as date)), +quarter(cast('2016-10-29' as date)), +quarter(cast('2016-11-29' as date)), +quarter(cast('2016-12-29' as date)), +-- null date +quarter(cast(null as date)), +-- negative Unix time +quarter(cast('1966-01-01' as date)), +quarter(cast('1966-03-31' as date)), +quarter(cast('1966-04-01' as date)), +quarter(cast('1966-12-31' as date)) +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +1 1 1 2 2 2 3 3 3 4 4 4 NULL 1 1 2 4 +PREHOOK: query: -- timestamp +select +quarter(cast('2014-01-10 00:00:00' as timestamp)), +quarter(cast('2014-02-10 15:23:00' as timestamp)), +quarter(cast('2014-03-31 15:23:00' as timestamp)), +quarter(cast('2014-04-02 15:23:00' as timestamp)), +quarter(cast('2014-05-28 15:23:00' as timestamp)), +quarter(cast('2016-06-03 15:23:00' as timestamp)), +quarter(cast('2016-07-28 15:23:00' as timestamp)), +quarter(cast('2016-08-29 15:23:00' as timestamp)), +quarter(cast('2016-09-29 15:23:00' as timestamp)), +quarter(cast('2016-10-29 15:23:00' as timestamp)), +quarter(cast('2016-11-29 15:23:00' as timestamp)), +quarter(cast('2016-12-29 15:23:00' as timestamp)), +-- null timestamp +quarter(cast(null as timestamp)), +-- negative Unix time +quarter(cast('1966-01-01 00:00:00' as timestamp)), +quarter(cast('1966-03-31 23:59:59.999' as timestamp)), +quarter(cast('1966-04-01 00:00:00' as timestamp)), +quarter(cast('1966-12-31 23:59:59.999' as timestamp)) +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +POSTHOOK: query: -- timestamp +select +quarter(cast('2014-01-10 00:00:00' as timestamp)), +quarter(cast('2014-02-10 15:23:00' as timestamp)), +quarter(cast('2014-03-31 15:23:00' as timestamp)), +quarter(cast('2014-04-02 15:23:00' as timestamp)), +quarter(cast('2014-05-28 15:23:00' as timestamp)), +quarter(cast('2016-06-03 15:23:00' as timestamp)), +quarter(cast('2016-07-28 15:23:00' as timestamp)), +quarter(cast('2016-08-29 15:23:00' as timestamp)), +quarter(cast('2016-09-29 15:23:00' as timestamp)), +quarter(cast('2016-10-29 15:23:00' as timestamp)), +quarter(cast('2016-11-29 15:23:00' as timestamp)), +quarter(cast('2016-12-29 15:23:00' as timestamp)), +-- null timestamp +quarter(cast(null as timestamp)), +-- negative Unix time +quarter(cast('1966-01-01 00:00:00' as timestamp)), +quarter(cast('1966-03-31 23:59:59.999' as timestamp)), +quarter(cast('1966-04-01 00:00:00' as timestamp)), +quarter(cast('1966-12-31 23:59:59.999' as timestamp)) +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +1 1 1 2 2 2 3 3 3 4 4 4 NULL 1 1 2 4
