旧版 SQL 数据类型
本文档详细介绍了 BigQuery 的旧版 SQL 查询语法支持的数据类型。BigQuery 的首选查询语法是 GoogleSQL。如需了解 GoogleSQL 中的数据类型,请参阅 GoogleSQL 数据类型。
旧版 SQL 数据类型
您的数据可包含以下数据类型:
数据类型 | 可能的值 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
STRING | 长度可变的字符 (UTF-8) 数据。 | ||||||||||||
BYTES | 长度可变的二进制数据。
|
||||||||||||
INTEGER |
64 位有符号整数。 如果您使用 BigQuery API 加载 [-253+1, 253-1] 范围以外的整数(在大多数情况下,表示大于 9,007,199,254,740,991)到整数 (INT64) 列时,您必须将其作为字符串传递,以避免数据损坏。此问题是由 JSON/ECMAScript 中的整数大小限制引起的。如需了解详情,请参阅 RFC 7159 的“数字”部分。 |
||||||||||||
FLOAT | 双精度浮点格式。 | ||||||||||||
NUMERIC | 旧版 SQL 对 NUMERIC 提供有限支持。如需了解详情,请参阅旧版 SQL 中的精确数字。 | ||||||||||||
BIGNUMERIC | 旧版 SQL 对 BIGNUMERIC 提供有限支持。如需了解详情,请参阅旧版 SQL 中的精确数字。 | ||||||||||||
BOOLEAN |
|
||||||||||||
RECORD | 一个或多个其他字段的集合。 | ||||||||||||
TIMESTAMP |
您可以使用 UNIX 时间戳或日历日期时间来描述 TIMESTAMP 数据类型。BigQuery 在内部将 TIMESTAMP 数据存储为 UNIX 时间戳并精确到微妙。 UNIX 时间戳 正十进制数或负十进制数。正数表示从纪元 (1970 年 1 月 1 日 00:00:00 UTC) 开始所经过的秒数,负数表示纪元之前的秒数。最多保留 6 个小数位(精确到微秒)。 日期和时间字符串 日期和时间字符串采用如下格式: 您可以在日期和时间字符串中提供时区偏移,但 BigQuery 在将值转换为内部格式后不会保留此偏移。如果您需要保留原始时区数据,请将时区偏移单独存储在一列中。指定单数位时区偏移时,需要添加前导零。 使用 JSON 格式时,必须用引号将日期和时间字符串引起来。 示例 以下示例显示了使用 UNIX 时间戳格式与日期和时间字符串格式描述特定日期的等效方式。
|
||||||||||||
DATE | 旧版 SQL 对 DATE 提供有限支持。如需了解详情,请参阅旧版 SQL 中的民用时间。 | ||||||||||||
TIME | 旧版 SQL 对 TIME 提供有限支持。如需了解详情,请参阅旧版 SQL 中的民用时间。 | ||||||||||||
DATETIME | 旧版 SQL 对 DATETIME 提供有限支持。如需了解详情,请参阅旧版 SQL 中的民用时间。 |
旧版 SQL 中的精确数字
您可以读取非修改性子句(例如 SELECT list (with aliases)
、GROUP BY keys
和窗口函数中的传递字段等)中的 NUMERIC 或 BIGNUMERIC 值。但是,对 NUMERIC 或 BIGNUMERIC 值的任何计算(包括比较)都会产生不确定的结果。
旧版 SQL 支持以下类型转换和转换函数:
CAST(<numeric> AS STRING)
CAST(<bignumeric> AS STRING)
CAST(<string> AS NUMERIC)
CAST(<string> AS BIGNUMERIC)
旧版 SQL 中的民用时间
您可以读取民用时间数据类型(DATE、TIME 和 DATETIME),并使用非修改性运算符(例如 SELECT list (with aliases)
、GROUP BY keys
和窗口函数中的传递字段等)处理它们。但是,对民用时间值的任何其他计算(包括比较)都会产生不确定的结果。
旧版 SQL 支持以下类型转换和转换函数:
CAST(<date> AS STRING)
CAST(<time> AS STRING)
CAST(<datetime> AS STRING)
CAST(<string> AS DATE)
CAST(<string> AS TIME)
CAST(<string> AS DATETIME)
实际上,旧版 SQL 将民用时间值解释为整数,对代表民用时间值的整数执行的操作会产生意外结果。
如需使用民用时间数据类型计算值,请考虑采用 GoogleSQL,它支持 DATE、DATETIME 和 TIME 数据类型的所有 SQL 操作。
后续步骤
- 如需使用 API 设置字段的数据类型,请参阅
schema.fields.type
。 - 如需了解 GoogleSQL 数据类型,请参阅数据类型。