BigQuery 存储过程,用于捕获表名以及该表名的记录数

     2023-03-24     13

关键词:

【中文标题】BigQuery 存储过程,用于捕获表名以及该表名的记录数【英文标题】:BigQuery stored procedure to capture table name along with number of records for that table name 【发布时间】:2020-11-03 18:32:43 【问题描述】:

我在 BigQuery 中创建了以下存储过程,以获取表名列表以及每个表名的计数。我遇到了 2 个我无法解决的问题。

#1 - 如何在我的“立即执行”Sql 语句中为每个表执行计数?

#2 - 我的数组结果“tbl_lst_array”包含超过 800 个表,但存储过程(执行时)只返回 100 行。是因为 Google 强加了以下配额吗? https://cloud.google.com/bigquery/quotas

我通过循环一次处理一张表。

感谢您的帮助。


create procedure SP_MERGE.SP_bq_table_counts()

BEGIN
   DECLARE tbl_lst_array ARRAY<STRING>;
   DECLARE i INT64 DEFAULT 1;
   CREATE TEMP TABLE tbl_results(field STRING);  
   
   SET tbl_lst_array = (SELECT ARRAY_AGG(table_schema||'.'||table_name) FROM `tng-edw-data-dev`.EDW.INFORMATION_SCHEMA.TABLES);   
   
   WHILE (i < ARRAY_LENGTH(tbl_lst_array)) DO
   
      EXECUTE IMMEDIATE '''
        INSERT tbl_results
            SELECT "''' || tbl_lst_array[ORDINAL(i)] || '''"
        ''';
     
        # Increment counter
        SET i = i + 1;
     
   END WHILE;   

   select * from tbl_results;
   
END;

【问题讨论】:

【参考方案1】:

你的观点是正确的。不要为每次迭代执行 1 个插入作业,而是确保您收集/连接它们并在循环结束时执行 1 个包含所有行的单个插入作业。这样可以避免并发作业限制。

【讨论】:

用于获取表名、视图和存储过程的 SQL 语句,按模式排序

】用于获取表名、视图和存储过程的SQL语句,按模式排序【英文标题】:SQLstatementtograbtablenames,views,andstoredprocs,orderbyschema【发布时间】:2010-03-2514:10:29【问题描述】:是否有一条SQL语句将列出MSSQLServer数据库中所有表、视图和存... 查看详情

SQL Server:使用动态表名插入存储过程

】SQLServer:使用动态表名插入存储过程【英文标题】:SQLServer:insertstoredprocedurewithdynamictablename【发布时间】:2017-01-2600:35:50【问题描述】:我正在尝试创建一个用于插入新数据的存储过程。基本上我收到关于“声明表变量@tablenam... 查看详情

在sql存储过程中传递表名

】在sql存储过程中传递表名【英文标题】:Passingtablenameinsqlstoredprocedure【发布时间】:2012-05-2409:13:28【问题描述】:是否可以将表名作为输入参数传递给存储过程?例如:createproceduretest@tablenamechar(10)asbeginselect*from@tablenameendgo我... 查看详情

如何在存储过程中动态传递表名 - ORACLE [重复]

】如何在存储过程中动态传递表名-ORACLE[重复]【英文标题】:Howtopasstablenamedynamicallyinstoredprocedure-ORACLE[duplicate]【发布时间】:2019-12-2418:04:52【问题描述】:我想创建一个存储过程,它接受表名作为参数并在过程中动态传递它。... 查看详情

存储过程中数据集的表名

】存储过程中数据集的表名【英文标题】:DataSet\'sTablenamefromaStoredProcedure【发布时间】:2009-04-2921:53:04【问题描述】:我正在使用存储过程来填充数据集。我需要做的是强制填充时创建的DataTable的名称。存储过程返回了多个表。... 查看详情

存储过程的 PL/SQL 动态表名

】存储过程的PL/SQL动态表名【英文标题】:PL/SQLdynamictablenameforstoredprocedure【发布时间】:2015-01-1312:14:43【问题描述】:我已经开始学习PLSQL存储过程,我有2个有趣的问题要问。在下面的示例中,我executeemployer_details如果找到,它... 查看详情

如何从临时表名中选择,传递给存储过程?

