Chr*_*rge 7 sql google-bigquery
我正在安排一个每天运行的查询,该查询从自动写入 Google BigQuery 的表中获取数据。通常该表就在那里,但我想在根据该表执行查询之前确定一下。
我也在研究其他方法,但最简单的方法似乎是仅使用 SQL 并将检查和重试集成到计划查询中。我可以检查该表是否存在,如果不存在则重试。我似乎无法找到一种方法来不立即执行此操作并让查询在下次重试之前等待 30 分钟。有没有可用的东西,可能类似于“WAITFOR”,可以实现这一目标?
当前的 SQL;
DECLARE retry_count INT64;
DECLARE success BOOL;
DECLARE size_bytes INT64;
DECLARE row_count INT64;
SET retry_count = 1;
SET success = FALSE;
WHILE retry_count <= 3 AND success = FALSE DO
BEGIN
SET row_count = (SELECT row_count FROM [DATASET].__TABLES__ WHERE table_id='[TABLE]');
IF row_count > 0 THEN
SELECT 'Table Exists!' as message, retry_count as retries;
SET success = TRUE;
ELSE
SELECT 'Table does not exist' as message, retry_count as retries, row_count;
SET retry_count = retry_count + 1;
-- WAITFOR DELAY '00:30:00';
END IF;
END;
END WHILE;
Run Code Online (Sandbox Code Playgroud)
小智 9
我希望您找到增加时间延迟的方法。我最近也遇到过这样的情况,我是这样处理的——
DECLARE retry_count INT64;
DECLARE success BOOL;
DECLARE size_bytes INT64;
DECLARE row_count INT64;
DECLARE DELAY_TIME DATETIME;
DECLARE WAIT STRING;
SET retry_count = 1;
SET success = FALSE;
WHILE retry_count <= 3 AND success = FALSE DO
BEGIN
SET row_count = (SELECT row_count FROM [DATASET].__TABLES__ WHERE table_id='[TABLE]');
IF row_count > 0 THEN
SELECT 'Table Exists!' as message, retry_count as retries;
SET success = TRUE;
ELSE
SELECT 'Table does not exist' as message, retry_count as retries, row_count;
SET retry_count = retry_count + 1;
-- WAITFOR DELAY '00:30:00';
SET WAIT = 'TRUE';
SET DELAY_TIME = DATETIME_ADD(CURRENT_DATETIME,INTERVAL 30 MINUTE);
WHILE WAIT = 'TRUE' DO
IF (DELAY_TIME < CURRENT_DATETIME) THEN
SET WAIT = 'FALSE';
END IF;
END WHILE;
END IF;
END;
END WHILE;
Run Code Online (Sandbox Code Playgroud)
谢谢,阿努沙