使用bq命令获取bigquery中选择或更新的总行数



我正在尝试将一些TERADATA功能迁移到BigQuery中,并且自从我在shell脚本环境中工作以来,我一直在寻找与TERADATA中的ACTIVITYCOUNT类似的功能,下面是一个示例:

SELECT username, password from USERS_TABLE where true 
. IF ACTIVITYCOUNT=0 THEN .QUIT 122;

这是我将SQL查询转换为BigQuery的新版本

bq query --format=csv --use_legacy_sql=false "SELECT username, password from USERS_TABLE where true" > output.txt
### How to get the number of rows selected ???

但我仍在努力处理第二条指令,我不知道是否有任何本地方法可以在不对计数进行新的sql查询的情况下获得返回的行数,因为我有很多请求要对其进行同样的操作。

这是一个变通解决方案:

选择声明:

$ bq query --nouse_legacy_sql 'SELECT * FROM `project.dataset.table`' | expr `wc -l` - 4 | sed 's/-[0-9]*/0/'

更新声明:

$ bq query --nouse_legacy_sql 'UPDATE `project.dataset.table` SET sal = sal * 2 WHERE true' 2>/dev/null | awk '{print $NF}'

可能有各种解决方案,让我从一个更简单的解决方案开始,看看它是否适合您。

(更难的是从完成的工作中获取结果(

ASSERT (SELECT COUNT(username) > 0 from USERS_TABLE where true) AS "USERS_TABLE cannot be empty";

然后,您的shell脚本只需要监视查询是否有错误。

有关ASSERT的更多信息:https://cloud.google.com/bigquery/docs/reference/standard-sql/debugging-statements

================

更进一步,您可以看到,可能不需要将语句分解成更小的片段,以便由shell脚本发送。您可以编写一个SQL脚本,该脚本已经使用Scripting 在不同的地方断言

最新更新