BIGINT

最近更新时间:2026-05-06 16:28:12

我的收藏
BIGINT 是一种 8 字节整数数据类型,用于 CREATE TABLEALTER TABLE 语句。

语法

CREATE TABLE 语句的列定义中:
column_name BIGINT

范围

取值范围:-9,223,372,036,854,775,8089,223,372,036,854,775,807
注意:TCHouse-X 不支持无符号(UNSIGNED)子类型。

数据转换

隐式转换

TCHouse-X 会自动将 BIGINT 转换为浮点类型(FLOATDOUBLE)。

显式转换

转换为 TINYINTSMALLINTINTSTRINGTIMESTAMP 必须使用 CAST()
TIMESTAMP/TIMESTAMPTZ 转换规则:将整数值 N 转换为 TIMESTAMP/TIMESTAMPTZ时,系统会生成一个以 Unix 纪元(1970-01-01 00:00:00 UTC)为基准、增加 N 秒后的时间戳。在查询展示时,该值会自动转换为当前系统时区对应的本地时间。
TIMESTAMPNTZ 转换规则:将整数值 N 转换为 TIMESTAMPNTZ时,系统会生成一个以 Unix 纪元(1970-01-01 00:00:00 UTC)为基准、增加 N 秒后的时间戳。

使用说明与建议

选型权衡:BIGINT 在声明列时非常方便,因为它可以容纳任何整数值,且在 INSERT 时会自动进行类型提升。然而,它是占用空间最大的整数类型(磁盘和内存均占 8 字节)。过度使用会导致查询效率下降,扩展性变差。
最佳实践:优先使用能容纳输入值的最小整数类型。仅在必要时使用 CAST() 转换为大类型。
溢出处理:如果数值超过了 BIGINT 的范围,请使用具有足够精度的 DECIMAL 类型。
NULL 处理:将任何非数字值强制转换为此类型将产生 NULL。
分区 (Partitioning):优先使用此类型作为分区键列。相比字符串形式,Impala 处理数值类型的效率更高。

示例

-- 创建包含 BIGINT 的表
CREATE TABLE t1 (x BIGINT);

-- 显式转换示例
SELECT CAST(1000 AS BIGINT);