Google bigquery BigQuery:将计数转换为行

Google bigquery BigQuery:将计数转换为行,google-bigquery,Google Bigquery,我有一个旧的SQL表,如下所示: ------------------------------------- | product | cached number of orders | |-----------------------------------| | iphone | 3 | | pencil | 2 | 我想将此数据转换为以下格式: ----------- | product | |--

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

-------------------------------------
| product | cached number of orders |
|-----------------------------------|
| iphone  | 3                       |
| pencil  | 2                       |
我想将此数据转换为以下格式:

-----------
| product |
|---------|
| iphone  |
| iphone  |
| iphone  |
| pencil  |
| pencil  |
在应用层上这样做是极端的,因为实际的表要大得多,复杂得多

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

尝试以下操作:

SELECT product
FROM dataset.table,
  UNNEST(GENERATE_ARRAY(1, cached_number_of_orders))
最令人不安的是。。。零件为介于1和缓存的订单数量之间的每一个数字生成一行,因此您可以得到所需的产品重复次数。

尝试以下操作:

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

最令人不安的是。。。part为介于1和缓存的订单数量之间的每一个数字生成一行,因此您最终会得到产品所需的重复次数。

下面是BigQuery标准SQL,对于这个特定问题不一定有极端的实用价值,因为Elliott已经以通常的方式回答了这个问题

但我总是喜欢看到更多的选择——更多的选择: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 <> ''

下面是针对BigQuery标准SQL的,对于这个特定的问题不一定有极端的实用价值,因为Elliott已经以通常的方式回答了这个问题

但我总是喜欢看到更多的选择——更多的选择: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 <> ''