给出一个示例数据集,我试图进行排序:
email,domain_name
name1@email.com,superlorem.com
name2@email.com,superdolor.com
name3@email.com,superamet.com
name4@email.com,badlorem.com
name5@email.com,baddolor.com
name6@email.com,badamet.com
我开始使用诸如......之类的查询 选择电子邮件 从表 哪里 (domain_name包含' dolor')或 (domain_name包含' sit')或 (domain_name包含' amet') GROUP BY电子邮件
是否可以按"包含"对结果进行分组。单词,例如' dolor',' sit'和' amet'?单词本身不会存在于列中(例如,作为域名的一部分,例如superlipsum.com)。我的最终目标是拥有一个类似于此的CSV:
Dolor,column1
Dolor,column2
Dolor,column3
Sit,column4
Sit,column5
Sit,column6
Sit,column7
Amet,column8
答案 0 :(得分:0)
你需要单独的表格,其中包含所有单词(dolor,sit,amet等) 然后,下面应该工作
SELECT
word,
email
FROM yourTable AS t1
CROSS JOIN wordsTable AS t2
WHERE domain_name CONTAINS word
ORDER BY word, email
如果您的单词列表有限 - 您可以使用以下(动态)版本
SELECT
word,
email
FROM yourTable AS t1
CROSS JOIN (
SELECT f0_ AS word FROM
(SELECT 'dolor'),
(SELECT 'sit'),
(SELECT 'amet')
) AS t2
WHERE domain_name CONTAINS word
ORDER BY word, email
两者都会产生类似下面的内容
word email
amet name3@email.com
amet name6@email.com
dolor name2@email.com
dolor name5@email.com
答案 1 :(得分:0)
另一种选择是使用正则表达式,即
SELECT
regexp_extract(domain_name, r'(dolor|sit|amet)' word,
email,
FROM table
BigQuery将为正则表达式编译自动机一次,并将有效地将其应用于所有行。我希望这能比JOIN提供更好的性能。