diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDayOfMonth.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDayOfMonth.java index 72fa2630b62711e2ade2b30a0b61b1afcbbb49c7..6c168858c3b3b7b6d6a59b2565c35e3dd4ef240d 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDayOfMonth.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFDayOfMonth.java @@ -37,7 +37,8 @@ import org.apache.hadoop.io.IntWritable; import java.util.Calendar; -import java.util.TimeZone; + +import static org.apache.hadoop.hive.ql.util.DateTimeMath.retrieveProlepticGregorianCalendarUTC; /** * UDFDayOfMonth. @@ -60,7 +61,7 @@ private transient PrimitiveObjectInspector.PrimitiveCategory[] inputTypes = new PrimitiveObjectInspector.PrimitiveCategory[1]; private final IntWritable output = new IntWritable(); - private final Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); + private final Calendar calendar = retrieveProlepticGregorianCalendarUTC(); @Override public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException { diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFMonth.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFMonth.java index 1a8b2da7a9700ac992703fb27f62d4623eb73226..991d798f61a2d9f339aa4dc87f25469a979abf49 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFMonth.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFMonth.java @@ -37,7 +37,8 @@ import org.apache.hadoop.io.IntWritable; import java.util.Calendar; -import java.util.TimeZone; + +import static org.apache.hadoop.hive.ql.util.DateTimeMath.retrieveProlepticGregorianCalendarUTC; /** * UDFMonth. @@ -60,7 +61,7 @@ private transient PrimitiveObjectInspector.PrimitiveCategory[] inputTypes = new PrimitiveObjectInspector.PrimitiveCategory[1]; private final IntWritable output = new IntWritable(); - private final Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); + private final Calendar calendar = retrieveProlepticGregorianCalendarUTC(); @Override diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFWeekOfYear.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFWeekOfYear.java index 18ca9a7e9bf84af22674b3ea7b31d4cde0ad9a76..a9d87d4213273de2adc9b83cd1a25323e700ce52 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFWeekOfYear.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFWeekOfYear.java @@ -19,7 +19,6 @@ package org.apache.hadoop.hive.ql.udf; import java.util.Calendar; -import java.util.TimeZone; import org.apache.hadoop.hive.common.type.Date; import org.apache.hadoop.hive.common.type.Timestamp; @@ -35,11 +34,13 @@ import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; +import static org.apache.hadoop.hive.ql.util.DateTimeMath.retrieveProlepticGregorianCalendarUTC; + /** * UDFWeekOfYear. * */ -@Description(name = "yearweek", +@Description(name = "weekofyear", value = "_FUNC_(date) - Returns the week of the year of the given date. A week " + "is considered to start on a Monday and week 1 is the first week with >3 days.", extended = "Examples:\n" @@ -52,7 +53,7 @@ private final IntWritable result = new IntWritable(); - private final Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); + private final Calendar calendar = retrieveProlepticGregorianCalendarUTC(); public UDFWeekOfYear() { diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFYear.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFYear.java index fcbb57f83874ced64de08cb983cf6c00d2bb3708..29b013514ed18b04317794adf6bd6a571dd71d0c 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFYear.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFYear.java @@ -37,7 +37,8 @@ import org.apache.hadoop.io.IntWritable; import java.util.Calendar; -import java.util.TimeZone; + +import static org.apache.hadoop.hive.ql.util.DateTimeMath.retrieveProlepticGregorianCalendarUTC; /** * UDFYear. @@ -60,7 +61,7 @@ private transient PrimitiveObjectInspector.PrimitiveCategory[] inputTypes = new PrimitiveObjectInspector.PrimitiveCategory[1]; private final IntWritable output = new IntWritable(); - private final Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); + private final Calendar calendar = retrieveProlepticGregorianCalendarUTC(); @Override diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFAddMonths.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFAddMonths.java index 6df0913de6c8ece7cef360b1213706979283ae5e..e65e18731e30eed7cb26a698e3b5bfdf5437de9a 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFAddMonths.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFAddMonths.java @@ -17,6 +17,7 @@ */ package org.apache.hadoop.hive.ql.udf.generic; +import static org.apache.hadoop.hive.ql.util.DateTimeMath.retrieveProlepticGregorianCalendarUTC; import static org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorUtils.PrimitiveGrouping.DATE_GROUP; import static org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorUtils.PrimitiveGrouping.NUMERIC_GROUP; import static org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorUtils.PrimitiveGrouping.STRING_GROUP; @@ -24,7 +25,6 @@ import java.text.SimpleDateFormat; import java.util.Calendar; -import java.util.TimeZone; import org.apache.hadoop.hive.common.type.Date; import org.apache.hadoop.hive.common.type.Timestamp; @@ -64,7 +64,7 @@ private transient PrimitiveCategory[] dtInputTypes = new PrimitiveCategory[3]; private final Text output = new Text(); private transient SimpleDateFormat formatter = null; - private final Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); + private final Calendar calendar = retrieveProlepticGregorianCalendarUTC(); private transient Integer numMonthsConst; private transient boolean isNumMonthsConst; @@ -82,7 +82,7 @@ public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumen String fmtStr = getConstantStringValue(arguments, 2); if (fmtStr != null) { formatter = new SimpleDateFormat(fmtStr); - formatter.setTimeZone(TimeZone.getTimeZone("UTC")); + formatter.setCalendar(calendar); } } else { throw new UDFArgumentTypeException(2, getFuncName() + " only takes constant as " diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFDateFormat.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFDateFormat.java index 6d3e86f9212fd3c082390790b73667f74f925c3b..258f03d71b9523fa9fda2943b8ce5265f21ee30e 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFDateFormat.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFDateFormat.java @@ -17,11 +17,11 @@ */ package org.apache.hadoop.hive.ql.udf.generic; +import static org.apache.hadoop.hive.ql.util.DateTimeMath.retrieveProlepticGregorianCalendarUTC; 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 java.text.SimpleDateFormat; -import java.util.TimeZone; import org.apache.hadoop.hive.common.type.Date; import org.apache.hadoop.hive.common.type.Timestamp; @@ -80,7 +80,7 @@ public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumen if (fmtStr != null) { try { formatter = new SimpleDateFormat(fmtStr); - formatter.setTimeZone(TimeZone.getTimeZone("UTC")); + formatter.setCalendar(retrieveProlepticGregorianCalendarUTC()); } catch (IllegalArgumentException e) { // ignore } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFMonthsBetween.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFMonthsBetween.java index e0db417dab31db951cbe0425107007f9273b1e5a..dcffcd14a4ff028a8a3bd01455feead5fd8e19ba 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFMonthsBetween.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFMonthsBetween.java @@ -24,12 +24,12 @@ import static java.util.Calendar.MONTH; import static java.util.Calendar.SECOND; import static java.util.Calendar.YEAR; +import static org.apache.hadoop.hive.ql.util.DateTimeMath.retrieveProlepticGregorianCalendarUTC; 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 java.math.BigDecimal; import java.util.Calendar; -import java.util.TimeZone; import org.apache.hadoop.hive.common.type.Date; import org.apache.hadoop.hive.common.type.Timestamp; @@ -66,8 +66,8 @@ private transient PrimitiveCategory[] tsInputTypes = new PrimitiveCategory[2]; private transient Converter[] dtConverters = new Converter[2]; private transient PrimitiveCategory[] dtInputTypes = new PrimitiveCategory[2]; - private final Calendar cal1 = Calendar.getInstance(TimeZone.getTimeZone("UTC")); - private final Calendar cal2 = Calendar.getInstance(TimeZone.getTimeZone("UTC")); + private final Calendar cal1 = retrieveProlepticGregorianCalendarUTC(); + private final Calendar cal2 = retrieveProlepticGregorianCalendarUTC(); private final DoubleWritable output = new DoubleWritable(); private boolean isRoundOffNeeded = true; diff --git a/ql/src/java/org/apache/hadoop/hive/ql/util/DateTimeMath.java b/ql/src/java/org/apache/hadoop/hive/ql/util/DateTimeMath.java index 20acfa253c3c1a32f82499e85c240633a5fb1d2f..e6f3f29d17da3fd7e288feeccb23e38d06438629 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/util/DateTimeMath.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/util/DateTimeMath.java @@ -25,6 +25,7 @@ import org.apache.hive.common.util.DateUtils; import java.util.Calendar; +import java.util.GregorianCalendar; import java.util.TimeZone; import java.util.concurrent.TimeUnit; @@ -600,4 +601,16 @@ public boolean subtract(java.sql.Timestamp left, java.sql.Timestamp right, result.set(totalSeconds, nanosResult.nanos); return true; } + + /** + * TODO: this is a temporary fix for handling Julian calendar dates. + * Returns a Gregorian calendar that can be used from year 0+ instead of default 1582.10.15. + * This is desirable for some UDFs that work on dates which normally would use Julian calendar. + * @return the calendar + */ + public static Calendar retrieveProlepticGregorianCalendarUTC() { + GregorianCalendar calendar = new GregorianCalendar(TimeZone.getTimeZone("UTC".intern())); + calendar.setGregorianChange(new java.util.Date(Long.MIN_VALUE)); + return calendar; + } } diff --git a/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFAddMonths.java b/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFAddMonths.java index eb104bdb0ca84e010fb868c8cd708c2550e12504..1b5fd42491f10eeb7419724fce3dd7fc77ea3f8a 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFAddMonths.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFAddMonths.java @@ -66,6 +66,8 @@ public void testAddMonthsInt() throws HiveException { runAndVerify("2016-02-29", -12, "2015-02-28", udf); runAndVerify("2016-01-29", 1, "2016-02-29", udf); runAndVerify("2016-02-29", -1, "2016-01-31", udf); + runAndVerify("1001-10-05", 1, "1001-11-05", udf); + runAndVerify("1582-10-05", 1, "1582-11-05", udf); // ts str runAndVerify("2014-01-14 10:30:00", 1, "2014-02-14", udf); diff --git a/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFDateFormat.java b/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFDateFormat.java index f0a5d3f19ef5b1f7b6aaa3eba662eb8c3d73a78f..6e9d5792f5a728ac3e6410f79b4bbf89508a22d1 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFDateFormat.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFDateFormat.java @@ -157,6 +157,19 @@ public void testWrongFmt() throws HiveException { runAndVerifyStr("2015-04-05", fmtText, null, udf); } + + @Test + public void testJulianDates() throws HiveException { + GenericUDFDateFormat udf = new GenericUDFDateFormat(); + ObjectInspector valueOI0 = PrimitiveObjectInspectorFactory.writableStringObjectInspector; + Text fmtText = new Text("dd---MM--yyyy"); + ObjectInspector valueOI1 = PrimitiveObjectInspectorFactory + .getPrimitiveWritableConstantObjectInspector(TypeInfoFactory.stringTypeInfo, fmtText); + ObjectInspector[] arguments = { valueOI0, valueOI1 }; + udf.initialize(arguments); + runAndVerifyStr("1001-01-05", fmtText, "05---01--1001", udf); + } + private void runAndVerifyStr(String str, Text fmtText, String expResult, GenericUDF udf) throws HiveException { DeferredObject valueObj0 = new DeferredJavaObject(str != null ? new Text(str) : null); diff --git a/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFMonthsBetween.java b/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFMonthsBetween.java index 707e84111f0177360e0b26ab7f2c2fb0cd298694..326fc84cb1b5b4988a7e209058f693534d5040b7 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFMonthsBetween.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/udf/generic/TestGenericUDFMonthsBetween.java @@ -131,6 +131,9 @@ public void testMonthsBetweenForString(GenericUDFMonthsBetween udf) throws HiveE runTestStr(null, null, null, udf); runTestStr("2003-04-23", "2002-04-24", 11.96774194, udf); + + //Test for Julian vs Gergorian dates + runTestStr("1582-10-05", "1582-11-05", -1., udf); } diff --git a/ql/src/test/queries/clientpositive/udf_day.q b/ql/src/test/queries/clientpositive/udf_day.q index fb9b57da015bb172e9f26035adabf53f4a6952f4..4b2ad426bf1ea5553c0f14d6c6cf1c17b0bf9f2c 100644 --- a/ql/src/test/queries/clientpositive/udf_day.q +++ b/ql/src/test/queries/clientpositive/udf_day.q @@ -1,2 +1,5 @@ DESCRIBE FUNCTION day; DESCRIBE FUNCTION EXTENDED day; + +select month('2005-01-02'); +select month('1001-01-05'); diff --git a/ql/src/test/queries/clientpositive/udf_month.q b/ql/src/test/queries/clientpositive/udf_month.q index 0a582ba37e312be1f64959e21c2567cd9fe3e8d9..2b4363e6d4595696768a96ead41aafd7f45dd562 100644 --- a/ql/src/test/queries/clientpositive/udf_month.q +++ b/ql/src/test/queries/clientpositive/udf_month.q @@ -1,2 +1,5 @@ -DESCRIBE FUNCTION minute; -DESCRIBE FUNCTION EXTENDED minute; +DESCRIBE FUNCTION month; +DESCRIBE FUNCTION EXTENDED month; + +select month('2005-01-02'); +select month('1001-01-05'); diff --git a/ql/src/test/queries/clientpositive/udf_weekofyear.q b/ql/src/test/queries/clientpositive/udf_weekofyear.q index 18ab8280054c825b1d31dc01f47aa38be9c6231a..0122e685fb7608b9d7f4657f4e738b8b24be4f92 100644 --- a/ql/src/test/queries/clientpositive/udf_weekofyear.q +++ b/ql/src/test/queries/clientpositive/udf_weekofyear.q @@ -7,3 +7,7 @@ DESCRIBE FUNCTION EXTENDED weekofyear; SELECT weekofyear('1980-01-01'), weekofyear('1980-01-06'), weekofyear('1980-01-07'), weekofyear('1980-12-31'), weekofyear('1984-1-1'), weekofyear('2008-02-20 00:00:00'), weekofyear('1980-12-28 23:59:59'), weekofyear('1980-12-29 23:59:59') FROM src tablesample (1 rows); + +SELECT weekofyear('1007-01-01 10:13:14'); +SELECT weekofyear('1008-01-01 10:13:14'); +SELECT weekofyear('1009-01-01 10:13:14'); diff --git a/ql/src/test/queries/clientpositive/udf_year.q b/ql/src/test/queries/clientpositive/udf_year.q new file mode 100644 index 0000000000000000000000000000000000000000..23d7313d85447d7bdcaf113bbdb2f243f3c791fa --- /dev/null +++ b/ql/src/test/queries/clientpositive/udf_year.q @@ -0,0 +1,5 @@ +DESCRIBE FUNCTION year; +DESCRIBE FUNCTION EXTENDED year; + +select year('2005-01-02'); +select year('1001-01-05'); diff --git a/ql/src/test/results/clientpositive/udf_day.q.out b/ql/src/test/results/clientpositive/udf_day.q.out index 48e816123e5b07d817a8ee008f701a1e4c7cf013..8e12825caee19e388ba3dbfdd4813ed0b2bc4c85 100644 --- a/ql/src/test/results/clientpositive/udf_day.q.out +++ b/ql/src/test/results/clientpositive/udf_day.q.out @@ -18,3 +18,21 @@ param can be one of: 30 Function class:org.apache.hadoop.hive.ql.udf.UDFDayOfMonth Function type:BUILTIN +PREHOOK: query: select month('2005-01-02') +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +POSTHOOK: query: select month('2005-01-02') +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +1 +PREHOOK: query: select month('1001-01-05') +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +POSTHOOK: query: select month('1001-01-05') +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +1 diff --git a/ql/src/test/results/clientpositive/udf_month.q.out b/ql/src/test/results/clientpositive/udf_month.q.out index c07c98fafb9eb0687791ce673f3a8e32425a1452..068f2ff2f4b260980e875383214e83b1f86074a2 100644 --- a/ql/src/test/results/clientpositive/udf_month.q.out +++ b/ql/src/test/results/clientpositive/udf_month.q.out @@ -1,20 +1,37 @@ -PREHOOK: query: DESCRIBE FUNCTION minute +PREHOOK: query: DESCRIBE FUNCTION month PREHOOK: type: DESCFUNCTION -POSTHOOK: query: DESCRIBE FUNCTION minute +POSTHOOK: query: DESCRIBE FUNCTION month POSTHOOK: type: DESCFUNCTION -minute(param) - Returns the minute component of the string/timestamp/interval -PREHOOK: query: DESCRIBE FUNCTION EXTENDED minute +month(param) - Returns the month component of the date/timestamp/interval +PREHOOK: query: DESCRIBE FUNCTION EXTENDED month PREHOOK: type: DESCFUNCTION -POSTHOOK: query: DESCRIBE FUNCTION EXTENDED minute +POSTHOOK: query: DESCRIBE FUNCTION EXTENDED month POSTHOOK: type: DESCFUNCTION -minute(param) - Returns the minute component of the string/timestamp/interval +month(param) - Returns the month component of the date/timestamp/interval param can be one of: -1. A string in the format of 'yyyy-MM-dd HH:mm:ss' or 'HH:mm:ss'. -2. A timestamp value -3. A day-time interval valueExample: - > SELECT minute('2009-07-30 12:58:59') FROM src LIMIT 1; - 58 - > SELECT minute('12:58:59') FROM src LIMIT 1; - 58 -Function class:org.apache.hadoop.hive.ql.udf.UDFMinute +1. A string in the format of 'yyyy-MM-dd HH:mm:ss' or 'yyyy-MM-dd'. +2. A date value +3. A timestamp value +4. A year-month interval valueExample: + > SELECT month('2009-07-30') FROM src LIMIT 1; + 7 +Function class:org.apache.hadoop.hive.ql.udf.UDFMonth Function type:BUILTIN +PREHOOK: query: select month('2005-01-02') +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +POSTHOOK: query: select month('2005-01-02') +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +1 +PREHOOK: query: select month('1001-01-05') +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +POSTHOOK: query: select month('1001-01-05') +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +1 diff --git a/ql/src/test/results/clientpositive/udf_weekofyear.q.out b/ql/src/test/results/clientpositive/udf_weekofyear.q.out index 6e6c661dbf6c0313f7a59a2804fa7cc789e67b08..f003af05c7e4ebe69aa89852dcc8f6f74b6a2496 100644 --- a/ql/src/test/results/clientpositive/udf_weekofyear.q.out +++ b/ql/src/test/results/clientpositive/udf_weekofyear.q.out @@ -28,3 +28,30 @@ POSTHOOK: type: QUERY POSTHOOK: Input: default@src #### A masked pattern was here #### 1 1 2 1 52 8 52 1 +PREHOOK: query: SELECT weekofyear('1007-01-01 10:13:14') +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +POSTHOOK: query: SELECT weekofyear('1007-01-01 10:13:14') +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +1 +PREHOOK: query: SELECT weekofyear('1008-01-01 10:13:14') +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +POSTHOOK: query: SELECT weekofyear('1008-01-01 10:13:14') +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +53 +PREHOOK: query: SELECT weekofyear('1009-01-01 10:13:14') +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +POSTHOOK: query: SELECT weekofyear('1009-01-01 10:13:14') +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +52 diff --git a/ql/src/test/results/clientpositive/udf_year.q.out b/ql/src/test/results/clientpositive/udf_year.q.out new file mode 100644 index 0000000000000000000000000000000000000000..49ca05649f60ece9332e4712cae43925b4b6bd76 --- /dev/null +++ b/ql/src/test/results/clientpositive/udf_year.q.out @@ -0,0 +1,37 @@ +PREHOOK: query: DESCRIBE FUNCTION year +PREHOOK: type: DESCFUNCTION +POSTHOOK: query: DESCRIBE FUNCTION year +POSTHOOK: type: DESCFUNCTION +year(param) - Returns the year component of the date/timestamp/interval +PREHOOK: query: DESCRIBE FUNCTION EXTENDED year +PREHOOK: type: DESCFUNCTION +POSTHOOK: query: DESCRIBE FUNCTION EXTENDED year +POSTHOOK: type: DESCFUNCTION +year(param) - Returns the year component of the date/timestamp/interval +param can be one of: +1. A string in the format of 'yyyy-MM-dd HH:mm:ss' or 'yyyy-MM-dd'. +2. A date value +3. A timestamp value +4. A year-month interval valueExample: + > SELECT year('2009-07-30') FROM src LIMIT 1; + 2009 +Function class:org.apache.hadoop.hive.ql.udf.UDFYear +Function type:BUILTIN +PREHOOK: query: select year('2005-01-02') +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +POSTHOOK: query: select year('2005-01-02') +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +2005 +PREHOOK: query: select year('1001-01-05') +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +POSTHOOK: query: select year('1001-01-05') +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +#### A masked pattern was here #### +1001