我正在尝试将一些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 在不同的地方断言