Python 是否将CSV中的重复列转换为嵌套的BigQuery表?
我有一张这样的桌子:Python 是否将CSV中的重复列转换为嵌套的BigQuery表?,python,sql,csv,google-bigquery,etl,Python,Sql,Csv,Google Bigquery,Etl,我有一张这样的桌子: a b c b c 0 0 1 2 3 4 1 5 6 7 8 9 我想将其转换为嵌套表: a b c 0 0 1 2 1 3 4 2 5 6 7 3 8 9 我已设法将其转换为这种格式 a b c 0 0 1 2 1 0 3 4 2 5 6 7 3 5 8 9 但是,有没有更好的方法将其从原始csv转换为所需的格
a b c b c
0 0 1 2 3 4
1 5 6 7 8 9
我想将其转换为嵌套表:
a b c
0 0 1 2
1 3 4
2 5 6 7
3 8 9
我已设法将其转换为这种格式
a b c
0 0 1 2
1 0 3 4
2 5 6 7
3 5 8 9
但是,有没有更好的方法将其从原始csv转换为所需的格式
我对BigQuery SQL或Python解决方案持开放态度。下面是BigQuery标准SQL
#standardSQL
WITH `I have managed to transform it to this format` AS (
-- replace below with whatever query you used to get to this format
SELECT 0 a, 1 b, 2 c UNION ALL
SELECT 0, 3, 4 UNION ALL
SELECT 5, 6, 7 UNION ALL
SELECT 5, 8, 9
)
SELECT a, ARRAY_AGG(b) b, ARRAY_AGG(c) c
FROM `I have managed to transform it to this format`
GROUP BY a
有输出
Row a b c
1 0 1 2
3 4
2 5 6 7
8 9
Row a b c
1 0 1 2
3 4
2 5 6 7
8 9
更新根据您最近的评论BQ中的列名[实际上]是b1 c1 b2 c2
在这种情况下,它如下所示
#standardSQL
SELECT a, [b1, b2] b, [c1, c2] c
FROM `project.dataset.table`
您可以使用问题中的样本数据测试、播放上述内容,如下例所示
#standardSQL
WITH `project.dataset.table` AS (
SELECT 0 a, 1 b1, 2 c1, 3 b2, 4 c2 UNION ALL
SELECT 5, 6, 7, 8, 9
)
SELECT a, [b1, b2] b, [c1, c2] c
FROM `project.dataset.table`
有输出
Row a b c
1 0 1 2
3 4
2 5 6 7
8 9
Row a b c
1 0 1 2
3 4
2 5 6 7
8 9
是的,请参阅pandas中的多重索引。您可以尝试在youtube上观看一些视频。请显示用于转换的代码。并且您的原始表具有BQ不允许的重复列名。这个问题没有意义。@GordonLinoff BQ中的列名是
a b1 c1 b2 c2
选择a[b1,b2]b
并有一个错误:数组不能有空元素,写入字段b时出错这是真的。数组不能有null元素-那么你想用什么值来替换null呢?如果我用0来替换null呢?在这种情况下-只要用[b1,b2]
替换[IFNULL(b1,0),IFNULL(b2,0)]
-这与[c1,c2]
相同,但我有b1,b2,b20和许多空元素,目前每行有20个“嵌套行”,其中大部分为0。如何优化存储?