】如何从临时表名中选择,传递给存储过程?【英文标题】:HowtoSELECTfromatemptablename,passedtoastoredprocedure?【发布时间】:2019-07-2506:23:25【问题描述】:我将临时表name?作为存储过程的输出,并将创建的临时表的name作为输入参数传... 查看详情

表名上的特殊字符 Bigquery

】表名上的特殊字符Bigquery【英文标题】:SpecialcharactersontablenamesBigquery【发布时间】:2021-07-2714:47:32【问题描述】:有谁知道如何在表名中包含特殊字符(如$),或者如果表已经存在且名称中带有$,那么如何在bigquery中提取它... 查看详情

使用存储过程中的表名填充数据集

】使用存储过程中的表名填充数据集【英文标题】:PopulateDatasetWithTableNamesFromStoredProcedure【发布时间】:2012-02-1409:24:02【问题描述】:我有一个返回多个表的存储过程。它正确填充了我的数据集,但它命名了我的表[Table,Table1,Tabl... 查看详情

BigQuery:按表名分组

】BigQuery:按表名分组【英文标题】:BigQuery:Groupbytablename【发布时间】:2014-02-1914:40:14【问题描述】:我的数据集(ds1)如下所示:2014_01_01_tableA2014_01_01_tableB2014_01_02_tableA2014_01_02_tableB查询:SELECTdate,COUNT(1)AScounterFROM[ds1.2014_01_01_table... 查看详情

如何在存储过程中使用动态表名编写 Select 查询?

】如何在存储过程中使用动态表名编写Select查询?【英文标题】:HowtowriteSelectquerywithdynamictablenameinStoredProcedure?【发布时间】:2016-10-2507:10:16【问题描述】:我正在编写一个存储过程。但是在这个过程中表名是动态的。我想从我... 查看详情

我应该如何将表名传递到存储过程中?

】我应该如何将表名传递到存储过程中?【英文标题】:HowshouldIpassatablenameintoastoredproc?【发布时间】:2009-08-0720:09:37【问题描述】:我刚刚遇到了一件奇怪的事情......我们网站上的一些代码正在使用一个巨大的SQL语句,通过基... 查看详情

存储过程

  T-SQL的存储过程比较容易的创建修改和删除,只需在T-SQL语句上加一层壳:创建:createprocedure+存储过程名(proc+数据库名by表名+(select、update、delete和insert)/p_表名+(select、update、delete和insert)),修改:alterprocedure+存储过程... 查看详情

如何根据列名查找表名,然后访问该表

】如何根据列名查找表名,然后访问该表【英文标题】:Howtofindthenameofatablebaseduponacolumnnameandthenaccesssaidtable【发布时间】:2014-12-2303:51:16【问题描述】:我有一个列名“CustomerIDClass”,我需要在整个Oracle数据库中找到与其关联的... 查看详情

在oracle中执行alter存储过程时出现无效表名错误

】在oracle中执行alter存储过程时出现无效表名错误【英文标题】:Invalidtablenameerror,whenexecutealterstoredprocedureinoracle【发布时间】:2017-11-1411:34:37【问题描述】:--Disableconstaint,goodCREATEORREPLACEPROCEDUREcpl_disable_constraint(table_nameINvarchar2, 查看详情

使用 MySql 8.0.17 上的存储过程在数据库上查找表名

】使用MySql8.0.17上的存储过程在数据库上查找表名【英文标题】:FindtablenameonthedatabaseusingstoredprocedureonMySql8.0.17【发布时间】:2021-03-0815:18:14【问题描述】:这是存储在数据库中的表的列表名称MySqlversion8.0.17+------------------+|listTabl... 查看详情

在 SQL Server 存储过程中查找表名的列名作为保留关键字

】在SQLServer存储过程中查找表名的列名作为保留关键字【英文标题】:FindColumnNamesorTableNamesasreservedkeywordinSQLServerstoredprocedure【发布时间】:2016-07-0512:47:41【问题描述】:我的数据库中有大量存储过程。所有这些都旨在返回结果... 查看详情

mysql中解决存储过程表名通过变量传递的方法(代码片段)

一问题描述在存储过程中,简单的用set或者declare语句定义变量,然后直接作为sql的表名是不行的,mysql会把变量名当作表名。在其他的sql数据库中也是如此。这在mysql5.0之前是不行的,5.0之后引入了一个全新的语... 查看详情