我已经将数据从Google Analytics拉到了几个大查询表中。Google Analytics将维度数量限制为7,指标数量限制为10。
我有三个表,每个表都有相同的7个维度。我总共有30个指标(每个表中有10个)。
如何将这些表合并为一个表?JOIN或UNION似乎不是正确的方法,因为所有的“维”都有相同的名称,我不想追加额外的行;基本上只是根据维的“键”向第一个表添加20列?
发布于 2019-12-20 21:32:28
如果我对你的理解正确的话,你有以下几点:
表1(这里只有3个样本,而不是10个):
SELECT 'metric_name_1' as metric_name,
'val_1' as dim_1,
'val_2' as dim_2,
'val_3' as dim_3,
'val_4' as dim_4,
'val_5' as dim_5,
'val_6' as dim_6,
'val_7' as dim_7
UNION ALL
SELECT 'metric_name_2',
'val_8',
'val_9',
'val_10',
'val_11',
'val_12',
'val_13',
'val_14'
UNION ALL
SELECT 'metric_name_3',
'val_15',
'val_16',
'val_17',
'val_18',
'val_19',
'val_20',
'val_21'
第二个表:
SELECT 'metric_name_4' as metric_name,
'val_22' as dim_1,
'val_23' as dim_2,
'val_24' as dim_3,
'val_25' as dim_4,
'val_26' as dim_5,
'val_27' as dim_6,
'val_28' as dim_7
UNION ALL
SELECT 'metric_name_5',
'val_29',
'val_30',
'val_31',
'val_32',
'val_33',
'val_34',
'val_35'
UNION ALL
SELECT 'metric_name_6',
'val_36',
'val_37',
'val_38',
'val_39',
'val_40',
'val_41',
'val_42'
从这里,你想要得到一个这样的表:
这并不是太简单,可以通过两个步骤来实现:
resulting_join as (select first_table,second_table from first_table join second_table on True)
SELECT * EXCEPT (pos, pos_1)
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY first_table.metric_name) AS pos,
ROW_NUMBER() OVER (PARTITION BY second_table.metric_name) AS pos_1,
FROM resulting_join
)
WHERE pos = pos_1
我认为在这种情况下只使用UNION ALL并添加新行要好得多。希望这对你有所帮助--如果你需要进一步的解释--我很乐意回复。
发布于 2019-11-16 00:24:31
我觉得你想要full join
select dim1, dim2, dim3, dim4, dim5, dim6, dim7,
t1.* except (dim1, dim2, dim3, dim4, dim5, dim6, dim7),
t2.* except (dim1, dim2, dim3, dim4, dim5, dim6, dim7),
t3.* except (dim1, dim2, dim3, dim4, dim5, dim6, dim7)
from t1 full join
t2
using (dim1, dim2, dim3, dim4, dim5, dim6, dim7) full join
t3
using (dim1, dim2, dim3, dim4, dim5, dim6, dim7);
这假设指标具有不同的名称,而表只有维度和指标。
如果所有表都具有相同的维度,则可以改用inner join
。
https://stackoverflow.com/questions/58880882
复制相似问题