This is an automated email from the ASF dual-hosted git repository.

wenchen pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/spark.git


The following commit(s) were added to refs/heads/branch-3.0 by this push:
     new 06d3110  [SPARK-31119][SQL] Add interval value support for extract 
expression as extract source
06d3110 is described below

commit 06d31104120a6f0ce249090864a4f452af0b675a
Author: Kent Yao <[email protected]>
AuthorDate: Wed Mar 18 12:29:39 2020 +0800

    [SPARK-31119][SQL] Add interval value support for extract expression as 
extract source
    
    ### What changes were proposed in this pull request?
    
    ```
    <extract expression> ::= EXTRACT <left paren> <extract field> FROM <extract 
source> <right paren>
    
    <extract source> ::= <datetime value expression> | <interval value 
expression>
    ```
    We now only support datetime values as extract source for `extract` 
expression but it's alternative function `date_part` supports both datetime and 
interval.
    
    This pr adds interval value support for `extract` expression as extract 
source
    
    ### Why are the changes needed?
    
    For ANSI compliance and the semantic consistency between extract and 
`date_part`, we support intervals for extract expressions.
    
    ### Does this PR introduce any user-facing change?
    
    yes, in the `extract(abc from xyz)` expression, the `xyz` can be intervals
    
    ### How was this patch tested?
    
    add unit tests
    
    Closes #27876 from yaooqinn/SPARK-31119.
    
    Authored-by: Kent Yao <[email protected]>
    Signed-off-by: Wenchen Fan <[email protected]>
    (cherry picked from commit f1d27cdd91d0d5d107add662f7c35fc4a5dd278c)
    Signed-off-by: Wenchen Fan <[email protected]>
---
 .../spark/sql/catalyst/parser/AstBuilder.scala     |   8 +-
 .../benchmarks/ExtractBenchmark-jdk11-results.txt  | 207 ++++++------
 sql/core/benchmarks/ExtractBenchmark-results.txt   | 207 ++++++------
 .../test/resources/sql-tests/inputs/extract.sql    | 121 +++----
 .../resources/sql-tests/results/extract.sql.out    | 358 +++++++++++----------
 .../sql-tests/results/postgreSQL/date.sql.out      |  16 +-
 .../sql/execution/benchmark/ExtractBenchmark.scala |  16 +-
 7 files changed, 484 insertions(+), 449 deletions(-)

diff --git 
a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/AstBuilder.scala
 
