我正在与Bigquery合作处理一些Adwords数据,更准确地说,是从我们的目标网址中提取所有网址参数,以便我们可以更好地组织它等等。
我编写了以下查询,以便返回" 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
Runnig这将给我6个参数。这是正确但不完整的,因为在此测试表中我知道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
我得到"组"参数显示。
问题是:不应该
"CONTAINS '='"
条件包括
"CONTAINS 'p='"
在结果中?同样的情况发生在't ='而不是' ='
有谁知道如何解决这个问题?甚至如何从包含URL的字符串中提取所有参数?
ps:使用LIKE产生完全相同的东西
谢谢!
答案 0 :(得分:2)
Split创建一个REPEATED输出类型,你必须FLATTEN表才能正确看到。
我在params
使用flatten,输出现在很好:
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总是会缩小您的结果但是如果您选择目标表并取消选中"展平结果",您将获得包含重复部分列的单行。