Azure:从BigQuery接收clickstream数据
我需要将BigQuery中的事件数据摄取到Azure中,以便能够对其应用一些分析 到目前为止,我一直在与数据工厂合作。现在的问题是,我不知道如何转换和存储数据。BigQuery中的数据嵌套严重,例如:Azure:从BigQuery接收clickstream数据,azure,google-bigquery,powerbi,Azure,Google Bigquery,Powerbi,我需要将BigQuery中的事件数据摄取到Azure中,以便能够对其应用一些分析 到目前为止,我一直在与数据工厂合作。现在的问题是,我不知道如何转换和存储数据。BigQuery中的数据嵌套严重,例如: [ {"event_date": "<int>", "event_timestamp": "<int>", "event_name": &q
[
{"event_date": "<int>",
"event_timestamp": "<int>",
"event_name": "<string>",
"event_params": [
{"key": "<string>",
"value": {"string_value": "<string>",
"int_value": <int>,
"float_value": <float>,
"double_value": <double>}},
{"key": "<string>",
"value": {"string_value": "<string>",
"int_value": <int>,
"float_value": <float>,
"double_value": <double>}},
{"key": "<string>",
"value": {"string_value": "<string>",
"int_value": <int>,
"float_value": <float>,
"double_value": <double>}},
{"key": "<string>",
"value": {"string_value": "<string>",
"int_value": <int>,
"float_value": <float>,
"double_value": <double>}},
{"key": "<string>",
"value": {"string_value": "<string>",
"int_value": <int>,
"float_value": <float>,
"double_value": <double>}},
{"key": "<string>",
"value": {"string_value": "<string>",
"int_value": <int>,
"float_value": <float>,
"double_value": <double>}}
],
"event_previous_timestamp": <int>,
+ (more key-value pairs of user information etc)
},
{ event2 },
{ event3 },
]
[
{“事件日期”:“,
“事件\u时间戳”:“”,
“事件名称”:“,
“事件参数”:[
{“键”:“,
“值”:{“字符串值”:“”,
“国际价值”:,
“浮点数”:,
“双_值”:},
{“键”:“,
“值”:{“字符串值”:“”,
“国际价值”:,
“浮点数”:,
“双_值”:},
{“键”:“,
“值”:{“字符串值”:“”,
“国际价值”:,
“浮点数”:,
“双_值”:},
{“键”:“,
“值”:{“字符串值”:“”,
“国际价值”:,
“浮点数”:,
“双_值”:},
{“键”:“,
“值”:{“字符串值”:“”,
“国际价值”:,
“浮点数”:,
“双_值”:},
{“键”:“,
“值”:{“字符串值”:“”,
“国际价值”:,
“浮点数”:,
“双_值”:}
],
“事件\u上一个\u时间戳”:,
+(更多用户信息的键值对等)
},
{event2},
{event3},
]
event2和event3表示有一个事件列表,每个事件都包含代码段第一部分中描述的嵌套数组。我想创建一个数据湖类型的解决方案,使用平面CSV文件和Power BI从那里读取数据。我开始尝试将数据展平为CSV,以便Power BI可以轻松解析数据,但这导致数据文件的大小成倍增加。Power BI可以接收JSON,但嵌套JSON有问题,因为每个嵌套数组都需要打开
你认为这里的方法应该是什么?我可以使用所有Microsoft/Azure生态系统工具
我可以想到以下几种选择:
你们有什么办法吗?如果我的描述没有涵盖任何内容,请告诉我,我会尝试添加内容。谢谢大家! 有趣的是,BigQuery是一种数据仓库类型的解决方案,您将其用作数据湖的反馈。通常情况下,情况会相反,比如大查询。PowerBI和一个非常强大的直接/实时查询引擎 也就是说,我明白你想做什么。我们曾经面对过各种JSON噩梦,并且像您一样,发现在PowerQuery中尝试解压和解压JSON既单调又缓慢 但是,您的JSON看起来并没有那么糟糕,如果我读对了,我会看到它很好地旋转到CSV/TSV:
"event_date", "event_timestamp", "event_name", "key 1", "key 2", "key 3", "event_previous_timestamp", ...
从管道的角度来看,我将把所有来自BigQuery的JSON以原始格式放到lake中,如果您关心体积,可以使用它。然后,进行第二个活动,将事件JSON数据转换为更简单(更平坦)的JSON(可能一个结构用于核心事件数据,另一个结构用于用户数据等,通过EventId链接所有内容),并将其存储在湖中的一个分段区域,以便在PowerBI中更轻松地使用
更进一步,如果您希望PowerBI性能更好,并且可以选择在DirectQuery模式下工作,则可以添加SQL DB或Synapse作为数据集市来生成事实和维度
我们团队中有强大的开发人员,使用Azure函数将疯狂的JSON文件解压到更合理的结构中
这不是最好的答案,但我希望能有所帮助。谢谢你的回答!这无疑把我推向了正确的方向。您关于将数组元素旋转为列的建议很有效。在最初的JSON中,数据由多个数组组成,因此我实际上决定将
事件参数
取消到行中,将其他数组取消到列中。然而,ADF的BigQuery API似乎以某种方式弄乱了查询的数据。在ADF中,输出在一列中,而不是像{“v”:{“f”:[{“v”:“user_properties_1_key”},{“v”:{“f”:{“v”:null},…。
我的SQL查询是:x为(从事件表中选择事件参数作为arr_事件、用户_属性)选择arr_events.key作为events_key,arr_events.value.string_value作为events_string_value,arr_events.value.int_value作为events_int value,arr_events.value.float_value作为events_float_value,arr_events.value.double_value作为events_double_value,用户属性[安全顺序(1)]作为用户_属性_1,从x,x.arr_事件中,事件_参数
和用户_属性
是数组,我想将事件_参数
取消到行中,用户_属性
取消到列中