nic*_*ine 33 json hadoop hive amazon-emr emr
我想用一些JSON数据(嵌套)创建一个Hive表并在其上运行查询?这甚至可能吗?
我已经将JSON文件上传到S3并启动了一个EMR实例但是我不知道在hive控制台中输入什么来将JSON文件作为Hive表?
有没有人有一些示例命令让我开始,我找不到任何有用的谷歌......
Mik*_*ass 32
实际上没有必要使用JSON SerDe.这里有一篇很棒的博客文章(我不以任何方式与作者联系):
http://pkghosh.wordpress.com/2012/05/06/hive-plays-well-with-json/
其中概述了使用内置函数json_tuple在查询时解析json的策略(不是在表定义时):
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-json_tuple
基本上,您的表模式只是将每一行加载为单个"字符串"列,然后根据需要在每个查询的基础上提取相关的json字段.例如来自该博客帖子的此查询:
SELECT b.blogID, c.email FROM comments a LATERAL VIEW json_tuple(a.value, 'blogID', 'contact') b
AS blogID, contact LATERAL VIEW json_tuple(b.contact, 'email', 'website') c
AS email, website WHERE b.blogID='64FY4D0B28';
Run Code Online (Sandbox Code Playgroud)
在我谦逊的经历中,这已被证明更可靠(我遇到了处理JSON serdes的各种神秘问题,特别是对于嵌套对象).
see*_*ead 24
您需要使用JSON serde才能让Hive将您的JSON映射到表中的列.
一个很好的例子向您展示如何:
http://aws.amazon.com/articles/2855
不幸的是,提供的JSON serde不能很好地处理嵌套的JSON,所以你可能需要展平你的JSON才能使用它.
以下是文章中正确语法的示例:
create external table impressions (
requestBeginTime string, requestEndTime string, hostname string
)
partitioned by (
dt string
)
row format
serde 'com.amazon.elasticmapreduce.JsonSerde'
with serdeproperties (
'paths'='requestBeginTime, requestEndTime, hostname'
)
location 's3://my.bucket/' ;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
86588 次 |
| 最近记录: |