我需要帮助通过 HIVE 查询从 JSON 检索子数组
I need help retrieving sub arrays from JSON with a HIVE query
我有以下 JSON.
{
"_id": "00075602-f58d-49f5-8a82-9b5fb5582443",
"ActivityCountedCollection": [{
"Lesson": "98d66ab9-1ef4-4b61-a05d-857b3e07e0f8",
"DataSet": 1,
"DateTime": "2013-06-19T15:54:27.79+00:00",
"ElapsedSeconds": 0.0000
},
{
"Lesson": "Kindergarten - Play & Practice",
"DataSet": 0,
"DateTime": "2014-01-01T00:00:00",
"ElapsedSeconds": 0.0,
"Scores": [{
"DataSet": 11,
"Lesson": "c241ab4b-3d11-4aca-bb9b-a8a645c1e6ca",
"ActivityNode": "ef2d4aae-08ad-48eb-a2e3-0ab616ef2e9c",
"DateTime": "2013-07-01T15:31:11.81+00:00",
"NumPossible": 2,
"NumCorrect": 1,
"Mastered": false
},
{
"DataSet": 1,
"Lesson": "01d6691f-911f-45b5-b861-778c725b4d98",
"ActivityNode": "a2783eb1-873d-4ae7-bd58-6ab4bf48692c",
"DateTime": "2013-07-08T15:09:54.61+00:00",
"NumPossible": 5,
"NumCorrect": 5,
"Mastered": false
}]
}]
}
我想检索 _ID 值,以及 ActivityCountedCollection 中的所有得分值。有些文档有分数,有些没有。
所以假设我的结果 table 会像这样:
_ID,
Lesson,
DateTime,
NumPossible,
NumCorrect
我可以通过创建以下 table 并使用所述 json.
加载它来检索分数数组作为字符串
CREATE EXTERNAL TABLE IF NOT EXISTS $ActivityCounted (
id string,
ActivityCountedcollection array<struct<
Scores:array<string>
>
>
)
但我想从分数数组中检索实际字段。我试过将分数作为字符串加载到 table 中,然后再次展开它们,但相信由于它不知道它们是单独的字段,并且存在于字符串字段中,因此无法检索它们。
所以我尝试重新创建 table 以包含子数组。
CREATE EXTERNAL TABLE IF NOT EXISTS $ActivityCounted (
id string,
ActivityCountedcollection array<struct<
Scores:array<struct<
Skill:string,
Lesson:string,
DateTime:timestamp,
NumPossible:int,
NumCorrect:int,
Mastered:string
> >
>
>
)
但这也不行。
我有另一个例子,它不是一个复杂的字段数组,我能够将它提取到 table,将数组粘贴到 table,然后展开 [=31] =] 再次提取单个值。但是要再次爆炸并从数组中提取多个字段,我很难过。
我已确定生成此请求中的结果所需的代码
我有以下 JSON.
{
"_id": "00075602-f58d-49f5-8a82-9b5fb5582443",
"ActivityCountedCollection": [{
"Lesson": "98d66ab9-1ef4-4b61-a05d-857b3e07e0f8",
"DataSet": 1,
"DateTime": "2013-06-19T15:54:27.79+00:00",
"ElapsedSeconds": 0.0000
},
{
"Lesson": "Kindergarten - Play & Practice",
"DataSet": 0,
"DateTime": "2014-01-01T00:00:00",
"ElapsedSeconds": 0.0,
"Scores": [{
"DataSet": 11,
"Lesson": "c241ab4b-3d11-4aca-bb9b-a8a645c1e6ca",
"ActivityNode": "ef2d4aae-08ad-48eb-a2e3-0ab616ef2e9c",
"DateTime": "2013-07-01T15:31:11.81+00:00",
"NumPossible": 2,
"NumCorrect": 1,
"Mastered": false
},
{
"DataSet": 1,
"Lesson": "01d6691f-911f-45b5-b861-778c725b4d98",
"ActivityNode": "a2783eb1-873d-4ae7-bd58-6ab4bf48692c",
"DateTime": "2013-07-08T15:09:54.61+00:00",
"NumPossible": 5,
"NumCorrect": 5,
"Mastered": false
}]
}]
}
我想检索 _ID 值,以及 ActivityCountedCollection 中的所有得分值。有些文档有分数,有些没有。
所以假设我的结果 table 会像这样:
_ID,
Lesson,
DateTime,
NumPossible,
NumCorrect
我可以通过创建以下 table 并使用所述 json.
加载它来检索分数数组作为字符串 CREATE EXTERNAL TABLE IF NOT EXISTS $ActivityCounted (
id string,
ActivityCountedcollection array<struct<
Scores:array<string>
>
>
)
但我想从分数数组中检索实际字段。我试过将分数作为字符串加载到 table 中,然后再次展开它们,但相信由于它不知道它们是单独的字段,并且存在于字符串字段中,因此无法检索它们。 所以我尝试重新创建 table 以包含子数组。
CREATE EXTERNAL TABLE IF NOT EXISTS $ActivityCounted (
id string,
ActivityCountedcollection array<struct<
Scores:array<struct<
Skill:string,
Lesson:string,
DateTime:timestamp,
NumPossible:int,
NumCorrect:int,
Mastered:string
> >
>
>
)
但这也不行。
我有另一个例子,它不是一个复杂的字段数组,我能够将它提取到 table,将数组粘贴到 table,然后展开 [=31] =] 再次提取单个值。但是要再次爆炸并从数组中提取多个字段,我很难过。
我已确定生成此请求中的结果所需的代码