【问题标题】:BigQuery: split string with repetitive pattern to separate rowsBigQuery:拆分具有重复模式的字符串以分隔行
【发布时间】:2020-07-26 08:05:47
【问题描述】:

我有一个重复模式的字符串,例如:timestampField: <SOME_INT_VALUE> url: <SOME_STRING_VALUE>。正如您在示例中看到的那样,此模式返回多次(在此示例中为 4 次)。

SELECT my_string
FROM (SELECT 'timestampField: 1595351350 url: domainZ/aaaabbbbccccdddd timestampField: 1595351355 url: domainZ/eeeeffffgggghhhh timestampField: 1595351355 url: domainZ/iiiijjjjkkkkllll timestampField: 1595351356 url: domainZ/mmmmnnnnppppoooo' as my_string)

我想把这个大字符串分成 4 个(在这个例子中)不同的行,每一行都有一个字符串值

  1. timestampField: 1595351350 url: domainZ/aaaabbbbccccdddd
  2. timestampField: 1595351355 url: domainZ/eeeeffffgggghhhh
  3. timestampField: 1595351355 url: domainZ/iiiijjjjkkkkllll
  4. timestampField: 1595351356 url: domainZ/mmmmnnnnppppoooo

【问题讨论】:

    标签: regex string design-patterns split google-bigquery


    【解决方案1】:

    以下是 BigQuery 标准 SQL

    一种简单的方法是使用 SPLIT,如下所示

    #standardSQL
    SELECT 'timestampField:' || v AS part
    FROM `project.dataset.table`,
    UNNEST(SPLIT(my_string, 'timestampField:')) v
    WHERE NOT v = ''   
    

    如果适用于您问题中的样本数据 - 输出是

    Row part     
    1   timestampField: 1595351350 url: domainZ/aaaabbbbccccdddd     
    2   timestampField: 1595351355 url: domainZ/eeeeffffgggghhhh     
    3   timestampField: 1595351355 url: domainZ/iiiijjjjkkkkllll     
    4   timestampField: 1595351356 url: domainZ/mmmmnnnnppppoooo    
    

    另一个使用正则表达式的选项,输出相同

    #standardSQL
    SELECT part
    FROM `project.dataset.table`,
    UNNEST(REGEXP_EXTRACT_ALL(my_string, r'timestampField: [^ ]* url: [^ ]*')) part
    

    【讨论】:

    • 两者都有效,太棒了!谢谢。 @Mikhail Berlyant 您能否解释一下第一个解决方案 - || 在 BigQuery 中的含义是什么?
    猜你喜欢
    • 1970-01-01
    • 2021-11-10
    • 2020-10-03
    • 2020-01-07
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 2014-06-13
    相关资源
    最近更新 更多