【问题标题】:BigQuery - Deleting rows from multiple tablesBigQuery - 从多个表中删除行
【发布时间】:2021-11-29 05:50:59
【问题描述】:

尝试在单个查询中从多个表中删除行。 尝试类似下面的东西

DELETE from dataset1.tbl1,dataset2.tbl2 where col ='condition'

上述查询无效。有什么办法可以做到这一点?

【问题讨论】:

  • 每次删除通常需要单独的查询。您必须在此处使用动态 SQL。
  • 创建不同的查询或脚本来做到这一点。
  • 您需要在单个脚本中用分号分隔单独的查询。

标签: google-cloud-platform google-bigquery


【解决方案1】:

一种方法是在 bigquery 上使用带有临时函数和表的脚本语句。这是一个关于它如何工作的示例:

/* set working variables */
DECLARE id INT64;
DECLARE counter INT64 DEFAULT 1;
DECLARE query STRING;

/* build a function for your dynamic query build */
CREATE TEMP FUNCTION DeleteColFromTable(table_name STRING, col_name STRING, val_col_name STRING) 
AS (format("DELETE FROM `%s` WHERE %s = %s; ", table_name,col_name,val_col_name));

/* build your temp table with the tables and conditions to match and delete */
CREATE TEMP TABLE vals_to_delete AS (
    select ROW_NUMBER() over() as id_query,query from
    (select DeleteColFromTable('my-project-id.my-data-set.Authors','Author','Henry II') as query
     union all
     select DeleteColFromTable('my-project-id.my-data-set.Books','Author','Henry II') as query
    )
    /*add as many queries as you want to delete*/
);

/*perform operation*/
set id= (Select MAX(id_query) FROM vals_to_delete);

while counter<=id do
    set query = (select query from vals_to_delete where id_query = counter);
    execute immediate (query);
    set counter = counter+1;
end while

这里有一些关于这个案例的有用链接:

【讨论】:

    猜你喜欢
    • 2017-07-22
    • 2016-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多