我试图从Bigquery表中删除数据,并面临挑战。目前,每次只有一个日期分区表被删除/删除。基于对google的一些研究和文档,我知道我需要使用DML操作。
下面是我用来删除的命令,但它不起作用
1.从bigquery-project.dataset1.table1_*
删除
2.液滴表bigquery-project.dataset1.table1_*
;
3.从bigquery-project.dataset1.table1_*
中删除where _table_PO后缀=‘20211117’;
第三个查询对我有效,它只删除该特定日期。
对于1和2查询,我有一个例外,它说是“元表上的非法操作(写)”
如何一次删除300多个日期分区表?
提前谢谢。
发布于 2021-11-19 11:52:25
您可以选择创建存储过程的路线,以便在此场景中生成语句。
CREATE OR REPLACE PROCEDURE so_test.so_delete_table()
BEGIN
DECLARE fqtn STRING;
FOR record IN
(
select concat(table_catalog,".",table_schema,".",table_name) as tn
from so_test.INFORMATION_SCHEMA.TABLES
where table_name like 'test_delete_%'
)
DO
SET fqtn=record.tn;
-- EXECUTE IMMEDIATE format('TRUNCATE TABLE %s',fqtn);
EXECUTE IMMEDIATE format('DROP TABLE %s',fqtn);
END FOR;
END
call so_test.so_delete_table();
在上面的查询中,我将查询要从其中删除记录的表,然后将其传递给适当的语句。在您的场景中,我无法判断您是否想要删除记录或整个表,因此根据场景的不同,我为这两种情况都包含了逻辑。
这也可以修改为接受一个表前缀,并将它简单地传递给for循环where子句。
或者,您只需在for循环中执行select语句,将结果复制到工作表中,并构造适当的DML语句,将其复制回控制台并执行。
https://stackoverflow.com/questions/70032938
复制相似问题