代码之家  ›  专栏  ›  技术社区  ›  user9114945

BigQuery:将计数转换为行

  •  0
  • user9114945  · 技术社区  · 6 年前

    我有一个旧的SQL表,如下所示:

    -------------------------------------
    | product | cached number of orders |
    |-----------------------------------|
    | iphone  | 3                       |
    | pencil  | 2                       |
    

    我要将此数据转换为以下格式:

    -----------
    | product |
    |---------|
    | iphone  |
    | iphone  |
    | iphone  |
    | pencil  |
    | pencil  |
    

    是否有解决方案在旧表上运行SELECT以输出所需的格式?(我可以临时将旧表导入BigQuery)

    2 回复  |  直到 6 年前
        1
  •  1
  •   Elliott Brossard    6 年前

    试试这个:

    SELECT product
    FROM dataset.table,
      UNNEST(GENERATE_ARRAY(1, cached_number_of_orders))
    

    这个 , UNNEST (... cached_number_of_orders ,所以最终得到了所需的产品重复次数。

        2
  •  1
  •   Mikhail Berlyant    6 年前

    但我总是喜欢看到选项-更多选项:o)

    #standardSQL
    SELECT product
    FROM `project.dataset.table`, 
      UNNEST(REGEXP_EXTRACT_ALL(REPEAT(product, number_of_orders), product)) product   
    

    你可以用问题中的虚拟数据进行测试

    #standardSQL
    WITH `project.dataset.table` AS (
      SELECT 'iphone' product, 3 number_of_orders UNION ALL
      SELECT 'pencil', 2
    )
    SELECT product
    FROM `project.dataset.table`, 
      UNNEST(REGEXP_EXTRACT_ALL(REPEAT(product, number_of_orders), product)) product   
    

    有结果的

    Row product  
    1   iphone   
    2   iphone   
    3   iphone   
    4   pencil   
    5   pencil     
    

    另一个愚蠢的变化是:

    #standardSQL
    SELECT product
    FROM `project.dataset.table`, 
      UNNEST(SPLIT(REPEAT(CONCAT(product, ','), number_of_orders))) product
    WHERE product <> ''