我在具有以下结构的json文件中在hive中创建一个表:
{
"id": "1",
"clave": "1",
"tipo_registro": "Planilla",
"creado_por": "ETL cargaInicialPlanilla",
"fecha_creacion": "2016-09-269T00:00:00.0Z",
"modificado_por": "ETL cargaInicialPlanilla",
"fecha_ultima_modificacion": "2016-09-269T00:00:00.0Z",
"oficina": "comun",
"valores": {
"P_ACTIVO": "1",
"P_AT_ACTIVO": "1",
"P_AT_DESCRIPCION": "Fecha de Emisión",
"P_AT_EDITABLE": "1",
"P_AT_IDTIPODATO": "5",
"P_AT_LARGO": "0",
"P_AT_REPETIBLE": "0",
"P_AT_TD_ACTIVO": "1",
"P_AT_TD_DESCRIPCION": "System.DateTime",
"P_AT_TD_VALOR": "System.DateTime",
"P_IDATRIBUTOM": "15",
"P_IDPLANILLAM": "1",
"P_IDRECAUDO": "11",
"P_OCULTO": "0",
"P_ORDEN": "1"
}
}
我把文件放在HDFS(/ user / hive / TestTable)中并用这个命令创建表:
CREATE EXTERNAL TABLE IF NOT EXISTS test
(
id STRING,
clave STRING,
tipo_registro STRING,
creado_por STRING,
fecha_creacion STRING,
modificado_por STRING,
fecha_ultima_modificacion STRING,
oficina STRING,
valor MAP<String, String>
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION '/user/hive/TestTable';
但是当我查询表时,我的valor或map字段始终为null。
我看到关于此的其他帖子,但是在大多数帖子中,总是使用struct而不是map,我需要使用map,因为该字段不是静态的,可能在其他文档中有不同的字段。
我会感激任何帮助,提前谢谢。
答案 0 :(得分:1)
你的Json有valores,但在你的hive表中你定义为valor,这就是它总是为null的原因,将它更改为你的hive表中的valores以匹配你的json属性名,它应该可以工作。