需要使用bigquery查找字符串

h7appiyu  于 2021-07-29  发布在  Java
关注(0)|答案(3)|浏览(549)

我们有下面的字符串列和下面的数据

我想在字符串列中找到null计数 how many times null value('') present in front of id column present in select statement 使用大查询。
不要使用字符串位置。
预期产量:

count of null ('')id =3
1st row,2nd row and 5th row
qf9go6mv

qf9go6mv1#

下面是bigquery标准sql


# standardSQL

SELECT 
  FORMAT(
    "count of null ('')id = %d. List of id is: %s", 
    COUNT(*),  
    STRING_AGG(CAST(ID AS STRING))
  ) AS output
FROM `project.dataset.table`
WHERE REGEXP_CONTAINS(String, r"(?i)''\s+(?:as|)\s+(?:id|\[id\])")

如果要应用于问题的样本数据,则输出为

Row output   
1   count of null ('')id = 3. List of id is: 1,2,5
nkkqxpd9

nkkqxpd92#

其思想是将所有字符串统一到可以用“%”asid%“或regex首先用“”替换所有空格的内容
将“[”,“]”替换为“”。
使“或”的用法一致。
然后用like查询。
例如:

select 1 from (select replace(replace(replace(replace('select "" as do, "" as [id] form table1',' ',''),'[',''),']',''),'"',"'") as tt)
where tt like ("%''asid%")

这不是一个“聪明”的主意,但很简单。
更好的方法是将查询列保存在repeat列“'”as id'中,并将表保存在另一列中。
您不需要保存“select”和“from”,这样您就可以方便地进行查询,还可以根据数据组装查询。

0yg35tkg

0yg35tkg3#

如果我没弄错的话,你想数一数 ''string 列。
如果是的话,你可以用 regexp_extract_all() :

select t.*,
       (select count(*)
        from unnest(regexp_extract_all(t.string, "''")) u
       ) as empty_string_count
from t;

相关问题