我正在公共dataset上工作,我需要在其中分析表帖子的每一行。因此,例如,列tags
下的三行具有值:
1. <c#><.net>
2. <android> <python> <sockets> <android-studio><socket.io>
3. <android-studio><socket.io><.net>
我需要将输出显示为:
1. c#
2. .net
3. android
4. python
5. sockets
6. android-studio
7. socket.io
在BigQuery中有没有办法做到这一点?
答案 0 :(得分:1)
您可以先使用REGEXP_EXTRACT_ALL
来匹配<>内的所有单词,然后使用UNNEST
将结果数组平整输出:
select e from (
select regexp_extract_all(x, r'<([^>]*)>') e
from unnest([
"<c#><.net>",
"<android> <python> <sockets> <android-studio><socket.io>",
"<android-studio><socket.io><.net>"
]) x), unnest(e) e
生产
Row e
1 c#
2 .net
3 android
4 python
5 sockets
6 android-studio
7 socket.io
8 android-studio
9 socket.io
10 .net
要消除重复,请运行DISTINCT
:
select distinct e from (
select regexp_extract_all(x, r'<([^>]*)>') e
from unnest([
"<c#><.net>",
"<android> <python> <sockets> <android-studio><socket.io>",
"<android-studio><socket.io><.net>"
]) x), unnest(e) e
答案 1 :(得分:0)
以下是用于BigQuery标准SQL
#standardSQL
SELECT DISTINCT tag
FROM `project.dataset.table`,
UNNEST(REGEXP_EXTRACT_ALL(tags, r'<([^>]*)>')) tag
您可以使用问题中的示例数据来测试/播放上面的示例
#standardSQL
WITH `project.dataset.table` AS (
SELECT '<c#><.net>' tags UNION ALL
SELECT '<android> <python> <sockets> <android-studio><socket.io>' UNION ALL
SELECT '<android-studio><socket.io><.net>'
)
SELECT DISTINCT tag
FROM `project.dataset.table`,
UNNEST(REGEXP_EXTRACT_ALL(tags, r'<([^>]*)>')) tag
有结果
Row tag
1 c#
2 .net
3 android
4 python
5 sockets
6 android-studio
7 socket.io