我们想运行一个查询,该查询返回两个出现在多行中的词组。因此,例如使用字符串“Data Ninja”。由于它出现在我们数据集中的不止一行中,因此查询应该返回它。查询应该通过在数据集中的行中查询两个相邻的单词组合(形成一个短语),从我们数据集中的所有行中找到所有此类短语。这两个相邻的单词组合应该来自我们加载到 BigQuery 中的数据集
我们如何在 Google BigQuery 中编写此查询?
数据集只是一长串英语句子。
我们想运行一个查询,该查询返回两个出现在多行中的词组。因此,例如使用字符串“Data Ninja”。由于它出现在我们数据集中的不止一行中,因此查询应该返回它。查询应该通过在数据集中的行中查询两个相邻的单词组合(形成一个短语),从我们数据集中的所有行中找到所有此类短语。这两个相邻的单词组合应该来自我们加载到 BigQuery 中的数据集
我们如何在 Google BigQuery 中编写此查询?
数据集只是一长串英语句子。
好消息:BigQuery 现在支持 SPLIT()。检查https://stackoverflow.com/a/24172995/132438。
这是一个 hack,但我碰巧喜欢 :)。
在目前的形式中,它只适用于超过 2 个单词的句子,并且只提取前 6 个对。您可以从这里扩展和测试。
试试你的数据,然后报告。
SELECT pairs, COUNT(*) c FROM
(
SELECT REGEXP_REPLACE(title, '([^\\s]+ ){0}([^\\s]* [^\\s]+).*', '\\2') pairs, title
FROM [bigquery-samples:reddit.full]
),
(
SELECT REGEXP_REPLACE(title, '([^\\s]+ ){1}([^\\s]* [^\\s]+).*', '\\2') pairs, title
FROM [bigquery-samples:reddit.full]
),
(
SELECT REGEXP_REPLACE(title, '([^\\s]+ ){2}([^\\s]* [^\\s]+).*', '\\2') pairs, title
FROM [bigquery-samples:reddit.full]
),
(
SELECT REGEXP_REPLACE(title, '([^\\s]+ ){3}([^\\s]* [^\\s]+).*', '\\2') pairs, title
FROM [bigquery-samples:reddit.full]
),
(
SELECT REGEXP_REPLACE(title, '([^\\s]+ ){4}([^\\s]* [^\\s]+).*', '\\2') pairs, title
FROM [bigquery-samples:reddit.full]
),
(
SELECT REGEXP_REPLACE(title, '([^\\s]+ ){5}([^\\s]* [^\\s]+).*', '\\2') pairs, title
FROM [bigquery-samples:reddit.full]
)
WHERE pairs != title
GROUP EACH BY pairs
HAVING c > 1
LIMIT 1000
结果可能包含 NSFW 单词。样本数据集来自尚未“清理”的在线社区。如果您对某些单词敏感,请不要运行查询。
一个非常有用的 hack 启发了我解决我的问题,谢谢。
我的数据是乘客及其年龄的组合,其中年龄是一串数字:
adults ages
------ -------------
4 "53,67,65,68"
4 "44,45,69,65"
3 "20,21,20"
3 "30,32,62"
我想在每一行添加一列,其中包含最高值和最低值之间的年龄差异
adults ages agediff
------ ------------- -------
4 "53,67,65,68" 15
4 "44,45,69,65" 25
3 "20,21,20" 1
3 "30,32,62" 32
这是由以下人员完成的,深受黑客攻击的启发:
SELECT adults, ages, SUBTRACT(INTEGER(maxage),INTEGER(minage)) agediff FROM
(SELECT adults, ages, max(age) maxage, min(age) minage FROM
(SELECT adults, ages, age FROM
(SELECT adults, ages, REGEXP_EXTRACT(ages, r'([\d\d\,]{2})') age FROM [PaxAgeCombinations] WHERE (adults="3")),
(SELECT adults, ages, REGEXP_EXTRACT(ages, r'\d\d\,([\d\d\,]{2})') age FROM [PaxAgeCombinations] WHERE (adults="3")),
(SELECT adults, ages, REGEXP_EXTRACT(ages, r'\d\d\,\d\d\,([\d\d\,]{2})') age FROM [PaxAgeCombinations] WHERE (adults="3"))
),
(SELECT adults, ages, age FROM
(SELECT adults, ages, REGEXP_EXTRACT(ages, r'([\d\d\,]{2})') age FROM [PaxAgeCombinations] WHERE (adults="4")),
(SELECT adults, ages, REGEXP_EXTRACT(ages, r'\d\d\,([\d\d\,]{2})') age FROM [PaxAgeCombinations] WHERE (adults="4")),
(SELECT adults, ages, REGEXP_EXTRACT(ages, r'\d\d\,\d\d\,([\d\d\,]{2})') age FROM [PaxAgeCombinations] WHERE (adults="4")),
(SELECT adults, ages, REGEXP_EXTRACT(ages, r'\d\d\,\d\d\,\d\d\,([\d\d\,]{2})') age FROM [PaxAgeCombinations] WHERE (adults="4"))
)
)