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 SQL 或 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