b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/AstBuilder.scala
index 3c23ecb..b94fd1d 100644
--- 
a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/AstBuilder.scala
+++ 
b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/AstBuilder.scala
@@ -1545,12 +1545,8 @@ class AstBuilder(conf: SQLConf) extends 
SqlBaseBaseVisitor[AnyRef] with Logging
    * Create a Extract expression.
    */
   override def visitExtract(ctx: ExtractContext): Expression = withOrigin(ctx) 
{
-    val fieldStr = ctx.field.getText
-    val source = expression(ctx.source)
-    val extractField = DatePart.parseExtractField(fieldStr, source, {
-      throw new ParseException(s"Literals of type '$fieldStr' are currently 
not supported.", ctx)
-    })
-    new DatePart(Literal(fieldStr), expression(ctx.source), extractField)
+    val arguments = Seq(Literal(ctx.field.getText), expression(ctx.source))
+    UnresolvedFunction("date_part", arguments, isDistinct = false)
   }
 
   /**
diff --git a/sql/core/benchmarks/ExtractBenchmark-jdk11-results.txt 
b/sql/core/benchmarks/ExtractBenchmark-jdk11-results.txt
index 0873215..8c56c0b 100644
--- a/sql/core/benchmarks/ExtractBenchmark-jdk11-results.txt
+++ b/sql/core/benchmarks/ExtractBenchmark-jdk11-results.txt
@@ -2,118 +2,137 @@ Java HotSpot(TM) 64-Bit Server VM 11.0.5+10-LTS on Mac OS X 
10.15.3
 Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz
 Invoke extract for timestamp:             Best Time(ms)   Avg Time(ms)   
Stdev(ms)    Rate(M/s)   Per Row(ns)   Relative
 
------------------------------------------------------------------------------------------------------------------------
-cast to timestamp                                   343            348         
  5         29.1          34.3       1.0X
-MILLENNIUM of timestamp                             888            899         
 14         11.3          88.8       0.4X
-CENTURY of timestamp                                835            846         
 15         12.0          83.5       0.4X
-DECADE of timestamp                                 824            834         
  9         12.1          82.4       0.4X
-YEAR of timestamp                                   818            824         
 10         12.2          81.8       0.4X
-ISOYEAR of timestamp                                879            890         
 17         11.4          87.9       0.4X
-QUARTER of timestamp                                965           1073         
 96         10.4          96.5       0.4X
-MONTH of timestamp                                  787            793         
  8         12.7          78.7       0.4X
-WEEK of timestamp                                  1277           1341         
 57          7.8         127.7       0.3X
-DAY of timestamp                                    780            785         
  8         12.8          78.0       0.4X
-DAYOFWEEK of timestamp                              956            962         
  7         10.5          95.6       0.4X
-DOW of timestamp                                    995           1034         
 36         10.1          99.5       0.3X
-ISODOW of timestamp                                 885            898         
 11         11.3          88.5       0.4X
-DOY of timestamp                                    808            810         
  3         12.4          80.8       0.4X
-HOUR of timestamp                                   622            627         
  7         16.1          62.2       0.6X
-MINUTE of timestamp                                 629            636         
  8         15.9          62.9       0.5X
-SECOND of timestamp                                 800            819         
 30         12.5          80.0       0.4X
-MILLISECONDS of timestamp                           743            755         
 21         13.5          74.3       0.5X
-MICROSECONDS of timestamp                           692            730         
 53         14.5          69.2       0.5X
-EPOCH of timestamp                                  773            798         
 40         12.9          77.3       0.4X
+cast to timestamp                                   311            331         
 18         32.2          31.1       1.0X
+MILLENNIUM of timestamp                             873            893         
 17         11.4          87.3       0.4X
+CENTURY of timestamp                                869            873         
  5         11.5          86.9       0.4X
+DECADE of timestamp                                 851            872         
 23         11.7          85.1       0.4X
+YEAR of timestamp                                   841            856         
 14         11.9          84.1       0.4X
+ISOYEAR of timestamp                                927            938         
 12         10.8          92.7       0.3X
+QUARTER of timestamp                                959            963         
  6         10.4          95.9       0.3X
+MONTH of timestamp                                  852            864         
 18         11.7          85.2       0.4X
+WEEK of timestamp                                  1124           1252         
112          8.9         112.4       0.3X
+DAY of timestamp                                    848            867         
 19         11.8          84.8       0.4X
+DAYOFWEEK of timestamp                              977            987         
 16         10.2          97.7       0.3X
+DOW of timestamp                                    945            964         
 18         10.6          94.5       0.3X
+ISODOW of timestamp                                 924            929         
  5         10.8          92.4       0.3X
+DOY of timestamp                                    852            906         
 67         11.7          85.2       0.4X
+HOUR of timestamp                                   665            671         
  5         15.0          66.5       0.5X
+MINUTE of timestamp                                 655            670         
 15         15.3          65.5       0.5X
+SECOND of timestamp                                 757            763         
  7         13.2          75.7       0.4X
+MILLISECONDS of timestamp                           745            761         
 14         13.4          74.5       0.4X
+MICROSECONDS of timestamp                           691            697         
  7         14.5          69.1       0.5X
+EPOCH of timestamp                                  794            806         
 12         12.6          79.4       0.4X
 
 Java HotSpot(TM) 64-Bit Server VM 11.0.5+10-LTS on Mac OS X 10.15.3
 Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz
 Invoke date_part for timestamp:           Best Time(ms)   Avg Time(ms)   
Stdev(ms)    Rate(M/s)   Per Row(ns)   Relative
 
------------------------------------------------------------------------------------------------------------------------
-cast to timestamp                                   303            323         
 24         33.0          30.3       1.0X
-MILLENNIUM of timestamp                             841            852         
  9         11.9          84.1       0.4X
-CENTURY of timestamp                                818            821         
  4         12.2          81.8       0.4X
-DECADE of timestamp                                 821            836         
 15         12.2          82.1       0.4X
-YEAR of timestamp                                   858            928         
 61         11.7          85.8       0.4X
-ISOYEAR of timestamp                                933            939         
  6         10.7          93.3       0.3X
-QUARTER of timestamp                                979           1004         
 26         10.2          97.9       0.3X
-MONTH of timestamp                                  755            784         
 25         13.2          75.5       0.4X
-WEEK of timestamp                                  1189           1228         
 64          8.4         118.9       0.3X
-DAY of timestamp                                    768            770         
  4         13.0          76.8       0.4X
-DAYOFWEEK of timestamp                              918            948         
 27         10.9          91.8       0.3X
-DOW of timestamp                                    933            983         
 53         10.7          93.3       0.3X
-ISODOW of timestamp                                 884            928         
 61         11.3          88.4       0.3X
-DOY of timestamp                                    787            797         
 12         12.7          78.7       0.4X
-HOUR of timestamp                                   611            664         
 58         16.4          61.1       0.5X
-MINUTE of timestamp                                 616            622         
  5         16.2          61.6       0.5X
-SECOND of timestamp                                 732            748         
 14         13.7          73.2       0.4X
-MILLISECONDS of timestamp                           705            716         
 17         14.2          70.5       0.4X
-MICROSECONDS of timestamp                           642            664         
 33         15.6          64.2       0.5X
-EPOCH of timestamp                                  760            781         
 18         13.2          76.0       0.4X
+cast to timestamp                                   273            274         
  1         36.6          27.3       1.0X
+MILLENNIUM of timestamp                             860            875         
 14         11.6          86.0       0.3X
+CENTURY of timestamp                                854            866         
 11         11.7          85.4       0.3X
+DECADE of timestamp                                 855            863         
 10         11.7          85.5       0.3X
+YEAR of timestamp                                   833            837         
  4         12.0          83.3       0.3X
+ISOYEAR of timestamp                               1022           1036         
 18          9.8         102.2       0.3X
+QUARTER of timestamp                               1067           1132         
 58          9.4         106.7       0.3X
+MONTH of timestamp                                  855            861         
  5         11.7          85.5       0.3X
+WEEK of timestamp                                  1312           1325         
 17          7.6         131.2       0.2X
+DAY of timestamp                                    837            847         
 10         12.0          83.7       0.3X
+DAYOFWEEK of timestamp                              965            969         
  4         10.4          96.5       0.3X
+DOW of timestamp                                    981           1038         
 56         10.2          98.1       0.3X
+ISODOW of timestamp                                 942            959         
 20         10.6          94.2       0.3X
+DOY of timestamp                                    994           1021         
 24         10.1          99.4       0.3X
+HOUR of timestamp                                   690            695         
  7         14.5          69.0       0.4X
+MINUTE of timestamp                                 764            788         
 21         13.1          76.4       0.4X
+SECOND of timestamp                                 776            795         
 34         12.9          77.6       0.4X
+MILLISECONDS of timestamp                           863            879         
 14         11.6          86.3       0.3X
+MICROSECONDS of timestamp                           689            695         
  7         14.5          68.9       0.4X
+EPOCH of timestamp                                  797            865         
 69         12.5          79.7       0.3X
 
 Java HotSpot(TM) 64-Bit Server VM 11.0.5+10-LTS on Mac OS X 10.15.3
 Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz
 Invoke extract for date:                  Best Time(ms)   Avg Time(ms)   
Stdev(ms)    Rate(M/s)   Per Row(ns)   Relative
 
------------------------------------------------------------------------------------------------------------------------
-cast to date                                        712            786         
120         14.0          71.2       1.0X
-MILLENNIUM of date                                  846            888         
 73         11.8          84.6       0.8X
-CENTURY of date                                     781            792         
 11         12.8          78.1       0.9X
-DECADE of date                                      770            824         
 48         13.0          77.0       0.9X
-YEAR of date                                        804            832         
 27         12.4          80.4       0.9X
-ISOYEAR of date                                     909            931         
 24         11.0          90.9       0.8X
-QUARTER of date                                     957            975         
 22         10.4          95.7       0.7X
-MONTH of date                                       789            794         
  7         12.7          78.9       0.9X
-WEEK of date                                       1141           1165         
 29          8.8         114.1       0.6X
-DAY of date                                         784            800         
 22         12.8          78.4       0.9X
-DAYOFWEEK of date                                   907            916         
 14         11.0          90.7       0.8X
-DOW of date                                         931            958         
 25         10.7          93.1       0.8X
-ISODOW of date                                      852            857         
  7         11.7          85.2       0.8X
-DOY of date                                         831            870         
 45         12.0          83.1       0.9X
-HOUR of date                                       1574           1598         
 26          6.4         157.4       0.5X
-MINUTE of date                                     1525           1590         
 58          6.6         152.5       0.5X
-SECOND of date                                     1728           1739         
 10          5.8         172.8       0.4X
-MILLISECONDS of date                               1715           1727         
 10          5.8         171.5       0.4X
-MICROSECONDS of date                               1559           1669         
 95          6.4         155.9       0.5X
-EPOCH of date                                      1766           1774         
  9          5.7         176.6       0.4X
+cast to date                                        763            774         
 13         13.1          76.3       1.0X
+MILLENNIUM of date                                  857            911         
 73         11.7          85.7       0.9X
+CENTURY of date                                     869            884         
 15         11.5          86.9       0.9X
+DECADE of date                                      860            868         
  7         11.6          86.0       0.9X
+YEAR of date                                        848            852         
  7         11.8          84.8       0.9X
+ISOYEAR of date                                    1028           1046         
 22          9.7         102.8       0.7X
+QUARTER of date                                     979            986         
  7         10.2          97.9       0.8X
+MONTH of date                                       857            862         
  4         11.7          85.7       0.9X
+WEEK of date                                       1218           1247         
 29          8.2         121.8       0.6X
+DAY of date                                         855            868         
 11         11.7          85.5       0.9X
+DAYOFWEEK of date                                   987           1081         
 82         10.1          98.7       0.8X
+DOW of date                                         986            996         
  9         10.1          98.6       0.8X
+ISODOW of date                                      938            947         
 10         10.7          93.8       0.8X
+DOY of date                                         877            890         
 11         11.4          87.7       0.9X
+HOUR of date                                       1656           1668         
 12          6.0         165.6       0.5X
+MINUTE of date                                     1652           1666         
 15          6.1         165.2       0.5X
+SECOND of date                                     1752           1776         
 23          5.7         175.2       0.4X
+MILLISECONDS of date                               1757           1766         
 11          5.7         175.7       0.4X
+MICROSECONDS of date                               1682           1691         
 14          5.9         168.2       0.5X
+EPOCH of date                                      1706           1721         
 14          5.9         170.6       0.4X
 
 Java HotSpot(TM) 64-Bit Server VM 11.0.5+10-LTS on Mac OS X 10.15.3
 Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz
 Invoke date_part for date:                Best Time(ms)   Avg Time(ms)   
Stdev(ms)    Rate(M/s)   Per Row(ns)   Relative
 
------------------------------------------------------------------------------------------------------------------------
-cast to date                                        803            825         
 23         12.5          80.3       1.0X
-MILLENNIUM of date                                  918            924         
  8         10.9          91.8       0.9X
-CENTURY of date                                     855            879         
 25         11.7          85.5       0.9X
-DECADE of date                                      777            795         
 19         12.9          77.7       1.0X
-YEAR of date                                        772            779         
  9         13.0          77.2       1.0X
-ISOYEAR of date                                     903            927         
 21         11.1          90.3       0.9X
-QUARTER of date                                     983           1339         
381         10.2          98.3       0.8X
-MONTH of date                                       764            780         
 20         13.1          76.4       1.1X
-WEEK of date                                       1239           1316         
112          8.1         123.9       0.6X
-DAY of date                                         769            857         
 91         13.0          76.9       1.0X
-DAYOFWEEK of date                                   900            965         
 61         11.1          90.0       0.9X
-DOW of date                                         990           1041         
 62         10.1          99.0       0.8X
-ISODOW of date                                      974            977         
  5         10.3          97.4       0.8X
-DOY of date                                         862            918         
 50         11.6          86.2       0.9X
-HOUR of date                                       1491           1517         
 25          6.7         149.1       0.5X
-MINUTE of date                                     1514           1520         
  9          6.6         151.4       0.5X
-SECOND of date                                     1657           1677         
 27          6.0         165.7       0.5X
-MILLISECONDS of date                               1646           1669         
 26          6.1         164.6       0.5X
-MICROSECONDS of date                               1538           1556         
 23          6.5         153.8       0.5X
-EPOCH of date                                      1699           1718         
 28          5.9         169.9       0.5X
+cast to date                                        771            779         
 10         13.0          77.1       1.0X
+MILLENNIUM of date                                  839            858         
 22         11.9          83.9       0.9X
+CENTURY of date                                     853            872         
 22         11.7          85.3       0.9X
+DECADE of date                                      871            878         
  6         11.5          87.1       0.9X
+YEAR of date                                        853            863         
  9         11.7          85.3       0.9X
+ISOYEAR of date                                    1011           1021         
 11          9.9         101.1       0.8X
+QUARTER of date                                     981            988         
  7         10.2          98.1       0.8X
+MONTH of date                                       859            863         
  5         11.6          85.9       0.9X
+WEEK of date                                       1148           1159         
 12          8.7         114.8       0.7X
+DAY of date                                         852            855         
  2         11.7          85.2       0.9X
+DAYOFWEEK of date                                   937            952         
 12         10.7          93.7       0.8X
+DOW of date                                         953            956         
  3         10.5          95.3       0.8X
+ISODOW of date                                      899            916         
 16         11.1          89.9       0.9X
+DOY of date                                         857            865         
  7         11.7          85.7       0.9X
+HOUR of date                                       1644           1662         
 18          6.1         164.4       0.5X
+MINUTE of date                                     1633           1644         
 10          6.1         163.3       0.5X
+SECOND of date                                     1719           1727         
  9          5.8         171.9       0.4X
+MILLISECONDS of date                               1721           1733         
 11          5.8         172.1       0.4X
+MICROSECONDS of date                               1656           1680         
 34          6.0         165.6       0.5X
+EPOCH of date                                      1721           1736         
 15          5.8         172.1       0.4X
+
+Java HotSpot(TM) 64-Bit Server VM 11.0.5+10-LTS on Mac OS X 10.15.3
+Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz
+Invoke extract for interval:              Best Time(ms)   Avg Time(ms)   
Stdev(ms)    Rate(M/s)   Per Row(ns)   Relative
+------------------------------------------------------------------------------------------------------------------------
+cast to interval                                    939            947         
  9         10.7          93.9       1.0X
+MILLENNIUM of interval                              953            960         
  6         10.5          95.3       1.0X
+CENTURY of interval                                 971            979         
 10         10.3          97.1       1.0X
+DECADE of interval                                  962            969         
  7         10.4          96.2       1.0X
+YEAR of interval                                    965            973         
 10         10.4          96.5       1.0X
+QUARTER of interval                                 967            979         
 15         10.3          96.7       1.0X
+MONTH of interval                                   951            979         
 26         10.5          95.1       1.0X
+DAY of interval                                     945            970         
 25         10.6          94.5       1.0X
+HOUR of interval                                    963            970         
  9         10.4          96.3       1.0X
+MINUTE of interval                                  972            991         
 24         10.3          97.2       1.0X
+SECOND of interval                                 1053           1057         
  8          9.5         105.3       0.9X
+MILLISECONDS of interval                           1042           1048         
 11          9.6         104.2       0.9X
+MICROSECONDS of interval                            963            967         
  4         10.4          96.3       1.0X
+EPOCH of interval                                  1051           1071         
 22          9.5         105.1       0.9X
 
 Java HotSpot(TM) 64-Bit Server VM 11.0.5+10-LTS on Mac OS X 10.15.3
 Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz
 Invoke date_part for interval:            Best Time(ms)   Avg Time(ms)   
Stdev(ms)    Rate(M/s)   Per Row(ns)   Relative
 
------------------------------------------------------------------------------------------------------------------------
-cast to interval                                    971            976         
  5         10.3          97.1       1.0X
-MILLENNIUM of interval                              983           1009         
 23         10.2          98.3       1.0X
-CENTURY of interval                                 972            984         
 12         10.3          97.2       1.0X
-DECADE of interval                                  954            962         
 10         10.5          95.4       1.0X
-YEAR of interval                                    954            973         
 17         10.5          95.4       1.0X
-QUARTER of interval                                1009           1020         
 11          9.9         100.9       1.0X
-MONTH of interval                                   946            963         
 16         10.6          94.6       1.0X
-DAY of interval                                     952            963         
 12         10.5          95.2       1.0X
-HOUR of interval                                    948            960         
 11         10.5          94.8       1.0X
-MINUTE of interval                                 1035           1040         
  4          9.7         103.5       0.9X
-SECOND of interval                                 1085           1105         
 31          9.2         108.5       0.9X
-MILLISECONDS of interval                           1065           1088         
 24          9.4         106.5       0.9X
-MICROSECONDS of interval                            992           1007         
 17         10.1          99.2       1.0X
-EPOCH of interval                                  1087           1103         
 25          9.2         108.7       0.9X
+cast to interval                                    944            952         
  8         10.6          94.4       1.0X
+MILLENNIUM of interval                              955            960         
  5         10.5          95.5       1.0X
+CENTURY of interval                                 958            972         
 12         10.4          95.8       1.0X
+DECADE of interval                                  962            967         
  6         10.4          96.2       1.0X
+YEAR of interval                                    958            978         
 18         10.4          95.8       1.0X
+QUARTER of interval                                 979            998         
 19         10.2          97.9       1.0X
+MONTH of interval                                   949            963         
 12         10.5          94.9       1.0X
+DAY of interval                                     958            971         
 11         10.4          95.8       1.0X
+HOUR of interval                                    947            962         
 15         10.6          94.7       1.0X
+MINUTE of interval                                  989           1006         
 15         10.1          98.9       1.0X
+SECOND of interval                                 1061           1064         
  4          9.4         106.1       0.9X
+MILLISECONDS of interval                           1042           1061         
 18          9.6         104.2       0.9X
+MICROSECONDS of interval                            982            992         
 12         10.2          98.2       1.0X
+EPOCH of interval                                  1047           1057         
 13          9.5         104.7       0.9X
 
diff --git a/sql/core/benchmarks/ExtractBenchmark-results.txt 
b/sql/core/benchmarks/ExtractBenchmark-results.txt
index 36bdbd0..94cf0bc 100644
--- a/sql/core/benchmarks/ExtractBenchmark-results.txt
+++ b/sql/core/benchmarks/ExtractBenchmark-results.txt
@@ -2,118 +2,137 @@ Java HotSpot(TM) 64-Bit Server VM 1.8.0_231-b11 on Mac OS X 
10.15.3
 Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz
 Invoke extract for timestamp:             Best Time(ms)   Avg Time(ms)   
Stdev(ms)    Rate(M/s)   Per Row(ns)   Relative
 
------------------------------------------------------------------------------------------------------------------------
-cast to timestamp                                   287            308         
 19         34.8          28.7       1.0X
-MILLENNIUM of timestamp                             896            918         
 20         11.2          89.6       0.3X
-CENTURY of timestamp                                849            856         
  7         11.8          84.9       0.3X
-DECADE of timestamp                                 765            777         
 17         13.1          76.5       0.4X
-YEAR of timestamp                                   754            756         
  2         13.3          75.4       0.4X
-ISOYEAR of timestamp                                843            849         
  5         11.9          84.3       0.3X
-QUARTER of timestamp                                867            873         
  9         11.5          86.7       0.3X
-MONTH of timestamp                                  758            762         
  4         13.2          75.8       0.4X
-WEEK of timestamp                                  1049           1054         
  6          9.5         104.9       0.3X
-DAY of timestamp                                    750            763         
 11         13.3          75.0       0.4X
-DAYOFWEEK of timestamp                              890            918         
 25         11.2          89.0       0.3X
-DOW of timestamp                                    879            887         
  8         11.4          87.9       0.3X
-ISODOW of timestamp                                 862            869         
 11         11.6          86.2       0.3X
-DOY of timestamp                                    811            868         
 55         12.3          81.1       0.4X
-HOUR of timestamp                                   627            638         
 11         16.0          62.7       0.5X
-MINUTE of timestamp                                 600            606         
  6         16.7          60.0       0.5X
-SECOND of timestamp                                 743            799         
 51         13.5          74.3       0.4X
-MILLISECONDS of timestamp                           723            737         
 22         13.8          72.3       0.4X
-MICROSECONDS of timestamp                           648            653         
  5         15.4          64.8       0.4X
-EPOCH of timestamp                                  780            800         
 17         12.8          78.0       0.4X
+cast to timestamp                                   275            307         
 28         36.3          27.5       1.0X
+MILLENNIUM of timestamp                             911            924         
 20         11.0          91.1       0.3X
+CENTURY of timestamp                                846            850         
  5         11.8          84.6       0.3X
+DECADE of timestamp                                 744            761         
 21         13.4          74.4       0.4X
+YEAR of timestamp                                   750            764         
 15         13.3          75.0       0.4X
+ISOYEAR of timestamp                                815            828         
 11         12.3          81.5       0.3X
+QUARTER of timestamp                                882            895         
 12         11.3          88.2       0.3X
+MONTH of timestamp                                  739            760         
 19         13.5          73.9       0.4X
+WEEK of timestamp                                  1058           1082         
 23          9.4         105.8       0.3X
+DAY of timestamp                                    722            730         
  8         13.8          72.2       0.4X
+DAYOFWEEK of timestamp                              860            907         
 58         11.6          86.0       0.3X
+DOW of timestamp                                    853            860         
  7         11.7          85.3       0.3X
+ISODOW of timestamp                                 829            835         
  8         12.1          82.9       0.3X
+DOY of timestamp                                    757            772         
 20         13.2          75.7       0.4X
+HOUR of timestamp                                   586            594         
  7         17.1          58.6       0.5X
+MINUTE of timestamp                                 577            584         
  8         17.3          57.7       0.5X
+SECOND of timestamp                                 810            827         
 17         12.4          81.0       0.3X
+MILLISECONDS of timestamp                           687            704         
 16         14.6          68.7       0.4X
+MICROSECONDS of timestamp                           628            632         
  6         15.9          62.8       0.4X
+EPOCH of timestamp                                  750            761         
 12         13.3          75.0       0.4X
 
 Java HotSpot(TM) 64-Bit Server VM 1.8.0_231-b11 on Mac OS X 10.15.3
 Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz
 Invoke date_part for timestamp:           Best Time(ms)   Avg Time(ms)   
Stdev(ms)    Rate(M/s)   Per Row(ns)   Relative
 
------------------------------------------------------------------------------------------------------------------------
-cast to timestamp                                   238            248         
 12         42.0          23.8       1.0X
-MILLENNIUM of timestamp                             862            875         
 12         11.6          86.2       0.3X
-CENTURY of timestamp                                833            847         
 22         12.0          83.3       0.3X
-DECADE of timestamp                                 759            765         
  7         13.2          75.9       0.3X
-YEAR of timestamp                                   744            755         
 15         13.4          74.4       0.3X
-ISOYEAR of timestamp                                937           1019         
 73         10.7          93.7       0.3X
-QUARTER of timestamp                               1011           1091         
 69          9.9         101.1       0.2X
-MONTH of timestamp                                  846            888         
 40         11.8          84.6       0.3X
-WEEK of timestamp                                  1210           1239         
 41          8.3         121.0       0.2X
-DAY of timestamp                                    932            979         
 41         10.7          93.2       0.3X
-DAYOFWEEK of timestamp                             1174           1200         
 42          8.5         117.4       0.2X
-DOW of timestamp                                   1131           1172         
 37          8.8         113.1       0.2X
-ISODOW of timestamp                                 896            903         
  7         11.2          89.6       0.3X
-DOY of timestamp                                    805            818         
 12         12.4          80.5       0.3X
-HOUR of timestamp                                   596            597         
  2         16.8          59.6       0.4X
-MINUTE of timestamp                                 582            597         
 17         17.2          58.2       0.4X
-SECOND of timestamp                                 697            709         
 16         14.4          69.7       0.3X
-MILLISECONDS of timestamp                           700            710         
 10         14.3          70.0       0.3X
-MICROSECONDS of timestamp                           612            631         
 21         16.3          61.2       0.4X
-EPOCH of timestamp                                  755            760         
  7         13.2          75.5       0.3X
+cast to timestamp                                   238            242         
  4         42.0          23.8       1.0X
+MILLENNIUM of timestamp                             811            835         
 25         12.3          81.1       0.3X
+CENTURY of timestamp                                799            823         
 21         12.5          79.9       0.3X
+DECADE of timestamp                                 733            743         
 12         13.6          73.3       0.3X
+YEAR of timestamp                                   714            717         
  3         14.0          71.4       0.3X
+ISOYEAR of timestamp                                874            900         
 24         11.4          87.4       0.3X
+QUARTER of timestamp                                903            910         
 11         11.1          90.3       0.3X
+MONTH of timestamp                                  774            808         
 44         12.9          77.4       0.3X
+WEEK of timestamp                                  1053           1064         
 12          9.5         105.3       0.2X
+DAY of timestamp                                    755            770         
 14         13.2          75.5       0.3X
+DAYOFWEEK of timestamp                              831            841         
  9         12.0          83.1       0.3X
+DOW of timestamp                                    871            898         
 23         11.5          87.1       0.3X
+ISODOW of timestamp                                 832            887         
 59         12.0          83.2       0.3X
+DOY of timestamp                                    755            767         
 13         13.2          75.5       0.3X
+HOUR of timestamp                                   580            597         
 27         17.3          58.0       0.4X
+MINUTE of timestamp                                 572            589         
 15         17.5          57.2       0.4X
+SECOND of timestamp                                 716            730         
 12         14.0          71.6       0.3X
+MILLISECONDS of timestamp                           716            762         
 57         14.0          71.6       0.3X
+MICROSECONDS of timestamp                           600            610         
 12         16.7          60.0       0.4X
+EPOCH of timestamp                                  751            779         
 44         13.3          75.1       0.3X
 
 Java HotSpot(TM) 64-Bit Server VM 1.8.0_231-b11 on Mac OS X 10.15.3
 Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz
 Invoke extract for date:                  Best Time(ms)   Avg Time(ms)   
Stdev(ms)    Rate(M/s)   Per Row(ns)   Relative
 
------------------------------------------------------------------------------------------------------------------------
-cast to date                                        633            641         
  7         15.8          63.3       1.0X
-MILLENNIUM of date                                  824            845         
 26         12.1          82.4       0.8X
-CENTURY of date                                     864            878         
 13         11.6          86.4       0.7X
-DECADE of date                                      746            763         
 17         13.4          74.6       0.8X
-YEAR of date                                        752            785         
 39         13.3          75.2       0.8X
-ISOYEAR of date                                     900            905         
  5         11.1          90.0       0.7X
-QUARTER of date                                     906            930         
 23         11.0          90.6       0.7X
-MONTH of date                                       747            752         
  6         13.4          74.7       0.8X
-WEEK of date                                       1089           1100         
 17          9.2         108.9       0.6X
-DAY of date                                         795            803         
 13         12.6          79.5       0.8X
-DAYOFWEEK of date                                   937            944         
 10         10.7          93.7       0.7X
-DOW of date                                         927           1003         
 66         10.8          92.7       0.7X
-ISODOW of date                                      977            980         
  7         10.2          97.7       0.6X
-DOY of date                                         827            877         
 45         12.1          82.7       0.8X
-HOUR of date                                       1525           1547         
 34          6.6         152.5       0.4X
-MINUTE of date                                     1473           1499         
 23          6.8         147.3       0.4X
-SECOND of date                                     1600           1615         
 15          6.2         160.0       0.4X
-MILLISECONDS of date                               1666           1765         
156          6.0         166.6       0.4X
-MICROSECONDS of date                               1554           1627         
127          6.4         155.4       0.4X
-EPOCH of date                                      1615           1646         
 27          6.2         161.5       0.4X
+cast to date                                        629            634         
  6         15.9          62.9       1.0X
+MILLENNIUM of date                                  826            912         
 97         12.1          82.6       0.8X
+CENTURY of date                                     797            840         
 54         12.6          79.7       0.8X
+DECADE of date                                      734            737         
  4         13.6          73.4       0.9X
+YEAR of date                                        721            768         
 78         13.9          72.1       0.9X
+ISOYEAR of date                                     884            892         
 13         11.3          88.4       0.7X
+QUARTER of date                                     894            949         
 69         11.2          89.4       0.7X
+MONTH of date                                       726            729         
  2         13.8          72.6       0.9X
+WEEK of date                                       1013           1023         
  9          9.9         101.3       0.6X
+DAY of date                                         727            747         
 26         13.8          72.7       0.9X
+DAYOFWEEK of date                                   828            832         
  6         12.1          82.8       0.8X
+DOW of date                                         846            850         
  5         11.8          84.6       0.7X
+ISODOW of date                                      803            810         
  7         12.5          80.3       0.8X
+DOY of date                                         751            761         
 11         13.3          75.1       0.8X
+HOUR of date                                       1372           1376         
  5          7.3         137.2       0.5X
+MINUTE of date                                     1379           1398         
 20          7.3         137.9       0.5X
+SECOND of date                                     1530           1542         
 10          6.5         153.0       0.4X
+MILLISECONDS of date                               1532           1541         
  8          6.5         153.2       0.4X
+MICROSECONDS of date                               1442           1462         
 23          6.9         144.2       0.4X
+EPOCH of date                                      1573           1594         
 20          6.4         157.3       0.4X
 
 Java HotSpot(TM) 64-Bit Server VM 1.8.0_231-b11 on Mac OS X 10.15.3
 Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz
 Invoke date_part for date:                Best Time(ms)   Avg Time(ms)   
Stdev(ms)    Rate(M/s)   Per Row(ns)   Relative
 
------------------------------------------------------------------------------------------------------------------------
-cast to date                                        676            690         
 20         14.8          67.6       1.0X
-MILLENNIUM of date                                  868            882         
 16         11.5          86.8       0.8X
-CENTURY of date                                     875            880         
  8         11.4          87.5       0.8X
-DECADE of date                                      762            776         
 16         13.1          76.2       0.9X
-YEAR of date                                        788            800         
 11         12.7          78.8       0.9X
-ISOYEAR of date                                     903            917         
 12         11.1          90.3       0.7X
-QUARTER of date                                     983           1018         
 40         10.2          98.3       0.7X
-MONTH of date                                       836            857         
 19         12.0          83.6       0.8X
-WEEK of date                                       1137           1168         
 28          8.8         113.7       0.6X
-DAY of date                                         768            817         
 82         13.0          76.8       0.9X
-DAYOFWEEK of date                                   890            926         
 36         11.2          89.0       0.8X
-DOW of date                                        1007           1033         
 39          9.9         100.7       0.7X
-ISODOW of date                                      962            969         
  7         10.4          96.2       0.7X
-DOY of date                                         797            882         
 80         12.6          79.7       0.8X
-HOUR of date                                       1449           1482         
 29          6.9         144.9       0.5X
-MINUTE of date                                     1536           1610         
 69          6.5         153.6       0.4X
-SECOND of date                                     1675           1823         
128          6.0         167.5       0.4X
-MILLISECONDS of date                               1605           1622         
 18          6.2         160.5       0.4X
-MICROSECONDS of date                               1481           1504         
 32          6.8         148.1       0.5X
-EPOCH of date                                      1656           1843         
296          6.0         165.6       0.4X
+cast to date                                        622            633         
 14         16.1          62.2       1.0X
+MILLENNIUM of date                                  793            814         
 20         12.6          79.3       0.8X
+CENTURY of date                                     798            809         
 12         12.5          79.8       0.8X
+DECADE of date                                      735            740         
  6         13.6          73.5       0.8X
+YEAR of date                                        714            732         
 23         14.0          71.4       0.9X
+ISOYEAR of date                                     881            886         
  4         11.3          88.1       0.7X
+QUARTER of date                                     916            925         
 14         10.9          91.6       0.7X
+MONTH of date                                       732            737         
  5         13.7          73.2       0.8X
+WEEK of date                                       1022           1034         
 10          9.8         102.2       0.6X
+DAY of date                                         722            745         
 26         13.8          72.2       0.9X
+DAYOFWEEK of date                                   831            849         
 17         12.0          83.1       0.7X
+DOW of date                                         853            858         
  4         11.7          85.3       0.7X
+ISODOW of date                                      824            825         
  1         12.1          82.4       0.8X
+DOY of date                                         749            752         
  4         13.3          74.9       0.8X
+HOUR of date                                       1422           1425         
  3          7.0         142.2       0.4X
+MINUTE of date                                     1379           1394         
 13          7.3         137.9       0.5X
+SECOND of date                                     1525           1536         
  9          6.6         152.5       0.4X
+MILLISECONDS of date                               1542           1555         
 14          6.5         154.2       0.4X
+MICROSECONDS of date                               1446           1449         
  2          6.9         144.6       0.4X
+EPOCH of date                                      1589           1621         
 35          6.3         158.9       0.4X
+
+Java HotSpot(TM) 64-Bit Server VM 1.8.0_231-b11 on Mac OS X 10.15.3
+Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz
+Invoke extract for interval:              Best Time(ms)   Avg Time(ms)   
Stdev(ms)    Rate(M/s)   Per Row(ns)   Relative
+------------------------------------------------------------------------------------------------------------------------
+cast to interval                                    913            921         
  8         11.0          91.3       1.0X
+MILLENNIUM of interval                              976            983         
 12         10.2          97.6       0.9X
+CENTURY of interval                                 976            979         
  3         10.2          97.6       0.9X
+DECADE of interval                                  975            987         
 10         10.3          97.5       0.9X
+YEAR of interval                                    964            968         
  5         10.4          96.4       0.9X
+QUARTER of interval                                 987            997         
 12         10.1          98.7       0.9X
+MONTH of interval                                   974            983         
 11         10.3          97.4       0.9X
+DAY of interval                                     959            962         
  3         10.4          95.9       1.0X
+HOUR of interval                                    972            986         
 13         10.3          97.2       0.9X
+MINUTE of interval                                  985            988         
  4         10.2          98.5       0.9X
+SECOND of interval                                 1128           1141         
 13          8.9         112.8       0.8X
+MILLISECONDS of interval                           1083           1086         
  3          9.2         108.3       0.8X
+MICROSECONDS of interval                            963            969         
  5         10.4          96.3       0.9X
+EPOCH of interval                                  1094           1116         
 23          9.1         109.4       0.8X
 
 Java HotSpot(TM) 64-Bit Server VM 1.8.0_231-b11 on Mac OS X 10.15.3
 Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz
 Invoke date_part for interval:            Best Time(ms)   Avg Time(ms)   
Stdev(ms)    Rate(M/s)   Per Row(ns)   Relative
 
------------------------------------------------------------------------------------------------------------------------
-cast to interval                                    919            959         
 45         10.9          91.9       1.0X
-MILLENNIUM of interval                              959           1001         
 36         10.4          95.9       1.0X
-CENTURY of interval                                 974            998         
 21         10.3          97.4       0.9X
-DECADE of interval                                  975            989         
 13         10.3          97.5       0.9X
-YEAR of interval                                    987           1012         
 24         10.1          98.7       0.9X
-QUARTER of interval                                1014           1031         
 25          9.9         101.4       0.9X
-MONTH of interval                                   978           1018         
 45         10.2          97.8       0.9X
-DAY of interval                                    1012           1095         
 92          9.9         101.2       0.9X
-HOUR of interval                                   1129           1143         
 14          8.9         112.9       0.8X
-MINUTE of interval                                 1038           1060         
 25          9.6         103.8       0.9X
-SECOND of interval                                 1062           1289         
356          9.4         106.2       0.9X
-MILLISECONDS of interval                           1142           1226         
 83          8.8         114.2       0.8X
-MICROSECONDS of interval                           1038           1129         
 79          9.6         103.8       0.9X
-EPOCH of interval                                  1090           1127         
 34          9.2         109.0       0.8X
+cast to interval                                    950            971         
 23         10.5          95.0       1.0X
+MILLENNIUM of interval                              989           1000         
 11         10.1          98.9       1.0X
+CENTURY of interval                                 984            990         
  6         10.2          98.4       1.0X
+DECADE of interval                                  962            978         
 14         10.4          96.2       1.0X
+YEAR of interval                                    945            963         
 16         10.6          94.5       1.0X
+QUARTER of interval                                 985            998         
 17         10.2          98.5       1.0X
+MONTH of interval                                   970            976         
  9         10.3          97.0       1.0X
+DAY of interval                                     953            962         
  8         10.5          95.3       1.0X
+HOUR of interval                                    942            956         
 17         10.6          94.2       1.0X
+MINUTE of interval                                  975            993         
 16         10.3          97.5       1.0X
+SECOND of interval                                 1110           1122         
 12          9.0         111.0       0.9X
+MILLISECONDS of interval                           1056           1074         
 22          9.5         105.6       0.9X
+MICROSECONDS of interval                            939            960         
 36         10.7          93.9       1.0X
+EPOCH of interval                                  1071           1093         
 21          9.3         107.1       0.9X
 
diff --git a/sql/core/src/test/resources/sql-tests/inputs/extract.sql 
b/sql/core/src/test/resources/sql-tests/inputs/extract.sql
index 2d6cad8..4bcc15c 100644
--- a/sql/core/src/test/resources/sql-tests/inputs/extract.sql
+++ b/sql/core/src/test/resources/sql-tests/inputs/extract.sql
@@ -1,43 +1,43 @@
-CREATE TEMPORARY VIEW t AS select '2011-05-06 07:08:09.1234567' as c;
+CREATE TEMPORARY VIEW t AS select '2011-05-06 07:08:09.1234567' as c, interval 
10 year 20 month 30 day 40 hour 50 minute 6.7890 second as i;
 
-select extract(millennium from c) from t;
-select extract(millennia from c) from t;
-select extract(mil from c) from t;
-select extract(mils from c) from t;
+select extract(millennium from c), extract(millennium from i) from t;
+select extract(millennia from c), extract(millennia from i) from t;
+select extract(mil from c), extract(mil from i) from t;
+select extract(mils from c), extract(mils from i) from t;
 
-select extract(century from c) from t;
-select extract(centuries from c) from t;
-select extract(c from c) from t;
-select extract(cent from c) from t;
+select extract(century from c), extract(century from i) from t;
+select extract(centuries from c), extract(centuries from i) from t;
+select extract(c from c),  extract(c from i) from t;
+select extract(cent from c), extract(cent from i) from t;
 
-select extract(decade from c) from t;
-select extract(decades from c) from t;
-select extract(dec from c) from t;
-select extract(decs from c) from t;
+select extract(decade from c), extract(decade from i) from t;
+select extract(decades from c), extract(decades from i) from t;
+select extract(dec from c), extract(dec from i) from t;
+select extract(decs from c), extract(decs from i) from t;
 
-select extract(year from c) from t;
-select extract(y from c) from t;
-select extract(years from c) from t;
-select extract(yr from c) from t;
-select extract(yrs from c) from t;
+select extract(year from c), extract(year from i) from t;
+select extract(y from c), extract(y from i) from t;
+select extract(years from c), extract(years from i) from t;
+select extract(yr from c), extract(yr from i) from t;
+select extract(yrs from c), extract(yrs from i) from t;
 
 select extract(isoyear from c) from t;
 
-select extract(quarter from c) from t;
-select extract(qtr from c) from t;
+select extract(quarter from c), extract(quarter from i) from t;
+select extract(qtr from c), extract(qtr from i) from t;
 
-select extract(month from c) from t;
-select extract(mon from c) from t;
-select extract(mons from c) from t;
-select extract(months from c) from t;
+select extract(month from c), extract(month from i) from t;
+select extract(mon from c), extract(mon from i) from t;
+select extract(mons from c), extract(mons from i) from t;
+select extract(months from c), extract(months from i) from t;
 
 select extract(week from c) from t;
 select extract(w from c) from t;
 select extract(weeks from c) from t;
 
-select extract(day from c) from t;
-select extract(d from c) from t;
-select extract(days from c) from t;
+select extract(day from c), extract(day from i) from t;
+select extract(d from c), extract(d from i) from t;
+select extract(days from c), extract(days from i) from t;
 
 select extract(dayofweek from c) from t;
 
@@ -47,38 +47,39 @@ select extract(isodow from c) from t;
 
 select extract(doy from c) from t;
 
-select extract(hour from c) from t;
-select extract(h from c) from t;
-select extract(hours from c) from t;
-select extract(hr from c) from t;
-select extract(hrs from c) from t;
-
-select extract(minute from c) from t;
-select extract(m from c) from t;
-select extract(min from c) from t;
-select extract(mins from c) from t;
-select extract(minutes from c) from t;
-
-select extract(second from c) from t;
-select extract(s from c) from t;
-select extract(sec from c) from t;
-select extract(seconds from c) from t;
-select extract(secs from c) from t;
-
-select extract(milliseconds from c) from t;
-select extract(msec from c) from t;
-select extract(msecs from c) from t;
-select extract(millisecon from c) from t;
-select extract(mseconds from c) from t;
-select extract(ms from c) from t;
-
-select extract(microseconds from c) from t;
-select extract(usec from c) from t;
-select extract(usecs from c) from t;
-select extract(useconds from c) from t;
-select extract(microsecon from c) from t;
-select extract(us from c) from t;
-
-select extract(epoch from c) from t;
+select extract(hour from c), extract(hour from i) from t;
+select extract(h from c), extract(h from i) from t;
+select extract(hours from c), extract(hours from i) from t;
+select extract(hr from c), extract(hr from i) from t;
+select extract(hrs from c), extract(hrs from i) from t;
+
+select extract(minute from c), extract(minute from i) from t;
+select extract(m from c), extract(m from i) from t;
+select extract(min from c), extract(min from i) from t;
+select extract(mins from c), extract(mins from i) from t;
+select extract(minutes from c), extract(minutes from i) from t;
+
+select extract(second from c), extract(second from i) from t;
+select extract(s from c), extract(s from i) from t;
+select extract(sec from c), extract(sec from i) from t;
+select extract(seconds from c), extract(seconds from i) from t;
+select extract(secs from c), extract(secs from i) from t;
+
+select extract(milliseconds from c), extract(milliseconds from i) from t;
+select extract(msec from c), extract(msec from i) from t;
+select extract(msecs from c), extract(msecs from i) from t;
+select extract(millisecon from c), extract(millisecon from i) from t;
+select extract(mseconds from c), extract(mseconds from i) from t;
+select extract(ms from c), extract(ms from i) from t;
+
+select extract(microseconds from c), extract(microseconds from i) from t;
+select extract(usec from c), extract(usec from i) from t;
+select extract(usecs from c), extract(usecs from i) from t;
+select extract(useconds from c), extract(useconds from i) from t;
+select extract(microsecon from c), extract(microsecon from i) from t;
+select extract(us from c), extract(us from i) from t;
+
+select extract(epoch from c), extract(epoch from i) from t;
 
 select extract(not_supported from c) from t;
+select extract(not_supported from i) from t;
diff --git a/sql/core/src/test/resources/sql-tests/results/extract.sql.out 
b/sql/core/src/test/resources/sql-tests/results/extract.sql.out
index 583459f9..38c8490 100644
--- a/sql/core/src/test/resources/sql-tests/results/extract.sql.out
+++ b/sql/core/src/test/resources/sql-tests/results/extract.sql.out
@@ -1,9 +1,9 @@
 -- Automatically generated by SQLQueryTestSuite
--- Number of queries: 64
+-- Number of queries: 65
 
 
 -- !query
-CREATE TEMPORARY VIEW t AS select '2011-05-06 07:08:09.1234567' as c
+CREATE TEMPORARY VIEW t AS select '2011-05-06 07:08:09.1234567' as c, interval 
10 year 20 month 30 day 40 hour 50 minute 6.7890 second as i
 -- !query schema
 struct<>
 -- !query output
@@ -11,201 +11,201 @@ struct<>
 
 
 -- !query
-select extract(millennium from c) from t
+select extract(millennium from c), extract(millennium from i) from t
 -- !query schema
-struct<date_part('millennium', `c`):int>
+struct<date_part('millennium', t.`c`):int,date_part('millennium', t.`i`):int>
 -- !query output
-3
+3      0
 
 
 -- !query
-select extract(millennia from c) from t
+select extract(millennia from c), extract(millennia from i) from t
 -- !query schema
-struct<date_part('millennia', `c`):int>
+struct<date_part('millennia', t.`c`):int,date_part('millennia', t.`i`):int>
 -- !query output
-3
+3      0
 
 
 -- !query
-select extract(mil from c) from t
+select extract(mil from c), extract(mil from i) from t
 -- !query schema
-struct<date_part('mil', `c`):int>
+struct<date_part('mil', t.`c`):int,date_part('mil', t.`i`):int>
 -- !query output
-3
+3      0
 
 
 -- !query
-select extract(mils from c) from t
+select extract(mils from c), extract(mils from i) from t
 -- !query schema
-struct<date_part('mils', `c`):int>
+struct<date_part('mils', t.`c`):int,date_part('mils', t.`i`):int>
 -- !query output
-3
+3      0
 
 
 -- !query
-select extract(century from c) from t
+select extract(century from c), extract(century from i) from t
 -- !query schema
-struct<date_part('century', `c`):int>
+struct<date_part('century', t.`c`):int,date_part('century', t.`i`):int>
 -- !query output
-21
+21     0
 
 
 -- !query
-select extract(centuries from c) from t
+select extract(centuries from c), extract(centuries from i) from t
 -- !query schema
-struct<date_part('centuries', `c`):int>
+struct<date_part('centuries', t.`c`):int,date_part('centuries', t.`i`):int>
 -- !query output
-21
+21     0
 
 
 -- !query
-select extract(c from c) from t
+select extract(c from c),  extract(c from i) from t
 -- !query schema
-struct<date_part('c', `c`):int>
+struct<date_part('c', t.`c`):int,date_part('c', t.`i`):int>
 -- !query output
-21
+21     0
 
 
 -- !query
-select extract(cent from c) from t
+select extract(cent from c), extract(cent from i) from t
 -- !query schema
-struct<date_part('cent', `c`):int>
+struct<date_part('cent', t.`c`):int,date_part('cent', t.`i`):int>
 -- !query output
-21
+21     0
 
 
 -- !query
-select extract(decade from c) from t
+select extract(decade from c), extract(decade from i) from t
 -- !query schema
-struct<date_part('decade', `c`):int>
+struct<date_part('decade', t.`c`):int,date_part('decade', t.`i`):int>
 -- !query output
-201
+201    1
 
 
 -- !query
-select extract(decades from c) from t
+select extract(decades from c), extract(decades from i) from t
 -- !query schema
-struct<date_part('decades', `c`):int>
+struct<date_part('decades', t.`c`):int,date_part('decades', t.`i`):int>
 -- !query output
-201
+201    1
 
 
 -- !query
-select extract(dec from c) from t
+select extract(dec from c), extract(dec from i) from t
 -- !query schema
-struct<date_part('dec', `c`):int>
+struct<date_part('dec', t.`c`):int,date_part('dec', t.`i`):int>
 -- !query output
-201
+201    1
 
 
 -- !query
-select extract(decs from c) from t
+select extract(decs from c), extract(decs from i) from t
 -- !query schema
-struct<date_part('decs', `c`):int>
+struct<date_part('decs', t.`c`):int,date_part('decs', t.`i`):int>
 -- !query output
-201
+201    1
 
 
 -- !query
-select extract(year from c) from t
+select extract(year from c), extract(year from i) from t
 -- !query schema
-struct<date_part('year', `c`):int>
+struct<date_part('year', t.`c`):int,date_part('year', t.`i`):int>
 -- !query output
-2011
+2011   11
 
 
 -- !query
-select extract(y from c) from t
+select extract(y from c), extract(y from i) from t
 -- !query schema
-struct<date_part('y', `c`):int>
+struct<date_part('y', t.`c`):int,date_part('y', t.`i`):int>
 -- !query output
-2011
+2011   11
 
 
 -- !query
-select extract(years from c) from t
+select extract(years from c), extract(years from i) from t
 -- !query schema
-struct<date_part('years', `c`):int>
+struct<date_part('years', t.`c`):int,date_part('years', t.`i`):int>
 -- !query output
-2011
+2011   11
 
 
 -- !query
-select extract(yr from c) from t
+select extract(yr from c), extract(yr from i) from t
 -- !query schema
-struct<date_part('yr', `c`):int>
+struct<date_part('yr', t.`c`):int,date_part('yr', t.`i`):int>
 -- !query output
-2011
+2011   11
 
 
 -- !query
-select extract(yrs from c) from t
+select extract(yrs from c), extract(yrs from i) from t
 -- !query schema
-struct<date_part('yrs', `c`):int>
+struct<date_part('yrs', t.`c`):int,date_part('yrs', t.`i`):int>
 -- !query output
-2011
+2011   11
 
 
 -- !query
 select extract(isoyear from c) from t
 -- !query schema
-struct<date_part('isoyear', `c`):int>
+struct<date_part('isoyear', t.`c`):int>
 -- !query output
 2011
 
 
 -- !query
-select extract(quarter from c) from t
+select extract(quarter from c), extract(quarter from i) from t
 -- !query schema
-struct<date_part('quarter', `c`):int>
+struct<date_part('quarter', t.`c`):int,date_part('quarter', t.`i`):tinyint>
 -- !query output
-2
+2      3
 
 
 -- !query
-select extract(qtr from c) from t
+select extract(qtr from c), extract(qtr from i) from t
 -- !query schema
-struct<date_part('qtr', `c`):int>
+struct<date_part('qtr', t.`c`):int,date_part('qtr', t.`i`):tinyint>
 -- !query output
-2
+2      3
 
 
 -- !query
-select extract(month from c) from t
+select extract(month from c), extract(month from i) from t
 -- !query schema
-struct<date_part('month', `c`):int>
+struct<date_part('month', t.`c`):int,date_part('month', t.`i`):tinyint>
 -- !query output
-5
+5      8
 
 
 -- !query
-select extract(mon from c) from t
+select extract(mon from c), extract(mon from i) from t
 -- !query schema
-struct<date_part('mon', `c`):int>
+struct<date_part('mon', t.`c`):int,date_part('mon', t.`i`):tinyint>
 -- !query output
-5
+5      8
 
 
 -- !query
-select extract(mons from c) from t
+select extract(mons from c), extract(mons from i) from t
 -- !query schema
-struct<date_part('mons', `c`):int>
+struct<date_part('mons', t.`c`):int,date_part('mons', t.`i`):tinyint>
 -- !query output
-5
+5      8
 
 
 -- !query
-select extract(months from c) from t
+select extract(months from c), extract(months from i) from t
 -- !query schema
-struct<date_part('months', `c`):int>
+struct<date_part('months', t.`c`):int,date_part('months', t.`i`):tinyint>
 -- !query output
-5
+5      8
 
 
 -- !query
 select extract(week from c) from t
 -- !query schema
-struct<date_part('week', `c`):int>
+struct<date_part('week', t.`c`):int>
 -- !query output
 18
 
@@ -213,7 +213,7 @@ struct<date_part('week', `c`):int>
 -- !query
 select extract(w from c) from t
 -- !query schema
-struct<date_part('w', `c`):int>
+struct<date_part('w', t.`c`):int>
 -- !query output
 18
 
@@ -221,39 +221,39 @@ struct<date_part('w', `c`):int>
 -- !query
 select extract(weeks from c) from t
 -- !query schema
-struct<date_part('weeks', `c`):int>
+struct<date_part('weeks', t.`c`):int>
 -- !query output
 18
 
 
 -- !query
-select extract(day from c) from t
+select extract(day from c), extract(day from i) from t
 -- !query schema
-struct<date_part('day', `c`):int>
+struct<date_part('day', t.`c`):int,date_part('day', t.`i`):int>
 -- !query output
-6
+6      30
 
 
 -- !query
-select extract(d from c) from t
+select extract(d from c), extract(d from i) from t
 -- !query schema
-struct<date_part('d', `c`):int>
+struct<date_part('d', t.`c`):int,date_part('d', t.`i`):int>
 -- !query output
-6
+6      30
 
 
 -- !query
-select extract(days from c) from t
+select extract(days from c), extract(days from i) from t
 -- !query schema
-struct<date_part('days', `c`):int>
+struct<date_part('days', t.`c`):int,date_part('days', t.`i`):int>
 -- !query output
-6
+6      30
 
 
 -- !query
 select extract(dayofweek from c) from t
 -- !query schema
-struct<date_part('dayofweek', `c`):int>
+struct<date_part('dayofweek', t.`c`):int>
 -- !query output
 6
 
@@ -261,7 +261,7 @@ struct<date_part('dayofweek', `c`):int>
 -- !query
 select extract(dow from c) from t
 -- !query schema
-struct<date_part('dow', `c`):int>
+struct<date_part('dow', t.`c`):int>
 -- !query output
 5
 
@@ -269,7 +269,7 @@ struct<date_part('dow', `c`):int>
 -- !query
 select extract(isodow from c) from t
 -- !query schema
-struct<date_part('isodow', `c`):int>
+struct<date_part('isodow', t.`c`):int>
 -- !query output
 5
 
@@ -277,233 +277,233 @@ struct<date_part('isodow', `c`):int>
 -- !query
 select extract(doy from c) from t
 -- !query schema
-struct<date_part('doy', `c`):int>
+struct<date_part('doy', t.`c`):int>
 -- !query output
 126
 
 
 -- !query
-select extract(hour from c) from t
+select extract(hour from c), extract(hour from i) from t
 -- !query schema
-struct<date_part('hour', `c`):int>
+struct<date_part('hour', t.`c`):int,date_part('hour', t.`i`):bigint>
 -- !query output
-7
+7      40
 
 
 -- !query
-select extract(h from c) from t
+select extract(h from c), extract(h from i) from t
 -- !query schema
-struct<date_part('h', `c`):int>
+struct<date_part('h', t.`c`):int,date_part('h', t.`i`):bigint>
 -- !query output
-7
+7      40
 
 
 -- !query
-select extract(hours from c) from t
+select extract(hours from c), extract(hours from i) from t
 -- !query schema
-struct<date_part('hours', `c`):int>
+struct<date_part('hours', t.`c`):int,date_part('hours', t.`i`):bigint>
 -- !query output
-7
+7      40
 
 
 -- !query
-select extract(hr from c) from t
+select extract(hr from c), extract(hr from i) from t
 -- !query schema
-struct<date_part('hr', `c`):int>
+struct<date_part('hr', t.`c`):int,date_part('hr', t.`i`):bigint>
 -- !query output
-7
+7      40
 
 
 -- !query
-select extract(hrs from c) from t
+select extract(hrs from c), extract(hrs from i) from t
 -- !query schema
-struct<date_part('hrs', `c`):int>
+struct<date_part('hrs', t.`c`):int,date_part('hrs', t.`i`):bigint>
 -- !query output
-7
+7      40
 
 
 -- !query
-select extract(minute from c) from t
+select extract(minute from c), extract(minute from i) from t
 -- !query schema
-struct<date_part('minute', `c`):int>
+struct<date_part('minute', t.`c`):int,date_part('minute', t.`i`):tinyint>
 -- !query output
-8
+8      50
 
 
 -- !query
-select extract(m from c) from t
+select extract(m from c), extract(m from i) from t
 -- !query schema
-struct<date_part('m', `c`):int>
+struct<date_part('m', t.`c`):int,date_part('m', t.`i`):tinyint>
 -- !query output
-8
+8      50
 
 
 -- !query
-select extract(min from c) from t
+select extract(min from c), extract(min from i) from t
 -- !query schema
-struct<date_part('min', `c`):int>
+struct<date_part('min', t.`c`):int,date_part('min', t.`i`):tinyint>
 -- !query output
-8
+8      50
 
 
 -- !query
-select extract(mins from c) from t
+select extract(mins from c), extract(mins from i) from t
 -- !query schema
-struct<date_part('mins', `c`):int>
+struct<date_part('mins', t.`c`):int,date_part('mins', t.`i`):tinyint>
 -- !query output
-8
+8      50
 
 
 -- !query
-select extract(minutes from c) from t
+select extract(minutes from c), extract(minutes from i) from t
 -- !query schema
-struct<date_part('minutes', `c`):int>
+struct<date_part('minutes', t.`c`):int,date_part('minutes', t.`i`):tinyint>
 -- !query output
-8
+8      50
 
 
 -- !query
-select extract(second from c) from t
+select extract(second from c), extract(second from i) from t
 -- !query schema
-struct<date_part('second', `c`):decimal(8,6)>
+struct<date_part('second', t.`c`):decimal(8,6),date_part('second', 
t.`i`):decimal(8,6)>
 -- !query output
-9.123456
+9.123456       6.789000
 
 
 -- !query
-select extract(s from c) from t
+select extract(s from c), extract(s from i) from t
 -- !query schema
-struct<date_part('s', `c`):decimal(8,6)>
+struct<date_part('s', t.`c`):decimal(8,6),date_part('s', t.`i`):decimal(8,6)>
 -- !query output
-9.123456
+9.123456       6.789000
 
 
 -- !query
-select extract(sec from c) from t
+select extract(sec from c), extract(sec from i) from t
 -- !query schema
-struct<date_part('sec', `c`):decimal(8,6)>
+struct<date_part('sec', t.`c`):decimal(8,6),date_part('sec', 
t.`i`):decimal(8,6)>
 -- !query output
-9.123456
+9.123456       6.789000
 
 
 -- !query
-select extract(seconds from c) from t
+select extract(seconds from c), extract(seconds from i) from t
 -- !query schema
-struct<date_part('seconds', `c`):decimal(8,6)>
+struct<date_part('seconds', t.`c`):decimal(8,6),date_part('seconds', 
t.`i`):decimal(8,6)>
 -- !query output
-9.123456
+9.123456       6.789000
 
 
 -- !query
-select extract(secs from c) from t
+select extract(secs from c), extract(secs from i) from t
 -- !query schema
-struct<date_part('secs', `c`):decimal(8,6)>
+struct<date_part('secs', t.`c`):decimal(8,6),date_part('secs', 
t.`i`):decimal(8,6)>
 -- !query output
-9.123456
+9.123456       6.789000
 
 
 -- !query
-select extract(milliseconds from c) from t
+select extract(milliseconds from c), extract(milliseconds from i) from t
 -- !query schema
-struct<date_part('milliseconds', `c`):decimal(8,3)>
+struct<date_part('milliseconds', t.`c`):decimal(8,3),date_part('milliseconds', 
t.`i`):decimal(8,3)>
 -- !query output
-9123.456
+9123.456       6789.000
 
 
 -- !query
-select extract(msec from c) from t
+select extract(msec from c), extract(msec from i) from t
 -- !query schema
-struct<date_part('msec', `c`):decimal(8,3)>
+struct<date_part('msec', t.`c`):decimal(8,3),date_part('msec', 
t.`i`):decimal(8,3)>
 -- !query output
-9123.456
+9123.456       6789.000
 
 
 -- !query
-select extract(msecs from c) from t
+select extract(msecs from c), extract(msecs from i) from t
 -- !query schema
-struct<date_part('msecs', `c`):decimal(8,3)>
+struct<date_part('msecs', t.`c`):decimal(8,3),date_part('msecs', 
t.`i`):decimal(8,3)>
 -- !query output
-9123.456
+9123.456       6789.000
 
 
 -- !query
-select extract(millisecon from c) from t
+select extract(millisecon from c), extract(millisecon from i) from t
 -- !query schema
-struct<date_part('millisecon', `c`):decimal(8,3)>
+struct<date_part('millisecon', t.`c`):decimal(8,3),date_part('millisecon', 
t.`i`):decimal(8,3)>
 -- !query output
-9123.456
+9123.456       6789.000
 
 
 -- !query
-select extract(mseconds from c) from t
+select extract(mseconds from c), extract(mseconds from i) from t
 -- !query schema
-struct<date_part('mseconds', `c`):decimal(8,3)>
+struct<date_part('mseconds', t.`c`):decimal(8,3),date_part('mseconds', 
t.`i`):decimal(8,3)>
 -- !query output
-9123.456
+9123.456       6789.000
 
 
 -- !query
-select extract(ms from c) from t
+select extract(ms from c), extract(ms from i) from t
 -- !query schema
-struct<date_part('ms', `c`):decimal(8,3)>
+struct<date_part('ms', t.`c`):decimal(8,3),date_part('ms', t.`i`):decimal(8,3)>
 -- !query output
-9123.456
+9123.456       6789.000
 
 
 -- !query
-select extract(microseconds from c) from t
+select extract(microseconds from c), extract(microseconds from i) from t
 -- !query schema
-struct<date_part('microseconds', `c`):int>
+struct<date_part('microseconds', t.`c`):int,date_part('microseconds', 
t.`i`):bigint>
 -- !query output
-9123456
+9123456        6789000
 
 
 -- !query
-select extract(usec from c) from t
+select extract(usec from c), extract(usec from i) from t
 -- !query schema
-struct<date_part('usec', `c`):int>
+struct<date_part('usec', t.`c`):int,date_part('usec', t.`i`):bigint>
 -- !query output
-9123456
+9123456        6789000
 
 
 -- !query
-select extract(usecs from c) from t
+select extract(usecs from c), extract(usecs from i) from t
 -- !query schema
-struct<date_part('usecs', `c`):int>
+struct<date_part('usecs', t.`c`):int,date_part('usecs', t.`i`):bigint>
 -- !query output
-9123456
+9123456        6789000
 
 
 -- !query
-select extract(useconds from c) from t
+select extract(useconds from c), extract(useconds from i) from t
 -- !query schema
-struct<date_part('useconds', `c`):int>
+struct<date_part('useconds', t.`c`):int,date_part('useconds', t.`i`):bigint>
 -- !query output
-9123456
+9123456        6789000
 
 
 -- !query
-select extract(microsecon from c) from t
+select extract(microsecon from c), extract(microsecon from i) from t
 -- !query schema
-struct<date_part('microsecon', `c`):int>
+struct<date_part('microsecon', t.`c`):int,date_part('microsecon', 
t.`i`):bigint>
 -- !query output
-9123456
+9123456        6789000
 
 
 -- !query
-select extract(us from c) from t
+select extract(us from c), extract(us from i) from t
 -- !query schema
-struct<date_part('us', `c`):int>
+struct<date_part('us', t.`c`):int,date_part('us', t.`i`):bigint>
 -- !query output
-9123456
+9123456        6789000
 
 
 -- !query
-select extract(epoch from c) from t
+select extract(epoch from c), extract(epoch from i) from t
 -- !query schema
-struct<date_part('epoch', `c`):decimal(20,6)>
+struct<date_part('epoch', t.`c`):decimal(20,6),date_part('epoch', 
t.`i`):decimal(18,6)>
 -- !query output
-1304665689.123456
+1304665689.123456      370608606.789000
 
 
 -- !query
@@ -511,10 +511,14 @@ select extract(not_supported from c) from t
 -- !query schema
 struct<>
 -- !query output
-org.apache.spark.sql.catalyst.parser.ParseException
+org.apache.spark.sql.AnalysisException
+Literals of type 'not_supported' are currently not supported for the string 
type.;; line 1 pos 7
 
-Literals of type 'not_supported' are currently not supported.(line 1, pos 7)
 
-== SQL ==
-select extract(not_supported from c) from t
--------^^^
+-- !query
+select extract(not_supported from i) from t
+-- !query schema
+struct<>
+-- !query output
+org.apache.spark.sql.AnalysisException
+Literals of type 'not_supported' are currently not supported for the interval 
type.;; line 1 pos 7
diff --git 
a/sql/core/src/test/resources/sql-tests/results/postgreSQL/date.sql.out 
b/sql/core/src/test/resources/sql-tests/results/postgreSQL/date.sql.out
index ed27317..e5a7c43 100755
--- a/sql/core/src/test/resources/sql-tests/results/postgreSQL/date.sql.out
+++ b/sql/core/src/test/resources/sql-tests/results/postgreSQL/date.sql.out
@@ -590,7 +590,7 @@ struct<date_part('EPOCH', TIMESTAMP '1970-01-01 
00:00:00'):decimal(20,6)>
 -- !query
 SELECT EXTRACT(CENTURY FROM TO_DATE('0101-12-31 BC', 'yyyy-MM-dd G'))
 -- !query schema
-struct<date_part('CENTURY', TO_DATE('0101-12-31 BC', 'yyyy-MM-dd G')):int>
+struct<date_part('CENTURY', to_date('0101-12-31 BC', 'yyyy-MM-dd G')):int>
 -- !query output
 -2
 
@@ -598,7 +598,7 @@ struct<date_part('CENTURY', TO_DATE('0101-12-31 BC', 
'yyyy-MM-dd G')):int>
 -- !query
 SELECT EXTRACT(CENTURY FROM TO_DATE('0100-12-31 BC', 'yyyy-MM-dd G'))
 -- !query schema
-struct<date_part('CENTURY', TO_DATE('0100-12-31 BC', 'yyyy-MM-dd G')):int>
+struct<date_part('CENTURY', to_date('0100-12-31 BC', 'yyyy-MM-dd G')):int>
 -- !query output
 -1
 
@@ -606,7 +606,7 @@ struct<date_part('CENTURY', TO_DATE('0100-12-31 BC', 
'yyyy-MM-dd G')):int>
 -- !query
 SELECT EXTRACT(CENTURY FROM TO_DATE('0001-12-31 BC', 'yyyy-MM-dd G'))
 -- !query schema
-struct<date_part('CENTURY', TO_DATE('0001-12-31 BC', 'yyyy-MM-dd G')):int>
+struct<date_part('CENTURY', to_date('0001-12-31 BC', 'yyyy-MM-dd G')):int>
 -- !query output
 -1
 
@@ -670,7 +670,7 @@ true
 -- !query
 SELECT EXTRACT(MILLENNIUM FROM TO_DATE('0001-12-31 BC', 'yyyy-MM-dd G'))
 -- !query schema
-struct<date_part('MILLENNIUM', TO_DATE('0001-12-31 BC', 'yyyy-MM-dd G')):int>
+struct<date_part('MILLENNIUM', to_date('0001-12-31 BC', 'yyyy-MM-dd G')):int>
 -- !query output
 -1
 
@@ -750,7 +750,7 @@ struct<date_part('DECADE', DATE '0009-12-31'):int>
 -- !query
 SELECT EXTRACT(DECADE FROM TO_DATE('0001-01-01 BC', 'yyyy-MM-dd G'))
 -- !query schema
-struct<date_part('DECADE', TO_DATE('0001-01-01 BC', 'yyyy-MM-dd G')):int>
+struct<date_part('DECADE', to_date('0001-01-01 BC', 'yyyy-MM-dd G')):int>
 -- !query output
 0
 
@@ -758,7 +758,7 @@ struct<date_part('DECADE', TO_DATE('0001-01-01 BC', 
'yyyy-MM-dd G')):int>
 -- !query
 SELECT EXTRACT(DECADE FROM TO_DATE('0002-12-31 BC', 'yyyy-MM-dd G'))
 -- !query schema
-struct<date_part('DECADE', TO_DATE('0002-12-31 BC', 'yyyy-MM-dd G')):int>
+struct<date_part('DECADE', to_date('0002-12-31 BC', 'yyyy-MM-dd G')):int>
 -- !query output
 -1
 
@@ -766,7 +766,7 @@ struct<date_part('DECADE', TO_DATE('0002-12-31 BC', 
'yyyy-MM-dd G')):int>
 -- !query
 SELECT EXTRACT(DECADE FROM TO_DATE('0011-01-01 BC', 'yyyy-MM-dd G'))
 -- !query schema
-struct<date_part('DECADE', TO_DATE('0011-01-01 BC', 'yyyy-MM-dd G')):int>
+struct<date_part('DECADE', to_date('0011-01-01 BC', 'yyyy-MM-dd G')):int>
 -- !query output
 -1
 
@@ -774,7 +774,7 @@ struct<date_part('DECADE', TO_DATE('0011-01-01 BC', 
'yyyy-MM-dd G')):int>
 -- !query
 SELECT EXTRACT(DECADE FROM TO_DATE('0012-12-31 BC', 'yyyy-MM-dd G'))
 -- !query schema
-struct<date_part('DECADE', TO_DATE('0012-12-31 BC', 'yyyy-MM-dd G')):int>
+struct<date_part('DECADE', to_date('0012-12-31 BC', 'yyyy-MM-dd G')):int>
 -- !query output
 -2
 
diff --git 
a/sql/core/src/test/scala/org/apache/spark/sql/execution/benchmark/ExtractBenchmark.scala
 
b/sql/core/src/test/scala/org/apache/spark/sql/execution/benchmark/ExtractBenchmark.scala
index f1315d4..285211e 100644
--- 
a/sql/core/src/test/scala/org/apache/spark/sql/execution/benchmark/ExtractBenchmark.scala
+++ 
b/sql/core/src/test/scala/org/apache/spark/sql/execution/benchmark/ExtractBenchmark.scala
@@ -84,8 +84,6 @@ object ExtractBenchmark extends SqlBasedBenchmark {
     }
   }
 
-  private case class Settings(fields: Seq[String], func: Seq[String], iterNum: 
Long)
-
   override def runBenchmarkSuite(mainArgs: Array[String]): Unit = {
     val N = 10000000L
     val datetimeFields = Seq(
@@ -100,18 +98,16 @@ object ExtractBenchmark extends SqlBasedBenchmark {
       "HOUR", "MINUTE", "SECOND",
       "MILLISECONDS", "MICROSECONDS", "EPOCH")
     val settings = Map(
-      "timestamp" -> Settings(datetimeFields, Seq("extract", "date_part"), N),
-      "date" -> Settings(datetimeFields, Seq("extract", "date_part"), N),
-      "interval" -> Settings(intervalFields, Seq("date_part"), N))
+      "timestamp" -> datetimeFields,
+      "date" -> datetimeFields,
+      "interval" -> intervalFields)
 
-    for {
-      (dataType, Settings(fields, funcs, iterNum)) <- settings
-      func <- funcs} {
+    for {(dataType, fields) <- settings; func <- Seq("extract", "date_part")} {
 
       val benchmark = new Benchmark(s"Invoke $func for $dataType", N, output = 
output)
 
-      run(benchmark, iterNum, s"cast to $dataType", castExpr(dataType))
-      fields.foreach(run(benchmark, func, iterNum, _, dataType))
+      run(benchmark, N, s"cast to $dataType", castExpr(dataType))
+      fields.foreach(run(benchmark, func, N, _, dataType))
 
       benchmark.run()
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to