我最近按照 Google 指南的建议实施了计划快照。
初始运行顺利且良好,但是进一步执行失败并出现以下错误消息:
访问被拒绝:表 PROJECT:BACKUP.TABLE_20230315:表 PROJECT:BACKUP.TABLE_20230315 上的权限 bigquery.tables.deleteSnapshot 被拒绝(或者它可能不存在)。在[1:1]; JobID:000000000:scheduled_query_000000000000-000-etc
我用谷歌搜索了错误消息,因为应该设置适当的权限,但没有成功。
正如错误消息所示,该表显然还不存在,因为计划应该创建它(这就是计划的用途,对吧?)。
我必须承认,我以前从未使用过快照,所以如果问题太小众,我深表歉意。
基本上我遵循了指南,这似乎表明这种方法是正确的。
据我所知,我巧妙地实施了它,唯一的变化是我使用了欧盟位置而不是美国,并将时间表更改为“每 24 小时”而不是“每月 1 日 05:00”
简单回顾一下: 我为整个项目创建了一个对我的备份数据集和 BigQuery 用户具有数据编辑权限的服务帐户。
然后我使用了指南中描述的命令行命令:
bq query --use_legacy_sql=false --display_name="Daily snapshots of the TABLE table" \
--location="EU" --schedule="every 24 hours" \
--project_id=PROJECT \
'DECLARE snapshot_name STRING;
DECLARE expiration TIMESTAMP;
DECLARE query STRING;
SET expiration = DATE_ADD(@run_time, INTERVAL 40 DAY);
SET snapshot_name = CONCAT("BACKUP.TABLE_",
FORMAT_DATETIME("%Y%m%d", @run_date));
SET query = CONCAT("CREATE SNAPSHOT TABLE ", snapshot_name,
" CLONE PROJECT.DATASET.TABLE OPTIONS(expiration_timestamp=TIMESTAMP \"",
expiration, "\");");
EXECUTE IMMEDIATE query;'
并按照指南中的描述部署查询:
bq update --transfer_config --update_credentials \
--service_account_name=snapshot-bot@PROJECT.iam.gserviceaccount.com \
projects/12345/locations/eu/myConfig/12345
我希望查询在初始运行后继续运行,因为这是我在安排它时看到的点。
我必须承认,我仍然不明白为什么它不能使用文档中描述的方法。我只能说,一旦我编写了查询并通过控制台安排了它就起作用了......
SQL 查询看起来像这样:
DECLARE snapshot_name STRING;
DECLARE query STRING;
SET snapshot_name = CONCAT("BACKUP.TABLE_",
FORMAT_DATETIME("%Y%m%d", @run_date));
SET query = CONCAT("CREATE SNAPSHOT TABLE ", snapshot_name,
" CLONE PROJECT-ID.DATA-SET.TABLE;");
EXECUTE IMMEDIATE query;
原因是您无法进行计划查询,因为您必须设置目标表。 显然,您从 BigQuery 收到这样的通知:“configuration.query.destinationTable 无法为脚本设置”在此处输入图像描述