如何查询名称只能由其他查询获得的表



假设我们在BigQuery中有一个糟糕的设计,它本不应该以这种方式创建,如下所示:some_project包含数据集metadata,该数据集包含表metadatasome_project.metadata.metadata:的样本数据

| dataset_id |
| xyz1234567 |
| zzz8562042 |
| vyz0009091 |

对于每个dataset_id,我需要查询该数据集中的some_table,例如some_project.xyz1234567.some_table

是否可以在一个查询中查询这些多个表?我想得到每个表的汇总结果。换句话说,我想说的是:

SELECT SUM(table.x) from table WHERE table IN
(SELECT CONCAT('some_project.', dataset_id, 'some_table') FROM `some_project.metadata.metadata`)

SELECT SUM(table.x) FROM
(SELECT CONCAT('some_project.', dataset_id, 'some_table' as table FROM `some_project.metadata.metadata`)

我知道任何人都不应该做这样的事情,但我上面描述的设计是我必须要做的。

您可以考虑在BigQuery循环语句的帮助下使用临时表作为SQL游标的替代方法。

您可以逐行读取并执行每个表名的查询。

在这里你可以看到这个例子:

DECLARE var1 INT64 DEFAULT 1;
DECLARE var2 INT64 DEFAULT 0;
DECLARE str1 string DEFAULT '';
DECLARE str2 string DEFAULT '';
DECLARE str3 string DEFAULT '';
CREATE TEMP TABLE temp_emp AS
SELECT empid, 
ename, 
deptid,
RANK() OVER(ORDER BY empid) rownum
FROM   td.emp1; 

SET var2= (SELECT COUNT(*) FROM temp_emp);
WHILE var2<=var1 DO
SET str1 = (SELECT empid FROM temp_emp WHERE rownum = x);
SET str2 = (SELECT empid FROM temp_emp WHERE rownum = x);
SET str3 = (SELECT empid FROM temp_emp WHERE rownum = x);
SET var1=var1+1;
END WHILE;

以下是需要注意的几点。

  • 我们使用SET命令为变量赋值。是的选择。。INTO
  • 我们没有使用打开和关闭光标
  • 我们正在创建一个TEMPORARY表来代替游标声明

您可以在此链接中查看更多文档。

试试这个

declare sql string;
set sql = (
select concat("Select something from 
someproject.",datasetid,".sometable"
) from metadata.metadata);
execute immediate sql

执行立即

相关内容

  • 没有找到相关文章