[SPARK-36021][SQL] Parse interval literals should support more than 2 digits
### What changes were proposed in this pull request?
For case
```
spark-sql> select interval '123456:12' minute to second;
Error in query:
requirement failed: Interval string must match day-time format of '^(?<sign>[+|-])?(?<minute>\d{1,2}):(?<second>(\d{1,2})(\.(\d{1,9}))?)$': 123456:12, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
== SQL ==
select interval '123456:12' minute to second
----------------^^^
```
we should support hour/minute/second when for more than 2 digits when parse interval literal string
### Why are the changes needed?
Keep consistence
### Does this PR introduce _any_ user-facing change?
No
### How was this patch tested?
Added UT
Closes #33231 from AngersZhuuuu/SPARK-36021.
Authored-by: Angerszhuuuu <angers.zhu@gmail.com>
Signed-off-by: Max Gekk <max.gekk@gmail.com>
(cherry picked from commit ea3333a200
)
Signed-off-by: Max Gekk <max.gekk@gmail.com>
This commit is contained in:
parent
2fc57bba31
commit
74bfbcd643
|
@ -57,6 +57,12 @@ object IntervalUtils {
|
||||||
}
|
}
|
||||||
import IntervalUnit._
|
import IntervalUnit._
|
||||||
|
|
||||||
|
private val MAX_DAY = Long.MaxValue / MICROS_PER_DAY
|
||||||
|
private val MAX_HOUR = Long.MaxValue / MICROS_PER_HOUR
|
||||||
|
private val MAX_MINUTE = Long.MaxValue / MICROS_PER_MINUTE
|
||||||
|
private val MAX_SECOND = Long.MaxValue / MICROS_PER_SECOND
|
||||||
|
private val MIN_SECOND = Long.MinValue / MICROS_PER_SECOND
|
||||||
|
|
||||||
def getYears(months: Int): Int = months / MONTHS_PER_YEAR
|
def getYears(months: Int): Int = months / MONTHS_PER_YEAR
|
||||||
|
|
||||||
def getYears(interval: CalendarInterval): Int = getYears(interval.months)
|
def getYears(interval: CalendarInterval): Int = getYears(interval.months)
|
||||||
|
@ -213,19 +219,25 @@ object IntervalUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse YearMonth string in form: [+|-]YYYY-MM
|
* Parse year-month interval in form: [+|-]YYYY-MM
|
||||||
*
|
*
|
||||||
* adapted from HiveIntervalYearMonth.valueOf
|
* adapted from HiveIntervalYearMonth.valueOf
|
||||||
*/
|
*/
|
||||||
def fromYearMonthString(input: String): CalendarInterval = {
|
def fromYearMonthString(input: String): CalendarInterval = {
|
||||||
|
fromYearMonthString(input, YM.YEAR, YM.MONTH)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse year-month interval in form: [+|-]YYYY-MM
|
||||||
|
*
|
||||||
|
* adapted from HiveIntervalYearMonth.valueOf
|
||||||
|
* Below interval conversion patterns are supported:
|
||||||
|
* - YEAR TO (YEAR|MONTH)
|
||||||
|
*/
|
||||||
|
def fromYearMonthString(input: String, startField: Byte, endField: Byte): CalendarInterval = {
|
||||||
require(input != null, "Interval year-month string must be not null")
|
require(input != null, "Interval year-month string must be not null")
|
||||||
input.trim match {
|
val months = castStringToYMInterval(UTF8String.fromString(input), startField, endField)
|
||||||
case yearMonthRegex(sign, yearStr, monthStr) =>
|
new CalendarInterval(months, 0, 0)
|
||||||
new CalendarInterval(toYMInterval(yearStr, monthStr, finalSign(sign)), 0, 0)
|
|
||||||
case _ =>
|
|
||||||
throw new IllegalArgumentException(
|
|
||||||
s"Interval string does not match year-month format of 'y-m': $input")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private def safeToInterval[T](interval: String)(f: => T): T = {
|
private def safeToInterval[T](interval: String)(f: => T): T = {
|
||||||
|
@ -397,7 +409,7 @@ object IntervalUtils {
|
||||||
secondStr: String,
|
secondStr: String,
|
||||||
sign: Int): Long = {
|
sign: Int): Long = {
|
||||||
var micros = 0L
|
var micros = 0L
|
||||||
val days = toLongWithRange(DAY, dayStr, 0, Int.MaxValue).toInt
|
val days = toLongWithRange(DAY, dayStr, 0, MAX_DAY).toInt
|
||||||
micros = Math.addExact(micros, sign * days * MICROS_PER_DAY)
|
micros = Math.addExact(micros, sign * days * MICROS_PER_DAY)
|
||||||
val hours = toLongWithRange(HOUR, hourStr, 0, 23)
|
val hours = toLongWithRange(HOUR, hourStr, 0, 23)
|
||||||
micros = Math.addExact(micros, sign * hours * MICROS_PER_HOUR)
|
micros = Math.addExact(micros, sign * hours * MICROS_PER_HOUR)
|
||||||
|
@ -413,7 +425,7 @@ object IntervalUtils {
|
||||||
secondStr: String,
|
secondStr: String,
|
||||||
sign: Int): Long = {
|
sign: Int): Long = {
|
||||||
var micros = 0L
|
var micros = 0L
|
||||||
val hours = toLongWithRange(HOUR, hourStr, 0, 2562047788L)
|
val hours = toLongWithRange(HOUR, hourStr, 0, MAX_HOUR)
|
||||||
micros = Math.addExact(micros, sign * hours * MICROS_PER_HOUR)
|
micros = Math.addExact(micros, sign * hours * MICROS_PER_HOUR)
|
||||||
val minutes = toLongWithRange(MINUTE, minuteStr, 0, 59)
|
val minutes = toLongWithRange(MINUTE, minuteStr, 0, 59)
|
||||||
micros = Math.addExact(micros, sign * minutes * MICROS_PER_MINUTE)
|
micros = Math.addExact(micros, sign * minutes * MICROS_PER_MINUTE)
|
||||||
|
@ -426,14 +438,22 @@ object IntervalUtils {
|
||||||
secondStr: String,
|
secondStr: String,
|
||||||
sign: Int): Long = {
|
sign: Int): Long = {
|
||||||
var micros = 0L
|
var micros = 0L
|
||||||
val minutes = toLongWithRange(MINUTE, minuteStr, 0, 153722867280L)
|
val minutes = toLongWithRange(MINUTE, minuteStr, 0, MAX_MINUTE)
|
||||||
micros = Math.addExact(micros, sign * minutes * MICROS_PER_MINUTE)
|
micros = Math.addExact(micros, sign * minutes * MICROS_PER_MINUTE)
|
||||||
micros = Math.addExact(micros, sign * parseSecondNano(secondStr))
|
micros = Math.addExact(micros, sign * parseSecondNano(secondStr))
|
||||||
micros
|
micros
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def castDayTimeStringToInterval(
|
||||||
|
input: String,
|
||||||
|
startField: Byte,
|
||||||
|
endField: Byte): CalendarInterval = {
|
||||||
|
val micros = castStringToDTInterval(UTF8String.fromString(input), startField, endField)
|
||||||
|
new CalendarInterval(0, (micros / MICROS_PER_DAY).toInt, micros % MICROS_PER_DAY)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse dayTime string in form: [-]d HH:mm:ss.nnnnnnnnn and [-]HH:mm:ss.nnnnnnnnn
|
* Parse day-time interval in form: [-]d HH:mm:ss.nnnnnnnnn and [-]HH:mm:ss.nnnnnnnnn
|
||||||
*
|
*
|
||||||
* adapted from HiveIntervalDayTime.valueOf
|
* adapted from HiveIntervalDayTime.valueOf
|
||||||
*/
|
*/
|
||||||
|
@ -442,19 +462,21 @@ object IntervalUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse dayTime string in form: [-]d HH:mm:ss.nnnnnnnnn and [-]HH:mm:ss.nnnnnnnnn
|
* Parse day-time interval in form: [-]d HH:mm:ss.nnnnnnnnn and [-]HH:mm:ss.nnnnnnnnn
|
||||||
*
|
*
|
||||||
* adapted from HiveIntervalDayTime.valueOf.
|
* adapted from HiveIntervalDayTime.valueOf.
|
||||||
* Below interval conversion patterns are supported:
|
* Below interval conversion patterns are supported:
|
||||||
* - DAY TO (HOUR|MINUTE|SECOND)
|
* - DAY TO (DAY|HOUR|MINUTE|SECOND)
|
||||||
* - HOUR TO (MINUTE|SECOND)
|
* - HOUR TO (HOUR|MINUTE|SECOND)
|
||||||
* - MINUTE TO SECOND
|
* - MINUTE TO (MINUTE|SECOND)
|
||||||
*/
|
*/
|
||||||
def fromDayTimeString(input: String, from: IntervalUnit, to: IntervalUnit): CalendarInterval = {
|
def fromDayTimeString(input: String, from: IntervalUnit, to: IntervalUnit): CalendarInterval = {
|
||||||
|
require(input != null, "Interval day-time string must be not null")
|
||||||
if (SQLConf.get.getConf(SQLConf.LEGACY_FROM_DAYTIME_STRING)) {
|
if (SQLConf.get.getConf(SQLConf.LEGACY_FROM_DAYTIME_STRING)) {
|
||||||
parseDayTimeLegacy(input, from, to)
|
parseDayTimeLegacy(input, from, to)
|
||||||
} else {
|
} else {
|
||||||
parseDayTime(input, from, to)
|
castDayTimeStringToInterval(
|
||||||
|
input, DT.stringToField(from.toString), DT.stringToField(to.toString))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -480,7 +502,6 @@ object IntervalUtils {
|
||||||
input: String,
|
input: String,
|
||||||
from: IntervalUnit,
|
from: IntervalUnit,
|
||||||
to: IntervalUnit): CalendarInterval = {
|
to: IntervalUnit): CalendarInterval = {
|
||||||
require(input != null, "Interval day-time string must be not null")
|
|
||||||
assert(input.length == input.trim.length)
|
assert(input.length == input.trim.length)
|
||||||
val m = dayTimePatternLegacy.pattern.matcher(input)
|
val m = dayTimePatternLegacy.pattern.matcher(input)
|
||||||
require(m.matches, s"Interval string must match day-time format of 'd h:m:s.n': $input, " +
|
require(m.matches, s"Interval string must match day-time format of 'd h:m:s.n': $input, " +
|
||||||
|
@ -535,79 +556,6 @@ object IntervalUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val signRe = "(?<sign>[+|-])"
|
|
||||||
private val dayRe = "(?<day>\\d+)"
|
|
||||||
private val hourRe = "(?<hour>\\d{1,2})"
|
|
||||||
private val minuteRe = "(?<minute>\\d{1,2})"
|
|
||||||
private val secondRe = "(?<second>(\\d{1,2})(\\.(\\d{1,9}))?)"
|
|
||||||
|
|
||||||
private val dayTimePattern = Map(
|
|
||||||
(MINUTE, SECOND) -> s"^$signRe?$minuteRe:$secondRe$$".r,
|
|
||||||
(HOUR, MINUTE) -> s"^$signRe?$hourRe:$minuteRe$$".r,
|
|
||||||
(HOUR, SECOND) -> s"^$signRe?$hourRe:$minuteRe:$secondRe$$".r,
|
|
||||||
(DAY, HOUR) -> s"^$signRe?$dayRe $hourRe$$".r,
|
|
||||||
(DAY, MINUTE) -> s"^$signRe?$dayRe $hourRe:$minuteRe$$".r,
|
|
||||||
(DAY, SECOND) -> s"^$signRe?$dayRe $hourRe:$minuteRe:$secondRe$$".r
|
|
||||||
)
|
|
||||||
|
|
||||||
private def unitsRange(start: IntervalUnit, end: IntervalUnit): Seq[IntervalUnit] = {
|
|
||||||
(start.id to end.id).map(IntervalUnit(_))
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parses an input string in the day-time format defined by the `from` and `to` bounds.
|
|
||||||
* It supports the following formats:
|
|
||||||
* - [+|-]D+ H[H]:m[m]:s[s][.SSSSSSSSS] for DAY TO SECOND
|
|
||||||
* - [+|-]D+ H[H]:m[m] for DAY TO MINUTE
|
|
||||||
* - [+|-]D+ H[H] for DAY TO HOUR
|
|
||||||
* - [+|-]H[H]:m[m]s[s][.SSSSSSSSS] for HOUR TO SECOND
|
|
||||||
* - [+|-]H[H]:m[m] for HOUR TO MINUTE
|
|
||||||
* - [+|-]m[m]:s[s][.SSSSSSSSS] for MINUTE TO SECOND
|
|
||||||
*
|
|
||||||
* Note: the seconds fraction is truncated to microseconds.
|
|
||||||
*
|
|
||||||
* @param input The input string to parse.
|
|
||||||
* @param from The interval unit from which the input string begins.
|
|
||||||
* @param to The interval unit at where the input string ends.
|
|
||||||
* @return an instance of `CalendarInterval` if the input string was parsed successfully
|
|
||||||
* otherwise throws an exception.
|
|
||||||
* @throws IllegalArgumentException The input string has incorrect format and cannot be parsed.
|
|
||||||
* @throws ArithmeticException An interval unit value is out of valid range or the resulted
|
|
||||||
* interval fields `days` or `microseconds` are out of the valid
|
|
||||||
* ranges.
|
|
||||||
*/
|
|
||||||
private def parseDayTime(
|
|
||||||
input: String,
|
|
||||||
from: IntervalUnit,
|
|
||||||
to: IntervalUnit): CalendarInterval = {
|
|
||||||
require(input != null, "Interval day-time string must be not null")
|
|
||||||
val regexp = dayTimePattern.get(from -> to)
|
|
||||||
require(regexp.isDefined, s"Cannot support (interval '$input' $from to $to) expression")
|
|
||||||
val pattern = regexp.get.pattern
|
|
||||||
val m = pattern.matcher(input.trim)
|
|
||||||
require(m.matches, s"Interval string must match day-time format of '$pattern': $input, " +
|
|
||||||
s"$fallbackNotice")
|
|
||||||
var micros: Long = 0L
|
|
||||||
var days: Int = 0
|
|
||||||
unitsRange(to, from).foreach {
|
|
||||||
case unit @ DAY =>
|
|
||||||
days = toLongWithRange(unit, m.group(unit.toString), 0, Int.MaxValue).toInt
|
|
||||||
case unit @ HOUR =>
|
|
||||||
val parsed = toLongWithRange(unit, m.group(unit.toString), 0, 23)
|
|
||||||
micros = Math.addExact(micros, parsed * MICROS_PER_HOUR)
|
|
||||||
case unit @ MINUTE =>
|
|
||||||
val parsed = toLongWithRange(unit, m.group(unit.toString), 0, 59)
|
|
||||||
micros = Math.addExact(micros, parsed * MICROS_PER_MINUTE)
|
|
||||||
case unit @ SECOND =>
|
|
||||||
micros = Math.addExact(micros, parseSecondNano(m.group(unit.toString)))
|
|
||||||
case _ =>
|
|
||||||
throw new IllegalArgumentException(
|
|
||||||
s"Cannot support (interval '$input' $from to $to) expression")
|
|
||||||
}
|
|
||||||
val sign = if (m.group("sign") != null && m.group("sign") == "-") -1 else 1
|
|
||||||
new CalendarInterval(0, sign * days, sign * micros)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Parses a string with nanoseconds, truncates the result and returns microseconds
|
// Parses a string with nanoseconds, truncates the result and returns microseconds
|
||||||
private def parseNanos(nanosStr: String, isNegative: Boolean): Long = {
|
private def parseNanos(nanosStr: String, isNegative: Boolean): Long = {
|
||||||
if (nanosStr != null) {
|
if (nanosStr != null) {
|
||||||
|
@ -628,11 +576,7 @@ object IntervalUtils {
|
||||||
*/
|
*/
|
||||||
private def parseSecondNano(secondNano: String): Long = {
|
private def parseSecondNano(secondNano: String): Long = {
|
||||||
def parseSeconds(secondsStr: String): Long = {
|
def parseSeconds(secondsStr: String): Long = {
|
||||||
toLongWithRange(
|
toLongWithRange(SECOND, secondsStr, MIN_SECOND, MAX_SECOND) * MICROS_PER_SECOND
|
||||||
SECOND,
|
|
||||||
secondsStr,
|
|
||||||
Long.MinValue / MICROS_PER_SECOND,
|
|
||||||
Long.MaxValue / MICROS_PER_SECOND) * MICROS_PER_SECOND
|
|
||||||
}
|
}
|
||||||
|
|
||||||
secondNano.split("\\.") match {
|
secondNano.split("\\.") match {
|
||||||
|
@ -1254,10 +1198,10 @@ object IntervalUtils {
|
||||||
val minIntervalString = style match {
|
val minIntervalString = style match {
|
||||||
case ANSI_STYLE =>
|
case ANSI_STYLE =>
|
||||||
val firstStr = startField match {
|
val firstStr = startField match {
|
||||||
case DT.DAY => "-106751991"
|
case DT.DAY => s"-$MAX_DAY"
|
||||||
case DT.HOUR => "-2562047788"
|
case DT.HOUR => s"-$MAX_HOUR"
|
||||||
case DT.MINUTE => "-153722867280"
|
case DT.MINUTE => s"-$MAX_MINUTE"
|
||||||
case DT.SECOND => "-9223372036854.775808"
|
case DT.SECOND => s"-$MAX_SECOND.775808"
|
||||||
}
|
}
|
||||||
val followingStr = if (startField == endField) {
|
val followingStr = if (startField == endField) {
|
||||||
""
|
""
|
||||||
|
|
|
@ -327,41 +327,44 @@ class IntervalUtilsSuite extends SparkFunSuite with SQLHelper {
|
||||||
check("12:40", HOUR, MINUTE, "12 hours 40 minutes")
|
check("12:40", HOUR, MINUTE, "12 hours 40 minutes")
|
||||||
check("+12:40", HOUR, MINUTE, "12 hours 40 minutes")
|
check("+12:40", HOUR, MINUTE, "12 hours 40 minutes")
|
||||||
check("-12:40", HOUR, MINUTE, "-12 hours -40 minutes")
|
check("-12:40", HOUR, MINUTE, "-12 hours -40 minutes")
|
||||||
checkFail("5 12:40", HOUR, MINUTE, "must match day-time format")
|
checkFail("5 12:40", HOUR, MINUTE, "Interval string does not match day-time format")
|
||||||
|
|
||||||
check("12:40:30.999999999", HOUR, SECOND, "12 hours 40 minutes 30.999999 seconds")
|
check("12:40:30.999999999", HOUR, SECOND, "12 hours 40 minutes 30.999999 seconds")
|
||||||
check("+12:40:30.123456789", HOUR, SECOND, "12 hours 40 minutes 30.123456 seconds")
|
check("+12:40:30.123456789", HOUR, SECOND, "12 hours 40 minutes 30.123456 seconds")
|
||||||
check("-12:40:30.123456789", HOUR, SECOND, "-12 hours -40 minutes -30.123456 seconds")
|
check("-12:40:30.123456789", HOUR, SECOND, "-12 hours -40 minutes -30.123456 seconds")
|
||||||
checkFail("5 12:40:30", HOUR, SECOND, "must match day-time format")
|
checkFail("5 12:40:30", HOUR, SECOND, "Interval string does not match day-time format")
|
||||||
checkFail("12:40:30.0123456789", HOUR, SECOND, "must match day-time format")
|
checkFail("12:40:30.0123456789", HOUR, SECOND,
|
||||||
|
"Interval string does not match day-time format")
|
||||||
|
|
||||||
check("40:30.123456789", MINUTE, SECOND, "40 minutes 30.123456 seconds")
|
check("40:30.123456789", MINUTE, SECOND, "40 minutes 30.123456 seconds")
|
||||||
check("+40:30.123456789", MINUTE, SECOND, "40 minutes 30.123456 seconds")
|
check("+40:30.123456789", MINUTE, SECOND, "40 minutes 30.123456 seconds")
|
||||||
check("-40:30.123456789", MINUTE, SECOND, "-40 minutes -30.123456 seconds")
|
check("-40:30.123456789", MINUTE, SECOND, "-40 minutes -30.123456 seconds")
|
||||||
checkFail("12:40:30", MINUTE, SECOND, "must match day-time format")
|
checkFail("12:40:30", MINUTE, SECOND, "Interval string does not match day-time format")
|
||||||
|
|
||||||
check("5 12", DAY, HOUR, "5 days 12 hours")
|
check("5 12", DAY, HOUR, "5 days 12 hours")
|
||||||
check("+5 12", DAY, HOUR, "5 days 12 hours")
|
check("+5 12", DAY, HOUR, "5 days 12 hours")
|
||||||
check("-5 12", DAY, HOUR, "-5 days -12 hours")
|
check("-5 12", DAY, HOUR, "-5 days -12 hours")
|
||||||
checkFail("5 12:30", DAY, HOUR, "must match day-time format")
|
checkFail("5 12:30", DAY, HOUR, "Interval string does not match day-time format")
|
||||||
|
|
||||||
check("5 12:40", DAY, MINUTE, "5 days 12 hours 40 minutes")
|
check("5 12:40", DAY, MINUTE, "5 days 12 hours 40 minutes")
|
||||||
check("+5 12:40", DAY, MINUTE, "5 days 12 hours 40 minutes")
|
check("+5 12:40", DAY, MINUTE, "5 days 12 hours 40 minutes")
|
||||||
check("-5 12:40", DAY, MINUTE, "-5 days -12 hours -40 minutes")
|
check("-5 12:40", DAY, MINUTE, "-5 days -12 hours -40 minutes")
|
||||||
checkFail("5 12", DAY, MINUTE, "must match day-time format")
|
checkFail("5 12", DAY, MINUTE, "Interval string does not match day-time format")
|
||||||
|
|
||||||
check("5 12:40:30.123", DAY, SECOND, "5 days 12 hours 40 minutes 30.123 seconds")
|
check("5 12:40:30.123", DAY, SECOND, "5 days 12 hours 40 minutes 30.123 seconds")
|
||||||
check("+5 12:40:30.123456", DAY, SECOND, "5 days 12 hours 40 minutes 30.123456 seconds")
|
check("+5 12:40:30.123456", DAY, SECOND, "5 days 12 hours 40 minutes 30.123456 seconds")
|
||||||
check("-5 12:40:30.123456789", DAY, SECOND, "-5 days -12 hours -40 minutes -30.123456 seconds")
|
check("-5 12:40:30.123456789", DAY, SECOND, "-5 days -12 hours -40 minutes -30.123456 seconds")
|
||||||
checkFail("5 12", DAY, SECOND, "must match day-time format")
|
checkFail("5 12", DAY, SECOND, "Interval string does not match day-time format")
|
||||||
|
|
||||||
checkFail("5 30:12:20", DAY, SECOND, "hour 30 outside range")
|
checkFail("5 30:12:20", DAY, SECOND, "hour 30 outside range")
|
||||||
checkFail("5 30-12", DAY, SECOND, "must match day-time format")
|
checkFail("5 30-12", DAY, SECOND, "Interval string does not match day-time format")
|
||||||
checkFail("5 1:12:20", HOUR, MICROSECOND, "Cannot support (interval")
|
withClue("Expected to throw an exception for the invalid input") {
|
||||||
|
val e = intercept[NoSuchElementException](fromDayTimeString("5 1:12:20", HOUR, MICROSECOND))
|
||||||
|
assert(e.getMessage.contains("key not found: microsecond"))
|
||||||
|
}
|
||||||
// whitespaces
|
// whitespaces
|
||||||
check("\t +5 12:40\t ", DAY, MINUTE, "5 days 12 hours 40 minutes")
|
check("\t +5 12:40\t ", DAY, MINUTE, "5 days 12 hours 40 minutes")
|
||||||
checkFail("+5\t 12:40", DAY, MINUTE, "must match day-time format")
|
checkFail("+5\t 12:40", DAY, MINUTE, "Interval string does not match day-time format")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -253,3 +253,24 @@ SELECT (INTERVAL '-106751991 04:00:54.775808' DAY TO SECOND) / -1;
|
||||||
SELECT (INTERVAL '-106751991 04:00:54.775808' DAY TO SECOND) / -1L;
|
SELECT (INTERVAL '-106751991 04:00:54.775808' DAY TO SECOND) / -1L;
|
||||||
SELECT (INTERVAL '-106751991 04:00:54.775808' DAY TO SECOND) / -1.0;
|
SELECT (INTERVAL '-106751991 04:00:54.775808' DAY TO SECOND) / -1.0;
|
||||||
SELECT (INTERVAL '-106751991 04:00:54.775808' DAY TO SECOND) / -1.0D;
|
SELECT (INTERVAL '-106751991 04:00:54.775808' DAY TO SECOND) / -1.0D;
|
||||||
|
|
||||||
|
SELECT INTERVAL '106751991 04' DAY TO HOUR;
|
||||||
|
SELECT INTERVAL '106751991 04:00' DAY TO MINUTE;
|
||||||
|
SELECT INTERVAL '106751991 04:00:54.775807' DAY TO SECOND;
|
||||||
|
SELECT INTERVAL '2562047788:00' HOUR TO MINUTE;
|
||||||
|
SELECT INTERVAL '2562047788:00:54.775807' HOUR TO SECOND;
|
||||||
|
SELECT INTERVAL '153722867280:54.775807' MINUTE TO SECOND;
|
||||||
|
SELECT INTERVAL '-106751991 04' DAY TO HOUR;
|
||||||
|
SELECT INTERVAL '-106751991 04:00' DAY TO MINUTE;
|
||||||
|
SELECT INTERVAL '-106751991 04:00:54.775808' DAY TO SECOND;
|
||||||
|
SELECT INTERVAL '-2562047788:00' HOUR TO MINUTE;
|
||||||
|
SELECT INTERVAL '-2562047788:00:54.775808' HOUR TO SECOND;
|
||||||
|
SELECT INTERVAL '-153722867280:54.775808' MINUTE TO SECOND;
|
||||||
|
|
||||||
|
SELECT INTERVAL '106751992 04' DAY TO HOUR;
|
||||||
|
SELECT INTERVAL '-106751992 04' DAY TO HOUR;
|
||||||
|
SELECT INTERVAL '2562047789:00' HOUR TO MINUTE;
|
||||||
|
SELECT INTERVAL '-2562047789:00' HOUR TO MINUTE;
|
||||||
|
SELECT INTERVAL '153722867281:54.775808' MINUTE TO SECOND;
|
||||||
|
SELECT INTERVAL '-153722867281:54.775808' MINUTE TO SECOND;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
-- Automatically generated by SQLQueryTestSuite
|
-- Automatically generated by SQLQueryTestSuite
|
||||||
-- Number of queries: 147
|
-- Number of queries: 165
|
||||||
|
|
||||||
|
|
||||||
-- !query
|
-- !query
|
||||||
|
@ -546,7 +546,7 @@ struct<>
|
||||||
-- !query output
|
-- !query output
|
||||||
org.apache.spark.sql.catalyst.parser.ParseException
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
requirement failed: Interval string must match day-time format of '^(?<sign>[+|-])?(?<day>\d+) (?<hour>\d{1,2})$': 20 15:40:32.99899999, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
Interval string does not match day-time format of `[+|-]d h`, `INTERVAL [+|-]'[+|-]d h' DAY TO HOUR` when cast to interval day to hour: 20 15:40:32.99899999, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
||||||
|
|
||||||
== SQL ==
|
== SQL ==
|
||||||
select interval '20 15:40:32.99899999' day to hour
|
select interval '20 15:40:32.99899999' day to hour
|
||||||
|
@ -560,7 +560,7 @@ struct<>
|
||||||
-- !query output
|
-- !query output
|
||||||
org.apache.spark.sql.catalyst.parser.ParseException
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
requirement failed: Interval string must match day-time format of '^(?<sign>[+|-])?(?<day>\d+) (?<hour>\d{1,2}):(?<minute>\d{1,2})$': 20 15:40:32.99899999, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
Interval string does not match day-time format of `[+|-]d h:m`, `INTERVAL [+|-]'[+|-]d h:m' DAY TO MINUTE` when cast to interval day to minute: 20 15:40:32.99899999, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
||||||
|
|
||||||
== SQL ==
|
== SQL ==
|
||||||
select interval '20 15:40:32.99899999' day to minute
|
select interval '20 15:40:32.99899999' day to minute
|
||||||
|
@ -574,7 +574,7 @@ struct<>
|
||||||
-- !query output
|
-- !query output
|
||||||
org.apache.spark.sql.catalyst.parser.ParseException
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
requirement failed: Interval string must match day-time format of '^(?<sign>[+|-])?(?<hour>\d{1,2}):(?<minute>\d{1,2})$': 15:40:32.99899999, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
Interval string does not match day-time format of `[+|-]h:m`, `INTERVAL [+|-]'[+|-]h:m' HOUR TO MINUTE` when cast to interval hour to minute: 15:40:32.99899999, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
||||||
|
|
||||||
== SQL ==
|
== SQL ==
|
||||||
select interval '15:40:32.99899999' hour to minute
|
select interval '15:40:32.99899999' hour to minute
|
||||||
|
@ -588,7 +588,7 @@ struct<>
|
||||||
-- !query output
|
-- !query output
|
||||||
org.apache.spark.sql.catalyst.parser.ParseException
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
requirement failed: Interval string must match day-time format of '^(?<sign>[+|-])?(?<hour>\d{1,2}):(?<minute>\d{1,2}):(?<second>(\d{1,2})(\.(\d{1,9}))?)$': 15:40.99899999, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
Interval string does not match day-time format of `[+|-]h:m:s.n`, `INTERVAL [+|-]'[+|-]h:m:s.n' HOUR TO SECOND` when cast to interval hour to second: 15:40.99899999, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
||||||
|
|
||||||
== SQL ==
|
== SQL ==
|
||||||
select interval '15:40.99899999' hour to second
|
select interval '15:40.99899999' hour to second
|
||||||
|
@ -602,7 +602,7 @@ struct<>
|
||||||
-- !query output
|
-- !query output
|
||||||
org.apache.spark.sql.catalyst.parser.ParseException
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
requirement failed: Interval string must match day-time format of '^(?<sign>[+|-])?(?<hour>\d{1,2}):(?<minute>\d{1,2}):(?<second>(\d{1,2})(\.(\d{1,9}))?)$': 15:40, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
Interval string does not match day-time format of `[+|-]h:m:s.n`, `INTERVAL [+|-]'[+|-]h:m:s.n' HOUR TO SECOND` when cast to interval hour to second: 15:40, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
||||||
|
|
||||||
== SQL ==
|
== SQL ==
|
||||||
select interval '15:40' hour to second
|
select interval '15:40' hour to second
|
||||||
|
@ -616,7 +616,7 @@ struct<>
|
||||||
-- !query output
|
-- !query output
|
||||||
org.apache.spark.sql.catalyst.parser.ParseException
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
requirement failed: Interval string must match day-time format of '^(?<sign>[+|-])?(?<minute>\d{1,2}):(?<second>(\d{1,2})(\.(\d{1,9}))?)$': 20 40:32.99899999, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
Interval string does not match day-time format of `[+|-]m:s.n`, `INTERVAL [+|-]'[+|-]m:s.n' MINUTE TO SECOND` when cast to interval minute to second: 20 40:32.99899999, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
||||||
|
|
||||||
== SQL ==
|
== SQL ==
|
||||||
select interval '20 40:32.99899999' minute to second
|
select interval '20 40:32.99899999' minute to second
|
||||||
|
@ -1093,7 +1093,7 @@ struct<>
|
||||||
-- !query output
|
-- !query output
|
||||||
org.apache.spark.sql.catalyst.parser.ParseException
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
Interval string does not match year-month format of 'y-m': - 2-2 (line 1, pos 16)
|
Interval string does not match year-month format of `[+|-]d h`, `INTERVAL [+|-]'[+|-]d h' DAY TO HOUR` when cast to interval year to month: - 2-2 (line 1, pos 16)
|
||||||
|
|
||||||
== SQL ==
|
== SQL ==
|
||||||
select interval '-\t2-2\t' year to month
|
select interval '-\t2-2\t' year to month
|
||||||
|
@ -1115,7 +1115,7 @@ struct<>
|
||||||
-- !query output
|
-- !query output
|
||||||
org.apache.spark.sql.catalyst.parser.ParseException
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
requirement failed: Interval string must match day-time format of '^(?<sign>[+|-])?(?<day>\d+) (?<hour>\d{1,2}):(?<minute>\d{1,2}):(?<second>(\d{1,2})(\.(\d{1,9}))?)$':
|
Interval string does not match day-time format of `[+|-]d h:m:s.n`, `INTERVAL [+|-]'[+|-]d h:m:s.n' DAY TO SECOND` when cast to interval day to second:
|
||||||
- 10 12:34:46.789 , set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
- 10 12:34:46.789 , set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
||||||
|
|
||||||
== SQL ==
|
== SQL ==
|
||||||
|
@ -1470,3 +1470,183 @@ struct<>
|
||||||
-- !query output
|
-- !query output
|
||||||
java.lang.ArithmeticException
|
java.lang.ArithmeticException
|
||||||
not in range
|
not in range
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '106751991 04' DAY TO HOUR
|
||||||
|
-- !query schema
|
||||||
|
struct<INTERVAL '106751991 04' DAY TO HOUR:interval day to hour>
|
||||||
|
-- !query output
|
||||||
|
106751991 04:00:00.000000000
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '106751991 04:00' DAY TO MINUTE
|
||||||
|
-- !query schema
|
||||||
|
struct<INTERVAL '106751991 04:00' DAY TO MINUTE:interval day to minute>
|
||||||
|
-- !query output
|
||||||
|
106751991 04:00:00.000000000
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '106751991 04:00:54.775807' DAY TO SECOND
|
||||||
|
-- !query schema
|
||||||
|
struct<INTERVAL '106751991 04:00:54.775807' DAY TO SECOND:interval day to second>
|
||||||
|
-- !query output
|
||||||
|
106751991 04:00:54.775807000
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '2562047788:00' HOUR TO MINUTE
|
||||||
|
-- !query schema
|
||||||
|
struct<INTERVAL '2562047788:00' HOUR TO MINUTE:interval hour to minute>
|
||||||
|
-- !query output
|
||||||
|
106751991 04:00:00.000000000
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '2562047788:00:54.775807' HOUR TO SECOND
|
||||||
|
-- !query schema
|
||||||
|
struct<INTERVAL '2562047788:00:54.775807' HOUR TO SECOND:interval hour to second>
|
||||||
|
-- !query output
|
||||||
|
106751991 04:00:54.775807000
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '153722867280:54.775807' MINUTE TO SECOND
|
||||||
|
-- !query schema
|
||||||
|
struct<INTERVAL '153722867280:54.775807' MINUTE TO SECOND:interval minute to second>
|
||||||
|
-- !query output
|
||||||
|
106751991 04:00:54.775807000
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '-106751991 04' DAY TO HOUR
|
||||||
|
-- !query schema
|
||||||
|
struct<INTERVAL '-106751991 04' DAY TO HOUR:interval day to hour>
|
||||||
|
-- !query output
|
||||||
|
-106751991 04:00:00.000000000
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '-106751991 04:00' DAY TO MINUTE
|
||||||
|
-- !query schema
|
||||||
|
struct<INTERVAL '-106751991 04:00' DAY TO MINUTE:interval day to minute>
|
||||||
|
-- !query output
|
||||||
|
-106751991 04:00:00.000000000
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '-106751991 04:00:54.775808' DAY TO SECOND
|
||||||
|
-- !query schema
|
||||||
|
struct<INTERVAL '-106751991 04:00:54.775808' DAY TO SECOND:interval day to second>
|
||||||
|
-- !query output
|
||||||
|
-106751991 04:00:54.775808000
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '-2562047788:00' HOUR TO MINUTE
|
||||||
|
-- !query schema
|
||||||
|
struct<INTERVAL '-2562047788:00' HOUR TO MINUTE:interval hour to minute>
|
||||||
|
-- !query output
|
||||||
|
-106751991 04:00:00.000000000
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '-2562047788:00:54.775808' HOUR TO SECOND
|
||||||
|
-- !query schema
|
||||||
|
struct<INTERVAL '-2562047788:00:54.775808' HOUR TO SECOND:interval hour to second>
|
||||||
|
-- !query output
|
||||||
|
-106751991 04:00:54.775808000
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '-153722867280:54.775808' MINUTE TO SECOND
|
||||||
|
-- !query schema
|
||||||
|
struct<INTERVAL '-153722867280:54.775808' MINUTE TO SECOND:interval minute to second>
|
||||||
|
-- !query output
|
||||||
|
-106751991 04:00:54.775808000
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '106751992 04' DAY TO HOUR
|
||||||
|
-- !query schema
|
||||||
|
struct<>
|
||||||
|
-- !query output
|
||||||
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
|
requirement failed: day 106751992 outside range [0, 106751991](line 1, pos 16)
|
||||||
|
|
||||||
|
== SQL ==
|
||||||
|
SELECT INTERVAL '106751992 04' DAY TO HOUR
|
||||||
|
----------------^^^
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '-106751992 04' DAY TO HOUR
|
||||||
|
-- !query schema
|
||||||
|
struct<>
|
||||||
|
-- !query output
|
||||||
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
|
requirement failed: day 106751992 outside range [0, 106751991](line 1, pos 16)
|
||||||
|
|
||||||
|
== SQL ==
|
||||||
|
SELECT INTERVAL '-106751992 04' DAY TO HOUR
|
||||||
|
----------------^^^
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '2562047789:00' HOUR TO MINUTE
|
||||||
|
-- !query schema
|
||||||
|
struct<>
|
||||||
|
-- !query output
|
||||||
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
|
requirement failed: hour 2562047789 outside range [0, 2562047788](line 1, pos 16)
|
||||||
|
|
||||||
|
== SQL ==
|
||||||
|
SELECT INTERVAL '2562047789:00' HOUR TO MINUTE
|
||||||
|
----------------^^^
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '-2562047789:00' HOUR TO MINUTE
|
||||||
|
-- !query schema
|
||||||
|
struct<>
|
||||||
|
-- !query output
|
||||||
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
|
requirement failed: hour 2562047789 outside range [0, 2562047788](line 1, pos 16)
|
||||||
|
|
||||||
|
== SQL ==
|
||||||
|
SELECT INTERVAL '-2562047789:00' HOUR TO MINUTE
|
||||||
|
----------------^^^
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '153722867281:54.775808' MINUTE TO SECOND
|
||||||
|
-- !query schema
|
||||||
|
struct<>
|
||||||
|
-- !query output
|
||||||
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
|
requirement failed: minute 153722867281 outside range [0, 153722867280](line 1, pos 16)
|
||||||
|
|
||||||
|
== SQL ==
|
||||||
|
SELECT INTERVAL '153722867281:54.775808' MINUTE TO SECOND
|
||||||
|
----------------^^^
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '-153722867281:54.775808' MINUTE TO SECOND
|
||||||
|
-- !query schema
|
||||||
|
struct<>
|
||||||
|
-- !query output
|
||||||
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
|
requirement failed: minute 153722867281 outside range [0, 153722867280](line 1, pos 16)
|
||||||
|
|
||||||
|
== SQL ==
|
||||||
|
SELECT INTERVAL '-153722867281:54.775808' MINUTE TO SECOND
|
||||||
|
----------------^^^
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
-- Automatically generated by SQLQueryTestSuite
|
-- Automatically generated by SQLQueryTestSuite
|
||||||
-- Number of queries: 147
|
-- Number of queries: 165
|
||||||
|
|
||||||
|
|
||||||
-- !query
|
-- !query
|
||||||
|
@ -540,7 +540,7 @@ struct<>
|
||||||
-- !query output
|
-- !query output
|
||||||
org.apache.spark.sql.catalyst.parser.ParseException
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
requirement failed: Interval string must match day-time format of '^(?<sign>[+|-])?(?<day>\d+) (?<hour>\d{1,2})$': 20 15:40:32.99899999, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
Interval string does not match day-time format of `[+|-]d h`, `INTERVAL [+|-]'[+|-]d h' DAY TO HOUR` when cast to interval day to hour: 20 15:40:32.99899999, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
||||||
|
|
||||||
== SQL ==
|
== SQL ==
|
||||||
select interval '20 15:40:32.99899999' day to hour
|
select interval '20 15:40:32.99899999' day to hour
|
||||||
|
@ -554,7 +554,7 @@ struct<>
|
||||||
-- !query output
|
-- !query output
|
||||||
org.apache.spark.sql.catalyst.parser.ParseException
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
requirement failed: Interval string must match day-time format of '^(?<sign>[+|-])?(?<day>\d+) (?<hour>\d{1,2}):(?<minute>\d{1,2})$': 20 15:40:32.99899999, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
Interval string does not match day-time format of `[+|-]d h:m`, `INTERVAL [+|-]'[+|-]d h:m' DAY TO MINUTE` when cast to interval day to minute: 20 15:40:32.99899999, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
||||||
|
|
||||||
== SQL ==
|
== SQL ==
|
||||||
select interval '20 15:40:32.99899999' day to minute
|
select interval '20 15:40:32.99899999' day to minute
|
||||||
|
@ -568,7 +568,7 @@ struct<>
|
||||||
-- !query output
|
-- !query output
|
||||||
org.apache.spark.sql.catalyst.parser.ParseException
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
requirement failed: Interval string must match day-time format of '^(?<sign>[+|-])?(?<hour>\d{1,2}):(?<minute>\d{1,2})$': 15:40:32.99899999, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
Interval string does not match day-time format of `[+|-]h:m`, `INTERVAL [+|-]'[+|-]h:m' HOUR TO MINUTE` when cast to interval hour to minute: 15:40:32.99899999, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
||||||
|
|
||||||
== SQL ==
|
== SQL ==
|
||||||
select interval '15:40:32.99899999' hour to minute
|
select interval '15:40:32.99899999' hour to minute
|
||||||
|
@ -582,7 +582,7 @@ struct<>
|
||||||
-- !query output
|
-- !query output
|
||||||
org.apache.spark.sql.catalyst.parser.ParseException
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
requirement failed: Interval string must match day-time format of '^(?<sign>[+|-])?(?<hour>\d{1,2}):(?<minute>\d{1,2}):(?<second>(\d{1,2})(\.(\d{1,9}))?)$': 15:40.99899999, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
Interval string does not match day-time format of `[+|-]h:m:s.n`, `INTERVAL [+|-]'[+|-]h:m:s.n' HOUR TO SECOND` when cast to interval hour to second: 15:40.99899999, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
||||||
|
|
||||||
== SQL ==
|
== SQL ==
|
||||||
select interval '15:40.99899999' hour to second
|
select interval '15:40.99899999' hour to second
|
||||||
|
@ -596,7 +596,7 @@ struct<>
|
||||||
-- !query output
|
-- !query output
|
||||||
org.apache.spark.sql.catalyst.parser.ParseException
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
requirement failed: Interval string must match day-time format of '^(?<sign>[+|-])?(?<hour>\d{1,2}):(?<minute>\d{1,2}):(?<second>(\d{1,2})(\.(\d{1,9}))?)$': 15:40, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
Interval string does not match day-time format of `[+|-]h:m:s.n`, `INTERVAL [+|-]'[+|-]h:m:s.n' HOUR TO SECOND` when cast to interval hour to second: 15:40, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
||||||
|
|
||||||
== SQL ==
|
== SQL ==
|
||||||
select interval '15:40' hour to second
|
select interval '15:40' hour to second
|
||||||
|
@ -610,7 +610,7 @@ struct<>
|
||||||
-- !query output
|
-- !query output
|
||||||
org.apache.spark.sql.catalyst.parser.ParseException
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
requirement failed: Interval string must match day-time format of '^(?<sign>[+|-])?(?<minute>\d{1,2}):(?<second>(\d{1,2})(\.(\d{1,9}))?)$': 20 40:32.99899999, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
Interval string does not match day-time format of `[+|-]m:s.n`, `INTERVAL [+|-]'[+|-]m:s.n' MINUTE TO SECOND` when cast to interval minute to second: 20 40:32.99899999, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
||||||
|
|
||||||
== SQL ==
|
== SQL ==
|
||||||
select interval '20 40:32.99899999' minute to second
|
select interval '20 40:32.99899999' minute to second
|
||||||
|
@ -1087,7 +1087,7 @@ struct<>
|
||||||
-- !query output
|
-- !query output
|
||||||
org.apache.spark.sql.catalyst.parser.ParseException
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
Interval string does not match year-month format of 'y-m': - 2-2 (line 1, pos 16)
|
Interval string does not match year-month format of `[+|-]d h`, `INTERVAL [+|-]'[+|-]d h' DAY TO HOUR` when cast to interval year to month: - 2-2 (line 1, pos 16)
|
||||||
|
|
||||||
== SQL ==
|
== SQL ==
|
||||||
select interval '-\t2-2\t' year to month
|
select interval '-\t2-2\t' year to month
|
||||||
|
@ -1109,7 +1109,7 @@ struct<>
|
||||||
-- !query output
|
-- !query output
|
||||||
org.apache.spark.sql.catalyst.parser.ParseException
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
requirement failed: Interval string must match day-time format of '^(?<sign>[+|-])?(?<day>\d+) (?<hour>\d{1,2}):(?<minute>\d{1,2}):(?<second>(\d{1,2})(\.(\d{1,9}))?)$':
|
Interval string does not match day-time format of `[+|-]d h:m:s.n`, `INTERVAL [+|-]'[+|-]d h:m:s.n' DAY TO SECOND` when cast to interval day to second:
|
||||||
- 10 12:34:46.789 , set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
- 10 12:34:46.789 , set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
||||||
|
|
||||||
== SQL ==
|
== SQL ==
|
||||||
|
@ -1459,3 +1459,183 @@ struct<>
|
||||||
-- !query output
|
-- !query output
|
||||||
java.lang.ArithmeticException
|
java.lang.ArithmeticException
|
||||||
not in range
|
not in range
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '106751991 04' DAY TO HOUR
|
||||||
|
-- !query schema
|
||||||
|
struct<INTERVAL '106751991 04' DAY TO HOUR:interval day to hour>
|
||||||
|
-- !query output
|
||||||
|
106751991 04:00:00.000000000
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '106751991 04:00' DAY TO MINUTE
|
||||||
|
-- !query schema
|
||||||
|
struct<INTERVAL '106751991 04:00' DAY TO MINUTE:interval day to minute>
|
||||||
|
-- !query output
|
||||||
|
106751991 04:00:00.000000000
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '106751991 04:00:54.775807' DAY TO SECOND
|
||||||
|
-- !query schema
|
||||||
|
struct<INTERVAL '106751991 04:00:54.775807' DAY TO SECOND:interval day to second>
|
||||||
|
-- !query output
|
||||||
|
106751991 04:00:54.775807000
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '2562047788:00' HOUR TO MINUTE
|
||||||
|
-- !query schema
|
||||||
|
struct<INTERVAL '2562047788:00' HOUR TO MINUTE:interval hour to minute>
|
||||||
|
-- !query output
|
||||||
|
106751991 04:00:00.000000000
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '2562047788:00:54.775807' HOUR TO SECOND
|
||||||
|
-- !query schema
|
||||||
|
struct<INTERVAL '2562047788:00:54.775807' HOUR TO SECOND:interval hour to second>
|
||||||
|
-- !query output
|
||||||
|
106751991 04:00:54.775807000
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '153722867280:54.775807' MINUTE TO SECOND
|
||||||
|
-- !query schema
|
||||||
|
struct<INTERVAL '153722867280:54.775807' MINUTE TO SECOND:interval minute to second>
|
||||||
|
-- !query output
|
||||||
|
106751991 04:00:54.775807000
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '-106751991 04' DAY TO HOUR
|
||||||
|
-- !query schema
|
||||||
|
struct<INTERVAL '-106751991 04' DAY TO HOUR:interval day to hour>
|
||||||
|
-- !query output
|
||||||
|
-106751991 04:00:00.000000000
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '-106751991 04:00' DAY TO MINUTE
|
||||||
|
-- !query schema
|
||||||
|
struct<INTERVAL '-106751991 04:00' DAY TO MINUTE:interval day to minute>
|
||||||
|
-- !query output
|
||||||
|
-106751991 04:00:00.000000000
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '-106751991 04:00:54.775808' DAY TO SECOND
|
||||||
|
-- !query schema
|
||||||
|
struct<INTERVAL '-106751991 04:00:54.775808' DAY TO SECOND:interval day to second>
|
||||||
|
-- !query output
|
||||||
|
-106751991 04:00:54.775808000
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '-2562047788:00' HOUR TO MINUTE
|
||||||
|
-- !query schema
|
||||||
|
struct<INTERVAL '-2562047788:00' HOUR TO MINUTE:interval hour to minute>
|
||||||
|
-- !query output
|
||||||
|
-106751991 04:00:00.000000000
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '-2562047788:00:54.775808' HOUR TO SECOND
|
||||||
|
-- !query schema
|
||||||
|
struct<INTERVAL '-2562047788:00:54.775808' HOUR TO SECOND:interval hour to second>
|
||||||
|
-- !query output
|
||||||
|
-106751991 04:00:54.775808000
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '-153722867280:54.775808' MINUTE TO SECOND
|
||||||
|
-- !query schema
|
||||||
|
struct<INTERVAL '-153722867280:54.775808' MINUTE TO SECOND:interval minute to second>
|
||||||
|
-- !query output
|
||||||
|
-106751991 04:00:54.775808000
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '106751992 04' DAY TO HOUR
|
||||||
|
-- !query schema
|
||||||
|
struct<>
|
||||||
|
-- !query output
|
||||||
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
|
requirement failed: day 106751992 outside range [0, 106751991](line 1, pos 16)
|
||||||
|
|
||||||
|
== SQL ==
|
||||||
|
SELECT INTERVAL '106751992 04' DAY TO HOUR
|
||||||
|
----------------^^^
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '-106751992 04' DAY TO HOUR
|
||||||
|
-- !query schema
|
||||||
|
struct<>
|
||||||
|
-- !query output
|
||||||
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
|
requirement failed: day 106751992 outside range [0, 106751991](line 1, pos 16)
|
||||||
|
|
||||||
|
== SQL ==
|
||||||
|
SELECT INTERVAL '-106751992 04' DAY TO HOUR
|
||||||
|
----------------^^^
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '2562047789:00' HOUR TO MINUTE
|
||||||
|
-- !query schema
|
||||||
|
struct<>
|
||||||
|
-- !query output
|
||||||
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
|
requirement failed: hour 2562047789 outside range [0, 2562047788](line 1, pos 16)
|
||||||
|
|
||||||
|
== SQL ==
|
||||||
|
SELECT INTERVAL '2562047789:00' HOUR TO MINUTE
|
||||||
|
----------------^^^
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '-2562047789:00' HOUR TO MINUTE
|
||||||
|
-- !query schema
|
||||||
|
struct<>
|
||||||
|
-- !query output
|
||||||
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
|
requirement failed: hour 2562047789 outside range [0, 2562047788](line 1, pos 16)
|
||||||
|
|
||||||
|
== SQL ==
|
||||||
|
SELECT INTERVAL '-2562047789:00' HOUR TO MINUTE
|
||||||
|
----------------^^^
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '153722867281:54.775808' MINUTE TO SECOND
|
||||||
|
-- !query schema
|
||||||
|
struct<>
|
||||||
|
-- !query output
|
||||||
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
|
requirement failed: minute 153722867281 outside range [0, 153722867280](line 1, pos 16)
|
||||||
|
|
||||||
|
== SQL ==
|
||||||
|
SELECT INTERVAL '153722867281:54.775808' MINUTE TO SECOND
|
||||||
|
----------------^^^
|
||||||
|
|
||||||
|
|
||||||
|
-- !query
|
||||||
|
SELECT INTERVAL '-153722867281:54.775808' MINUTE TO SECOND
|
||||||
|
-- !query schema
|
||||||
|
struct<>
|
||||||
|
-- !query output
|
||||||
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
|
requirement failed: minute 153722867281 outside range [0, 153722867280](line 1, pos 16)
|
||||||
|
|
||||||
|
== SQL ==
|
||||||
|
SELECT INTERVAL '-153722867281:54.775808' MINUTE TO SECOND
|
||||||
|
----------------^^^
|
||||||
|
|
|
@ -105,7 +105,7 @@ struct<>
|
||||||
-- !query output
|
-- !query output
|
||||||
org.apache.spark.sql.catalyst.parser.ParseException
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
requirement failed: Interval string must match day-time format of '^(?<sign>[+|-])?(?<day>\d+) (?<hour>\d{1,2})$': 1 2:03, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
Interval string does not match day-time format of `[+|-]d h`, `INTERVAL [+|-]'[+|-]d h' DAY TO HOUR` when cast to interval day to hour: 1 2:03, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
||||||
|
|
||||||
== SQL ==
|
== SQL ==
|
||||||
SELECT interval '1 2:03' day to hour
|
SELECT interval '1 2:03' day to hour
|
||||||
|
@ -119,7 +119,7 @@ struct<>
|
||||||
-- !query output
|
-- !query output
|
||||||
org.apache.spark.sql.catalyst.parser.ParseException
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
requirement failed: Interval string must match day-time format of '^(?<sign>[+|-])?(?<day>\d+) (?<hour>\d{1,2})$': 1 2:03:04, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
Interval string does not match day-time format of `[+|-]d h`, `INTERVAL [+|-]'[+|-]d h' DAY TO HOUR` when cast to interval day to hour: 1 2:03:04, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
||||||
|
|
||||||
== SQL ==
|
== SQL ==
|
||||||
SELECT interval '1 2:03:04' day to hour
|
SELECT interval '1 2:03:04' day to hour
|
||||||
|
@ -141,7 +141,7 @@ struct<>
|
||||||
-- !query output
|
-- !query output
|
||||||
org.apache.spark.sql.catalyst.parser.ParseException
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
requirement failed: Interval string must match day-time format of '^(?<sign>[+|-])?(?<day>\d+) (?<hour>\d{1,2}):(?<minute>\d{1,2})$': 1 2:03:04, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
Interval string does not match day-time format of `[+|-]d h:m`, `INTERVAL [+|-]'[+|-]d h:m' DAY TO MINUTE` when cast to interval day to minute: 1 2:03:04, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
||||||
|
|
||||||
== SQL ==
|
== SQL ==
|
||||||
SELECT interval '1 2:03:04' day to minute
|
SELECT interval '1 2:03:04' day to minute
|
||||||
|
@ -155,7 +155,7 @@ struct<>
|
||||||
-- !query output
|
-- !query output
|
||||||
org.apache.spark.sql.catalyst.parser.ParseException
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
requirement failed: Interval string must match day-time format of '^(?<sign>[+|-])?(?<day>\d+) (?<hour>\d{1,2}):(?<minute>\d{1,2}):(?<second>(\d{1,2})(\.(\d{1,9}))?)$': 1 2:03, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
Interval string does not match day-time format of `[+|-]d h:m:s.n`, `INTERVAL [+|-]'[+|-]d h:m:s.n' DAY TO SECOND` when cast to interval day to second: 1 2:03, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
||||||
|
|
||||||
== SQL ==
|
== SQL ==
|
||||||
SELECT interval '1 2:03' day to second
|
SELECT interval '1 2:03' day to second
|
||||||
|
@ -177,7 +177,7 @@ struct<>
|
||||||
-- !query output
|
-- !query output
|
||||||
org.apache.spark.sql.catalyst.parser.ParseException
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
requirement failed: Interval string must match day-time format of '^(?<sign>[+|-])?(?<hour>\d{1,2}):(?<minute>\d{1,2})$': 1 2:03, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
Interval string does not match day-time format of `[+|-]h:m`, `INTERVAL [+|-]'[+|-]h:m' HOUR TO MINUTE` when cast to interval hour to minute: 1 2:03, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
||||||
|
|
||||||
== SQL ==
|
== SQL ==
|
||||||
SELECT interval '1 2:03' hour to minute
|
SELECT interval '1 2:03' hour to minute
|
||||||
|
@ -191,7 +191,7 @@ struct<>
|
||||||
-- !query output
|
-- !query output
|
||||||
org.apache.spark.sql.catalyst.parser.ParseException
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
requirement failed: Interval string must match day-time format of '^(?<sign>[+|-])?(?<hour>\d{1,2}):(?<minute>\d{1,2})$': 1 2:03:04, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
Interval string does not match day-time format of `[+|-]h:m`, `INTERVAL [+|-]'[+|-]h:m' HOUR TO MINUTE` when cast to interval hour to minute: 1 2:03:04, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
||||||
|
|
||||||
== SQL ==
|
== SQL ==
|
||||||
SELECT interval '1 2:03:04' hour to minute
|
SELECT interval '1 2:03:04' hour to minute
|
||||||
|
@ -205,7 +205,7 @@ struct<>
|
||||||
-- !query output
|
-- !query output
|
||||||
org.apache.spark.sql.catalyst.parser.ParseException
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
requirement failed: Interval string must match day-time format of '^(?<sign>[+|-])?(?<hour>\d{1,2}):(?<minute>\d{1,2}):(?<second>(\d{1,2})(\.(\d{1,9}))?)$': 1 2:03, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
Interval string does not match day-time format of `[+|-]h:m:s.n`, `INTERVAL [+|-]'[+|-]h:m:s.n' HOUR TO SECOND` when cast to interval hour to second: 1 2:03, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
||||||
|
|
||||||
== SQL ==
|
== SQL ==
|
||||||
SELECT interval '1 2:03' hour to second
|
SELECT interval '1 2:03' hour to second
|
||||||
|
@ -219,7 +219,7 @@ struct<>
|
||||||
-- !query output
|
-- !query output
|
||||||
org.apache.spark.sql.catalyst.parser.ParseException
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
requirement failed: Interval string must match day-time format of '^(?<sign>[+|-])?(?<hour>\d{1,2}):(?<minute>\d{1,2}):(?<second>(\d{1,2})(\.(\d{1,9}))?)$': 1 2:03:04, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
Interval string does not match day-time format of `[+|-]h:m:s.n`, `INTERVAL [+|-]'[+|-]h:m:s.n' HOUR TO SECOND` when cast to interval hour to second: 1 2:03:04, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
||||||
|
|
||||||
== SQL ==
|
== SQL ==
|
||||||
SELECT interval '1 2:03:04' hour to second
|
SELECT interval '1 2:03:04' hour to second
|
||||||
|
@ -233,7 +233,7 @@ struct<>
|
||||||
-- !query output
|
-- !query output
|
||||||
org.apache.spark.sql.catalyst.parser.ParseException
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
requirement failed: Interval string must match day-time format of '^(?<sign>[+|-])?(?<minute>\d{1,2}):(?<second>(\d{1,2})(\.(\d{1,9}))?)$': 1 2:03, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
Interval string does not match day-time format of `[+|-]m:s.n`, `INTERVAL [+|-]'[+|-]m:s.n' MINUTE TO SECOND` when cast to interval minute to second: 1 2:03, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
||||||
|
|
||||||
== SQL ==
|
== SQL ==
|
||||||
SELECT interval '1 2:03' minute to second
|
SELECT interval '1 2:03' minute to second
|
||||||
|
@ -247,7 +247,7 @@ struct<>
|
||||||
-- !query output
|
-- !query output
|
||||||
org.apache.spark.sql.catalyst.parser.ParseException
|
org.apache.spark.sql.catalyst.parser.ParseException
|
||||||
|
|
||||||
requirement failed: Interval string must match day-time format of '^(?<sign>[+|-])?(?<minute>\d{1,2}):(?<second>(\d{1,2})(\.(\d{1,9}))?)$': 1 2:03:04, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
Interval string does not match day-time format of `[+|-]m:s.n`, `INTERVAL [+|-]'[+|-]m:s.n' MINUTE TO SECOND` when cast to interval minute to second: 1 2:03:04, set spark.sql.legacy.fromDayTimeString.enabled to true to restore the behavior before Spark 3.0.(line 1, pos 16)
|
||||||
|
|
||||||
== SQL ==
|
== SQL ==
|
||||||
SELECT interval '1 2:03:04' minute to second
|
SELECT interval '1 2:03:04' minute to second
|
||||||
|
|
Loading…
Reference in a new issue