Google BigQuery已有数据的表是否存储行级插入/修改时间戳?
BigQuery行级插入/修改时间戳获取方案
BigQuery默认不会自动存储行级的插入或修改时间戳,需根据表类型和使用场景针对性处理:
1. 已填充数据的常规表
针对已有数据的表,需手动添加时间戳字段并维护:
- 添加插入时间戳字段:
ALTER TABLE `your-project.your-dataset.your-table` ADD COLUMN insert_timestamp TIMESTAMP; - 补全现有行的时间戳(按需操作):可使用表的最后修改时间作为近似值,或根据数据加载记录指定:
UPDATE `your-project.your-dataset.your-table` SET insert_timestamp = TIMESTAMP('2024-01-01 00:00:00') -- 替换为实际合适的时间 WHERE insert_timestamp IS NULL; - 后续插入新数据时显式赋值:
INSERT INTO `your-project.your-dataset.your-table` (col1, col2, insert_timestamp) VALUES ('val1', 'val2', CURRENT_TIMESTAMP()); - 若需跟踪修改时间,可新增
update_timestamp字段,更新行时同步更新该字段:ALTER TABLE `your-project.your-dataset.your-table` ADD COLUMN update_timestamp TIMESTAMP; -- 更新行时同步修改时间 UPDATE `your-project.your-dataset.your-table` SET col1 = 'new-val', update_timestamp = CURRENT_TIMESTAMP() WHERE id = 123;
2. 流式插入的表
如果表通过流式插入(Streaming Inserts)写入数据,系统会自动为每行生成隐藏的__INSERTION_TIME字段(TIMESTAMP类型),可直接在查询中引用:
SELECT *, __INSERTION_TIME AS insert_time FROM `your-project.your-dataset.your-table`;
注意:该字段仅对流式插入的行有效,批量加载或手动插入的行无此值。
3. 时间分区表
若表为时间分区表(按DATE或TIMESTAMP字段分区),分区字段可作为插入时间的近似参考,但不会随行的修改自动更新。也可通过INFORMATION_SCHEMA查询分区级元数据(非行级):
SELECT partition_id, creation_time FROM `your-project.your-dataset.INFORMATION_SCHEMA.PARTITIONS` WHERE table_name = 'your-table';
4. 表级元数据(非行级)
BigQuery提供表级元数据(如创建时间、最后修改时间),可通过INFORMATION_SCHEMA查询,但无法定位到具体行:
SELECT CREATE_TIME, LAST_MODIFIED_TIME FROM `your-project.your-dataset.INFORMATION_SCHEMA.TABLES` WHERE table_name = 'your-table';
内容的提问来源于stack exchange,提问作者Zuffido
相关产品推荐
相关产品推荐

