TIMESTAMP_NTZ
类型
适用于: Databricks SQL Databricks Runtime 13.3 LTS 及更高版本
表示由年、月、日、小时、分钟和秒字段值组成的值。 所有操作在不考虑任何时区的情况下执行。
此功能目前以公共预览版提供。 有关不支持的功能,请参阅注释部分。
若要在 Delta Lake 上使用此功能,必须为表启用支持。 创建包含 TIMESTAMP_NTZ
类型的列的新 Delta 表时,将自动启用功能支持。 将 TIMESTAMP_NTZ
类型的列添加到现有表时,不会自动启用功能支持。 若要为 TIMESTAMP_NTZ
列启用支持,必须为现有表显式启用对该功能的支持。
启用支持会升级表协议。 请参阅 Azure Databricks 如何管理 Delta Lake 功能兼容性?。 以下命令启用此功能:
ALTER TABLE table_name SET TBLPROPERTIES ('delta.feature.timestampNtz' = 'supported')
语法
TIMESTAMP_NTZ
限制
受支持的时间戳范围是 -290308-12-21 BCE 19:59:06
至 +294247-01-10 CE 04:00:54
。
文本
TIMESTAMP_NTZ timestampString
timestampString
{ '[+|-]yyyy[...]' |
'[+|-]yyyy[...]-[m]m' |
'[+|-]yyyy[...]-[m]m-[d]d' |
'[+|-]yyyy[...]-[m]m-[d]d ' |
'[+|-]yyyy[...]-[m]m-[d]d[T][h]h[:]' |
'[+|-]yyyy[..]-[m]m-[d]d[T][h]h:[m]m[:]' |
'[+|-]yyyy[...]-[m]m-[d]d[T][h]h:[m]m:[s]s[.]' |
'[+|-]yyyy[...]-[m]m-[d]d[T][h]h:[m]m:[s]s.[ms][ms][ms][us][us][us]' }
+
或-
:可选的符号。-
指示 BCE,+
指示 CE(默认)。yyyy
:一个至少包含四位数字的年份。[m]m
:介于 01 和 12 之间的一位数或两位数的月份。[d]d
:介于 01 和 31 之间的一位数或两位数的日期。h[h]
:介于 00 和 23 之间的一位数或两位数的小时。m[m]
:介于 00 和 59 之间的一位数或两位数的分钟。s[s]
:介于 00 和 59 之间的一位数或两位数的秒。[ms][ms][ms][us][us][us]
:秒最多 6 位小数。
如果未指定月份或日期部分,则默认为 1。 如果未指定小时、分钟或秒部分,则默认为 0。
如果文本不表示正确的时间戳,Azure Databricks 将引发错误。
备注
TIMESTAMP_NTZ
具有以下限制:
- Photon 支持需要 Databricks Runtime 15.4 及更高版本。
- 在 Power BI、Tableau、Databricks JDBC/ODBC 驱动程序或 Databricks 开放源代码驱动程序中使用的 Databricks 数据源中不受支持。
- 在 Databricks Runtime 14.0 及更低版本中的 Delta Sharing 中不受支持。
- 支持在文件源(包括 Delta/Parquet/ORC/AVRO/JSON/CSV)中使用
TIMESTAMP_NTZ
类型。 但是,包含 TIMESTAMP_NTZ 列的 JSON/CSV 文件的架构推理存在限制。 为了后向兼容,从spark.read.csv(...)
或spark.read.json(...)
推理的默认时间戳类型为 TIMESTAMP 类型而不是 TIMESTAMP_NTZ。
示例
> SELECT TIMESTAMP_NTZ'0000';
0000-01-01 00:00:00
> SELECT TIMESTAMP_NTZ'2020-12-31';
2020-12-31 00:00:00
> SELECT TIMESTAMP_NTZ'2021-7-1T8:43:28.123456';
2021-07-01 08:43:28.123456
> SELECT current_timezone(), CAST(TIMESTAMP '2021-7-1T8:43:28' as TIMESTAMP_NTZ);
America/Los_Angeles 2021-07-01 08:43:28
> SELECT CAST('1908-03-15 10:1:17' AS TIMESTAMP_NTZ)
1908-03-15 10:01:17
> SELECT TIMESTAMP_NTZ'+10000';
+10000-01-01 00:00:00