尝试将重复的字段分配给与非重复字段相同的值

时间:2016-11-02 10:36:35

标签: sql google-bigquery

我尝试命令查询的输出,该查询将行中存在的所有网址提取到重复字段 - 原始行包含0到20个网址之间的任何内容。

这是我最初的查询,它可以很好地提取每个网址。

SELECT
Unique_ID, Content, Col_C, Col_D, 
REGEXP_EXTRACT_ALL(Content, r'(?i:(?:(?:(?:ftp|https?):\/\/)(?:www\.)?|www\.)(?:[\da-z-_\.]+)(?:[a-z\.]{2,7})(?:[\/\w\.-_\?\&]*)*\/?)') AS URL
FROM
  Project.Table_1

但是,如果每行有多个网址,则新列的网址为'仅将其他列的值附加到重复结果的第一行。我希望为每个唯一网址创建一个新行,并重复“内容”中的值。柱。这样,当我希望稍后查询时,我可以将Col_C,Col_D等人工编码的值重新附加到每个URL。

理想情况下,这就是我喜欢看的东西。

初步结果:

Unique_ID     Content    Col_C      Col_D       URL
001           abc         efg        hij        www.facebook.com 
002           zxy         qwe        rty        www.facebook.com
                                                www.bbc.co.uk
                                                www.nbc.com


Desired output:
Unique_ID     Content    Col_C      Col_D       URL
001           abc         efg        hij        www.facebook.com 
002           zxy         qwe        rty        www.facebook.com
002           zxy         qwe        rty        www.bbc.co.uk                                                 002           zxy         qwe        rty        www.nbc.com

希望一切都有意义!

对此的任何帮助都将非常感谢,谢谢。

1 个答案:

答案 0 :(得分:3)

SELECT
  Unique_ID, Content, Col_C, Col_D, URL     
FROM (
  SELECT Unique_ID, Content, Col_C, Col_D, 
    REGEXP_EXTRACT_ALL(Content, r'(?i:(?:(?:(?:ftp|https?):\/\/)(?:www\.)?|www\.)(?:[\da-z-_\.]+)(?:[a-z\.]{2,7})(?:[\/\w\.-_\?\&]*)*\/?)') AS URL
  FROM Project.Table_1
), UNNEST(URL) as URL