azure - Azure:从 BigQuery 提取点击流数据
问题描述
我需要将 BigQuery 中的事件数据提取到 Azure 中,目的是能够对其应用一些分析。
到目前为止,我一直在使用数据工厂。现在,问题是,我不确定如何转换和存储数据。BigQuery 中的数据是高度嵌套的,结构示例:
[
{"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 },
]
event2 和 event3 表示有一个事件列表,每个事件都包含代码片段第一部分中描述的嵌套数组。我想创建一个数据湖类型的解决方案,其中包含平面 CSV 文件和 Power BI 从那里读取数据。我开始尝试将数据展平为 CSV,以便 Power BI 可以轻松解析它,但这会导致数据文件的大小成倍增加。Power BI 可以接收 JSON,但嵌套 JSON 存在问题,因为每个嵌套数组都需要打开。
您认为这里应该采用什么方法?我可以使用所有 Microsoft/Azure 生态系统工具。
我可以想到这些选项:
- 坚持使用巨大的平面 CSV 文件,Power BI 非常慢并且文件占用大量空间
- 在 Power BI 中嵌套 JSON,使用一些电源查询代码自动取消嵌套数据
- 将数据写入 SQL 数据库,我可以在其中根据事件 ID 在表之间创建连接
你们有任何想法如何进行吗?如果我的描述没有涵盖任何内容,请告诉我,我会尝试添加。谢谢!
解决方案
有趣的是,BigQuery 是一种数据仓库类型的解决方案,您将其用作数据湖的馈送。通常情况会反过来,比如 Big Query。PowerBI支持 BigQuery和一个非常强大的直接/实时查询引擎。
也就是说,我明白你想要做什么。我们遇到过各种各样的 JSON 噩梦,并且像您一样发现尝试在 PowerQuery 中对 JSON 进行解透视和解绑既乏味又缓慢。
但是,您的 JSON 看起来并没有那么糟糕,如果我正确阅读它,我会看到它很好地转换为 CSV / TSV:
"event_date", "event_timestamp", "event_name", "key 1", "key 2", "key 3", "event_previous_timestamp", ...
从流水线的角度来看,我会将 BigQuery 中的所有 JSON 以 RAW 格式放入湖中,如果您关心体积,可以使用Parquet 。然后让第二个活动将事件 JSON 数据转换为更简单(更扁平)的 JSON(可能一种结构用于核心事件数据,另一种用于用户数据等,由 EventId 链接所有)并将其存储在湖的 STAGED 区域以便于使用在 PowerBI 中。
更进一步,如果您希望 PowerBI 具有更高的性能并可以选择在 DirectQuery 模式下工作,您可以将 SQL DB 或 Synapse 添加为 DataMart 以生成事实和维度。
我们的团队中有强大的开发人员,并使用 Azure 函数将疯狂的 JSON 文件分解为更合理的结构。
不是最好的答案,但我希望它有所帮助。
推荐阅读
- typescript - 在 webview 中更改 css 样式
- javascript - 需要解构的美化设置
- azure-devops - 如何在 Azure Devops 中安装 Windows Store 包 Desktop App Coverter (DAC)
- javascript - 将 next.js 更改为 node.js 时,JavaScript 文件在 html 中不起作用
- firebase - 是否可以在禁用第三方 cookie 的情况下使用带有 Firebase 身份验证的 Google 登录?
- powershell - Robocopy 在保留时间戳的同时使用 .txt 文件输入移动选择文件夹和内容
- vba - 根据用户输入过滤掉表单中的记录选择的更好方法是什么?_afterupdate 还是 _beforeupdate?
- html - iOS 将不可见的 Unicode 字符显示为包含“mvs”的虚线框
- python - 如何以字符串格式将十进制转换为十六进制
- angular - 如何使用角度自动重新选中已取消选中的复选框