如何从表列计算词频 GoogleSQL Bigquery
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从表列计算词频 GoogleSQL Bigquery相关的知识,希望对你有一定的参考价值。
例如,我有一个Table中的一列,其中有某些单词。
MyTable
Name device_Used
----- ----------------
a iphone, Ipad, laptop
b mobile, laptop, android, desktop
c android, desktop, washing machine
现在我想从该表中搜索一组单词,例如[Ipad,android,laptop],并计算其频率。
我试着通过阅读一些网上的解决方案,并为自己创建一个解决方案,但得到了错误。这是我试过的方法。
WITH words AS (
SELECT word
FROM UNNEST([Ipad,android,laptop,desktop]) word
),
listcolumn AS (
SELECT device
FROM UNNEST(MyTable.device_Used) device
)
SELECT device, COUNT(word) AS cnt
FROM listcolumn
JOIN words
ON (device <> "")
GROUP BY device
ORDER BY cnt DESC;
我想创建一个新的表,结果是这样的:-。
device_Used count
--------------- -----------
Ipad 1
android 2
laptop 2
desktop 2
由于我是新来的,你可以建议一个新的代码,因为我使用的是通过阅读网上的建议来操作的。
答案
下面是BigQuery标准SQL
#standardSQL
SELECT TRIM(LOWER(device_Used)) AS device_Used, COUNT(1) `count`
FROM `project.dataset.table`,
UNNEST(SPLIT(device_Used)) device_Used
GROUP BY device_Used
HAVING LOWER(device_Used) IN ('ipad','android','laptop')
如果在你的问题中应用样本数据,如下面的例子。
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'a' Name, 'iphone, Ipad, laptop' device_Used UNION ALL
SELECT 'b', 'mobile, laptop, android, desktop' UNION ALL
SELECT 'c', 'android, desktop, washing machine'
)
SELECT TRIM(LOWER(device_Used)) AS device_Used, COUNT(1) `count`
FROM `project.dataset.table`,
UNNEST(SPLIT(device_Used)) device_Used
GROUP BY device_Used
HAVING LOWER(device_Used) IN ('ipad','android','laptop')
结果是
Row device_Used count
1 ipad 1
2 laptop 2
3 android 2
如果你能提供评论什么行做什么,这将是很大的帮助。
SELECT TRIM(LOWER(device_Used)) AS device_Used, COUNT(1) `count` -- (4)
FROM `project.dataset.table`, -- (1)
UNNEST(SPLIT(device_Used)) device_Used -- (2)
GROUP BY device_Used -- (3)
HAVING LOWER(device_Used) IN ('ipad','android','laptop') -- (5)
- 择表
- 将逗号分隔的列表转换为数组并嵌套。
- 编组
- 去掉尾部的空格和小写,以解决大小写敏感问题。
- 只是将预定义列表中的设备留在输出中。
以上是关于如何从表列计算词频 GoogleSQL Bigquery的主要内容,如果未能解决你的问题,请参考以下文章