New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[SPARK-32272][SQL] Add SQL standard command SET TIME ZONE #29064
Changes from 11 commits
7910c9a
13056b5
225695f
3a62ecc
ef1f3ed
95a756a
c95fa7d
5501213
b3ac6f4
e5aa3b3
11f0fed
a4c60f3
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
--- | ||
layout: global | ||
title: SET TIME ZONE | ||
displayTitle: SET TIME ZONE | ||
license: | | ||
Licensed to the Apache Software Foundation (ASF) under one or more | ||
contributor license agreements. See the NOTICE file distributed with | ||
this work for additional information regarding copyright ownership. | ||
The ASF licenses this file to You under the Apache License, Version 2.0 | ||
(the "License"); you may not use this file except in compliance with | ||
the License. You may obtain a copy of the License at | ||
|
||
http://www.apache.org/licenses/LICENSE-2.0 | ||
|
||
Unless required by applicable law or agreed to in writing, software | ||
distributed under the License is distributed on an "AS IS" BASIS, | ||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
See the License for the specific language governing permissions and | ||
limitations under the License. | ||
--- | ||
|
||
### Description | ||
|
||
The SET TIME ZONE command sets the time zone of the current session. | ||
|
||
### Syntax | ||
|
||
```sql | ||
SET TIME ZONE LOCAL | ||
SET TIME ZONE 'timezone_value' | ||
SET TIME ZONE INTERVAL interval_literal | ||
``` | ||
|
||
### Parameters | ||
|
||
* **LOCAL** | ||
|
||
Set the time zone to the one specified in the java `user.timezone` property or environment variable `TZ`, or to the system time zone if they are undefined. | ||
|
||
* **timezone_value** | ||
|
||
The ID of session local timezone in the format of either region-based zone IDs or zone offsets. Region IDs must have the form 'area/city', such as 'America/Los_Angeles'. Zone offsets must be in the format '`(+|-)HH`', '`(+|-)HH:mm`' or '`(+|-)HH:mm:ss`', e.g '-08', '+01:00' or '-13:33:33'. Also, 'UTC' and 'Z' are supported as aliases of '+00:00'. Other short names are not recommended to use because they can be ambiguous. | ||
|
||
* **interval_literal** | ||
|
||
The [interval literal](sql-ref-literals.html#interval-literal) represents the difference between the session time zone to the 'UTC'. It must be in the range of [-18, 18] hours and max to second precision, e.g. `INTERVAL 2 HOURS 30 MINITUES` or `INTERVAL '15:40:32' HOUR TO SECOND`. | ||
|
||
### Examples | ||
|
||
```sql | ||
-- Set time zone to the system default. | ||
SET TIME ZONE LOCAL; | ||
|
||
-- Set time zone to the region-based zone ID. | ||
SET TIME ZONE 'America/Los_Angeles'; | ||
|
||
-- Set time zone to the Zone offset. | ||
SET TIME ZONE '+08:00'; | ||
|
||
-- Set time zone with intervals. | ||
SET TIME ZONE INTERVAL 1 HOUR 30 MINUTES; | ||
SET TIME ZONE INTERVAL '08:30:00' HOUR TO SECOND; | ||
``` | ||
|
||
cloud-fan marked this conversation as resolved.
Show resolved
Hide resolved
|
||
### Related Statements | ||
|
||
* [SET](sql-ref-syntax-aux-conf-mgmt-set.html) |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -240,6 +240,9 @@ statement | |
| MSCK REPAIR TABLE multipartIdentifier #repairTable | ||
| op=(ADD | LIST) identifier (STRING | .*?) #manageResource | ||
| SET ROLE .*? #failNativeCommand | ||
| SET TIME ZONE interval #setTimeZone | ||
| SET TIME ZONE timezone=(STRING | LOCAL) #setTimeZone | ||
| SET TIME ZONE .*? #setTimeZone | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. so we add this only for better parser message? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. this is used to fail invalid set time zone syntax explicitly, cuz' now we support spark-sql (default)> set time zone abcd;
key value
time zone abcd <undefined> There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It sounds like none of the systems are following ANSI SQL syntax completely. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We are close to the DB2 syntax, except that we support interval and |
||
| SET .*? #setConfiguration | ||
| RESET #resetConfiguration | ||
| unsupportedHiveNativeCommands .*? #failNativeCommand | ||
|
@@ -1190,6 +1193,7 @@ ansiNonReserved | |
| VIEW | ||
| VIEWS | ||
| WINDOW | ||
| ZONE | ||
//--ANSI-NON-RESERVED-END | ||
; | ||
|
||
|
@@ -1431,6 +1435,7 @@ nonReserved | |
| TEMPORARY | ||
| TERMINATED | ||
| THEN | ||
| TIME | ||
| TO | ||
| TOUCH | ||
| TRAILING | ||
|
@@ -1459,6 +1464,7 @@ nonReserved | |
| WINDOW | ||
| WITH | ||
| YEAR | ||
| ZONE | ||
; | ||
|
||
// NOTE: If you add a new token in the list below, you should update the list of keywords | ||
|
@@ -1691,6 +1697,7 @@ TBLPROPERTIES: 'TBLPROPERTIES'; | |
TEMPORARY: 'TEMPORARY' | 'TEMP'; | ||
TERMINATED: 'TERMINATED'; | ||
THEN: 'THEN'; | ||
TIME: 'TIME'; | ||
TO: 'TO'; | ||
TOUCH: 'TOUCH'; | ||
TRAILING: 'TRAILING'; | ||
|
@@ -1721,6 +1728,7 @@ WHERE: 'WHERE'; | |
WINDOW: 'WINDOW'; | ||
WITH: 'WITH'; | ||
YEAR: 'YEAR'; | ||
ZONE: 'ZONE'; | ||
//--SPARK-KEYWORD-LIST-END | ||
//============================ | ||
// End of the keywords list | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
-- valid time zones | ||
SET TIME ZONE 'Asia/Hong_Kong'; | ||
SET TIME ZONE 'GMT+1'; | ||
SET TIME ZONE INTERVAL 10 HOURS; | ||
SET TIME ZONE INTERVAL '15:40:32' HOUR TO SECOND; | ||
SET TIME ZONE LOCAL; | ||
|
||
-- invalid time zone | ||
SET TIME ZONE; | ||
SET TIME ZONE 'invalid/zone'; | ||
SET TIME ZONE INTERVAL 3 DAYS; | ||
SET TIME ZONE INTERVAL 24 HOURS; | ||
SET TIME ZONE INTERVAL '19:40:32' HOUR TO SECOND; | ||
SET TIME ZONE INTERVAL 10 HOURS 'GMT+1'; | ||
SET TIME ZONE INTERVAL 10 HOURS 1 MILLISECOND; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can we clarify what happens if both the java
user.timezone
property or environment variableTZ
are specified?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How about