我需要帮助从json中通过配置单元查询检索子数组

xdnvmnnf  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(654)

我有以下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
        }]
    }]
}

我要检索\u id值以及activitycountedcollection中的任何分数值。有些医生有分数,有些没有。
假设我的结果表是这样的:

_ID,
  Lesson,
  DateTime,
  NumPossible,
  NumCorrect

我可以通过创建下表并用所说的json加载它来检索作为字符串的scores数组。

CREATE EXTERNAL TABLE IF NOT EXISTS $ActivityCounted (
      id string,
      ActivityCountedcollection array<struct<
        Scores:array<string>
        >
      >
    )

但是我想从scores数组中检索实际字段。我曾尝试将分数作为字符串加载到一个表中,然后再次分解它们,但我相信,由于它不知道它们是单独的字段,并且位于字符串字段中,因此无法检索它们。因此,我尝试重新创建表以包含子数组。

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
          > >
        >
      >
    )

但这也行不通。
我有另一个例子,它不是一个复杂的字段数组,我能够将它提取到一个表中,将数组粘贴到一个表中,然后再次分解该表,并提取单个值。但要再次爆炸并从数组中提取多个字段,我很困惑。

kuuvgm7e

kuuvgm7e1#

我已确定生成此请求中的结果所需的代码

相关问题