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