我已将Google Analytics(分析)中的数据提取到几个Big Query表中。 Google Analytics(分析)将维度数限制为7,将指标数限制为10。
我有三个表,每个表都具有相同的7个维度。我总共有30个指标(每个表中有10个指标)。
如何将这些表合并为一个表? JOIN或UNION似乎不是执行此操作的正确方法,因为所有“维度”都具有相同的名称,并且我不想添加其他行。基本上只是根据维度“键”向第一张表添加20列?
答案 0 :(得分:1)
如果我了解您的要求,您将具有以下条件:
表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并添加新行。希望对您有所帮助-如果您需要进一步的解释-我们很乐意回答。
答案 1 :(得分:0)
我认为您想要import SwiftUI
struct UserDefault<T> {
let key: String
let defaultValue:T
var wrappedValue:T {
get {
return UserDefaults.standard.object(forKey: key) as? T ?? defaultValue
} set {
UserDefaults.standard.set(newValue, forKey: key)
}
}
}
:
import SwiftUI
import Combine
final class DataStore : ObservableObject { //(1)
let didChange = PassthroughSubject<DataStore, Never>()
@UserDefault(key: "firstLaunch", defaultValue: true) //(2)
var firstLaunch:Bool{
didSet{
didChange.send(self)
}
}
}
这假定度量标准具有不同的名称,并且表仅具有维度和度量标准。
如果所有表格的尺寸均相同,则可以改用full join
。