Hello BigQuery社区!
我在BigQuery中有下表:Table1: Output Table BigQuery
现在我想将它转换为这种格式: Table2: Transpose Table BigQuery
您还可以查看此Google表格中的表格:https://docs.google.com/spreadsheets/d/1LF8OMql3BdBAReUX33Y2f3QMD2EW6Exw5hBOFm7EteU/edit?usp=sharing
挑战在于:实体总是不同的,每个search_term最多可包含X个实体。我真的不知道从哪里开始。如果有人可以帮助我,那会很棒。我对每一次帮助都非常满意。
非常感谢!
答案 0 :(得分:2)
我真的不知道从哪里开始
以下可以为您提供良好的开端
#standardSQL
WITH `project.dataset.table1` AS (
SELECT 'van rental london' search_term, 'Rental' entity, 'rental' entitydetail, 3 enittyCount UNION ALL
SELECT 'van rental london', 'Location', 'london', 3 UNION ALL
SELECT 'van rental london', 'Car Type', 'van', 3 UNION ALL
SELECT 'van hire sheffield', 'Location', 'sheffield', 3 UNION ALL
SELECT 'van hire sheffield', 'Car Type', 'van', 3 UNION ALL
SELECT 'van hire sheffield', 'Hire', 'hire', 3 UNION ALL
SELECT 'van hire', 'Car Type', 'van', 2 UNION ALL
SELECT 'van hire', 'Hire', 'hire', 2 UNION ALL
SELECT 'san diego car rental', 'Rental', 'rental', 3 UNION ALL
SELECT 'san diego car rental', 'Location', 'San Diego', 3 UNION ALL
SELECT 'san diego car rental', 'Vehicle Type', 'car', 3 UNION ALL
SELECT 'long term car rental london', 'Vehicle Type', 'car', 4 UNION ALL
SELECT 'long term car rental london', 'Location', 'london', 4 UNION ALL
SELECT 'long term car rental london', 'Rental', 'rental', 4 UNION ALL
SELECT 'long term car rental london', 'Long Term', 'Long Term', 4 UNION ALL
SELECT 'london car hire', 'Location', 'london', 3 UNION ALL
SELECT 'london car hire', 'Vehicle Type', 'car', 3 UNION ALL
SELECT 'london car hire', 'Hire', 'hire', 3
)
SELECT
search_term,
MAX(IF(pos=1, entity, NULL)) entity1,
MAX(IF(pos=1, entitydetail, NULL)) entitydetail1,
MAX(IF(pos=2, entity, NULL)) entity2,
MAX(IF(pos=2, entitydetail, NULL)) entitydetail2,
MAX(IF(pos=3, entity, NULL)) entity3,
MAX(IF(pos=3, entitydetail, NULL)) entitydetail3,
MAX(IF(pos=4, entity, NULL)) entity4,
MAX(IF(pos=4, entitydetail, NULL)) entitydetail4
FROM (
SELECT
search_term, entity, entitydetail,
ROW_NUMBER() OVER(PARTITION BY search_term ORDER BY entity) pos
FROM `project.dataset.table1`
)
GROUP BY search_term
每个search_term最多可包含X个实体
以上查询假定您知道X的最大值,因此您需要在查询中重复两行以下X行,将N替换为相应的数字
MAX(IF(pos=N, entity, NULL)) entityN,
MAX(IF(pos=N, entitydetail, NULL)) entitydetailN,
当然这可以使用脚本轻松生成(您可以使用BQ或您选择的任何语言)
您还可以查看https://stackoverflow.com/a/40766540/5221944了解更多信息