BQ 使用 CONTAINS 条件给出不完整的结果

BQ giving incomplete results using CONTAINS condition

我正在使用 Bigquery 处理一些 Adwords 数据,更准确地说,是从我们的目标 URL 中提取所有 url 参数,以便我们更好地组织它等等。

我编写了以下查询,以返回 table 中 "DestinationURL" 字段中可用的所有参数。如下:

SELECT Parameter
  FROM (SELECT NTH(1, SPLIT(Params,'=')) as Parameter,
        FROM (SELECT 
              AdID,
              NTH(1, SPLIT(DestinationURL,'?')) as baseurl,
              split(NTH(2, SPLIT(DestinationURL,'?')),'&') as Params
              FROM [adwords_accounts_ads.ads_all] 
              HAVING Params CONTAINS '='))

 GROUP BY 1

运行这将给我 6 个参数。这是正确的但不完整,因为在这个测试中 table 我知道 URL 中还有 2 个其他参数没有被获取。一个叫 'group',另一个叫 'utm_content'。

现在如果我运行:

SELECT Parameter
  FROM (SELECT NTH(1, SPLIT(Params,'=')) as Parameter,
        FROM (SELECT 
              AdID,
              NTH(1, SPLIT(DestinationURL,'?')) as baseurl,
              split(NTH(2, SPLIT(DestinationURL,'?')),'&') as Params
              FROM [adwords_accounts_ads.ads_all] 
              HAVING Params CONTAINS 'p='))

 GROUP BY 1

我得到 "group" 参数显示。

问题是:

不应该
"CONTAINS '='" 

条件包括

"CONTAINS 'p='" 

结果呢? 't=' 而不是 '='

也会发生同样的情况

有谁知道我该如何解决这个问题?甚至如何从包含 URL?

的字符串中提取所有参数

ps:使用 LIKE 产生完全相同的结果

谢谢!

Split 会创建一个 REPEATED 输出类型,您必须 FLATTEN table 才能正确查看。

这里我在 params 上使用了展平,现在输出很好:

SELECT nth(1,SPLIT(Params,'=')) AS Param,
       nth(2,SPLIT(Params,'=')) AS Value
FROM flatten(SELECT 
                AdID, 
                NTH(1, SPLIT(DestinationURL,'?')) AS baseurl, 
                split(NTH(2, SPLIT(DestinationURL,'?')),'&') AS Params
                FROM
                    (SELECT 1 AS AdID,'http://www.example.com.br/?h=Passagens+Aereas&source=google&vt=0' AS DestinationURL) 
                HAVING Params CONTAINS '=',
            params
            )

输出:

+-----+--------+------------------+---+
| Row | Param  |      Value       |   |
+-----+--------+------------------+---+
|   1 | h      | Passagens+Aereas |   |
|   2 | source | google           |   |
|   3 | vt     | 0                |   |
+-----+--------+------------------+---+

注意:Web UI 总是使你的结果变平,但如果你 select 一个目的地 table 并取消选中 "flatten results",你将得到一个重复的单行部件列。