我正在尝试从源自Amazon DynamoDB的JSON文件中获取所有属性。现在我将文件发送到Amazon S3存储桶并使用Amazon Athena进行读取。这是来自JSON文件的示例
{
"Items": [
{
"payload": {
"phase": "T",
"tms_event": "2017-03-16 18:19:50",
"id_UM": 0,
"num_severity_level": 0,
"event_value": 1,
"int_status": 0
},
"deviceId": 6,
"tms_event": "2017-03-16 18:19:50"
}
]
}
我希望在不同的字段上获取deviceId,tms_event,phase,id_UM和event_value。这是我的表格,但它没有分隔字段,
CREATE EXTERNAL TABLE IF NOT EXISTS default.iot_table (
`Items` ARRAY<
STRUCT<
`payload`: STRUCT<`phase`: string, `tms_event`: string, `id_UM`: int, `num_severity_level`: int, `event_value`: int, `int_status`: int>,
`deviceId`: int,
`tms_event`: string
>
>
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '1'
) LOCATION 's3://iot-logging/'
TBLPROPERTIES ('has_encrypted_data'='false')
由于
答案 0 :(得分:1)
您描述的问题在于您正在执行的查询中。如果您只是运行app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
,则结果是组合的JSON。
要将元素选择为单个列,您需要单独选择它们:
public async Task<IActionResult> Profile(int? id)
{
if (id == null)
{
// Get the id
}
var profile = await _context.Profile
.SingleOrDefaultAsync(m => m.Id == id);
if (profile == null)
{
return NotFound();
}
return View(profile);
}
由于您的第一个元素是一个数组并且可以包含多个项目,因此需要交叉连接。