【问题标题】:parse each row of the table and display distinct values sql解析表的每一行并显示不同的值sql
【发布时间】:2019-11-28 20:42:31
【问题描述】:

我正在处理一个公共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 中实现吗?

【问题讨论】:

标签: regex google-bigquery


【解决方案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

【讨论】:

  • 非常感谢。为了您的支持
  • 我是这样做的
  • SELECT REGEXP_EXTRACT(Tags, r']*)>') As T FROM [sotorrent-org:2018_09_23.Posts] GROUP BY T
  • 看起来您使用的是 Legacy SQL,我建议切换到 Standard SQL(我的解决方案使用它)
  • 看起来答案解决了这个问题。如果这是真的,最好接受答案,但如果不是,请说明问题出在哪里。
【解决方案2】:

以下是 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    

【讨论】:

    猜你喜欢
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多