Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何使用QueryRecord从JSON对象提取字段_Sql_Json_Apache Nifi_Apache Calcite - Fatal编程技术网

Sql 如何使用QueryRecord从JSON对象提取字段

Sql 如何使用QueryRecord从JSON对象提取字段,sql,json,apache-nifi,apache-calcite,Sql,Json,Apache Nifi,Apache Calcite,我为这个问题挣扎了很长时间。我需要通过从输入JSON字段refs和跳过对象字段中获取数组(字段ref),使用QueryRecord创建一个新的JSON流文件,如下例所示: 输入JSON流文件 查询记录配置 JSONTreeReader设置为推断模式和JSONRecordSetWriter 选择名称、描述(数组[rpath(refs,//ref[*]))作为流文件的源 输出JSON(需要) 但有一个错误: 由于java.lang.ClassCastException:null的原因,QueryR

我为这个问题挣扎了很长时间。我需要通过从输入JSON字段refs跳过对象字段中获取数组(字段ref),使用QueryRecord创建一个新的JSON流文件,如下例所示:

输入JSON流文件 查询记录配置 JSONTreeReader设置为推断模式和JSONRecordSetWriter

选择名称、描述(数组[rpath(refs,//ref[*]))作为流文件的源
输出JSON(需要) 但有一个错误:
由于java.lang.ClassCastException:null的原因,
QueryRecord未能将模式为[“name”:“STRING”、“description”:“STRING”、“references”:“ARRAY[STRING]”的MapRecord[{references=[Ljava.lang.Object;@27fd935f,description=full1,name=name1}]写入JSON对象,请尝试以下方法,在您的情况下应该可以:

1) 完全阅读JSON字段(我用GenerateFlowFile processor模拟了您的示例)

2) 添加EvaluateJsonPath处理器,该处理器将在属性中放入2个头文件(名称、描述):

3) 添加SplitJson处理器,该处理器将按ref/ref/groups分割JSON(按“$.refs.ref”分割):

4) 添加ReplaceText processor,它将向拆分行添加标题字段(名称,desc)(将“[{]”值替换为“{”名称“${json.name}”,“desc”:“${json.desc}”和“):

5) 完成了:

在我的演示案例中的完整过程:


希望这有帮助。

解决方案!:使用JoltTransferMJSON通过Jolt规范转换JSON。规范。

谢谢!当然,这并不能解决使用sql查询的单个QueryRecord元素中的问题,但它会导致搜索其他解决方案。
{
    "name": "name1",
    "desc": "full1",
    "refs": {
        "ref": [
            {
                "source": "source1",
                "url": "url1"
            },
            {
                "source": "source2",
                "url": "url2"
            }
        ]
    }
}
{
    "name": "name1",
    "desc": "full1",
    "references": [
         {
             "source": "source1",
             "url": "url1"
         },
         {
             "source": "source2",
             "url": "url2"
         }
    ]
}