Azure:从BigQuery接收clickstream数据

Azure:从BigQuery接收clickstream数据,azure,google-bigquery,powerbi,Azure,Google Bigquery,Powerbi,我需要将BigQuery中的事件数据摄取到Azure中,以便能够对其应用一些分析 到目前为止,我一直在与数据工厂合作。现在的问题是,我不知道如何转换和存储数据。BigQuery中的数据嵌套严重,例如: [ {"event_date": "<int>", "event_timestamp": "<int>", "event_name": &q

我需要将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 }, 
  ]
[
{“事件日期”:“,
“事件\u时间戳”:“”,
“事件名称”:“,
“事件参数”:[
{“键”:“,
“值”:{“字符串值”:“”,
“国际价值”:,
“浮点数”:,
“双_值”:},
{“键”:“,
“值”:{“字符串值”:“”,
“国际价值”:,
“浮点数”:,
“双_值”:},
{“键”:“,
“值”:{“字符串值”:“”,
“国际价值”:,
“浮点数”:,
“双_值”:},
{“键”:“,
“值”:{“字符串值”:“”,
“国际价值”:,
“浮点数”:,
“双_值”:},
{“键”:“,
“值”:{“字符串值”:“”,
“国际价值”:,
“浮点数”:,
“双_值”:},
{“键”:“,
“值”:{“字符串值”:“”,
“国际价值”:,
“浮点数”:,
“双_值”:}
],
“事件\u上一个\u时间戳”:,
+(更多用户信息的键值对等)
},
{event2},
{event3},
]
event2和event3表示有一个事件列表,每个事件都包含代码段第一部分中描述的嵌套数组。我想创建一个数据湖类型的解决方案,使用平面CSV文件和Power BI从那里读取数据。我开始尝试将数据展平为CSV,以便Power BI可以轻松解析数据,但这导致数据文件的大小成倍增加。Power BI可以接收JSON,但嵌套JSON有问题,因为每个嵌套数组都需要打开

你认为这里的方法应该是什么?我可以使用所有Microsoft/Azure生态系统工具

我可以想到以下几种选择:

  • 坚持使用巨大的平面CSV文件,Power BI速度非常慢,文件占用大量空间
  • 在Power BI中嵌套JSON,使用一些Power查询代码自动取消测试数据
  • 将数据写入SQL数据库,在那里我可以根据事件ID在表之间创建连接

  • 你们有什么办法吗?如果我的描述没有涵盖任何内容,请告诉我,我会尝试添加内容。谢谢大家!

    有趣的是,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_事件中,
    事件_参数
    用户_属性
    是数组,我想将
    事件_参数
    取消到行中,
    用户_属性
    取消到列中