含flexible columns(列名带空格)的已删BigQuery表恢复报错求助
解决BigQuery带空格列的Flexible表时间点恢复问题
问题原因
BigQuery的bq cp命令不支持对包含带空格/特殊字符的flexible列的表快照执行复制操作,这是快照元数据处理的限制导致的。
可行解决方案:用CTAS语句恢复
通过CREATE TABLE AS SELECT (CTAS)语句,直接从指定时间点的快照查询并创建新表,绕过复制限制。
终端执行命令
bq query --use_legacy_sql=false " CREATE TABLE `你的项目ID.目标数据集.recovered_mytable` AS SELECT * FROM `你的项目ID.源数据集.mytable` FOR SYSTEM_TIME AS OF TIMESTAMP_MILLIS(1690351200000) "
关键说明
- 替换命令中的
你的项目ID、目标数据集、源数据集为实际信息;1690351200000是你要恢复的快照毫秒级时间戳,和原bq cp命令中的时间戳一致。 - 如果需要单独指定列(而非
SELECT *),带空格的列名必须用反引号包裹,例如:SELECT `Column WithSpaces Name`, other_column FROM ... --use_legacy_sql=false必须添加,因为FOR SYSTEM_TIME AS OF是BigQuery标准SQL的特性,旧版SQL不支持。
注意事项
- 确保执行命令的账号拥有源表快照的读取权限,以及目标数据集的表创建权限。
- 若时间戳记不清,可通过BigQuery控制台的表历史记录找到对应的恢复时间点,直接替换成
TIMESTAMP('YYYY-MM-DD HH:MM:SS')格式的字符串,更易验证。
内容的提问来源于stack exchange,提问作者JD ML
相关产品推荐
相关产品推荐

