Hive+经纬度+数据导入ES
### Hive与Elasticsearch中的经纬度数据处理 #### 背景介绍 在大数据处理领域,Hive(Hadoop数据库)常被用于处理结构化数据,而Elasticsearch(ES)则以其强大的全文检索功能著称。在某些应用场景中,需要将Hive中的数据导入到Elasticsearch中进行更高效的数据检索或分析。本篇主要探讨如何解决在这一过程中遇到的关于地理坐标(经纬度)数据格式不匹配的问题。 #### 问题描述 在将Hive中的数据导入到Elasticsearch时,如果Hive表中存在一个表示地理坐标的字段(如`location`),且该字段的类型为`array<double>`,那么直接导入到Elasticsearch后可能会导致该坐标数据无法正常被识别和使用。具体表现为,在Elasticsearch中该坐标字段的类型为`geo_point`,但是其值却不符合`geo_point`字段的期望格式(即一个包含`lat`和`lon`属性的JSON对象),从而导致坐标数据无法正常使用。 #### 解决方案 为了解决这个问题,可以通过以下步骤来转换和导入数据: ##### 步骤1:在Hive中创建映射表 在Hive中创建一个新的表(映射表),该表专门用于存储将要导入到Elasticsearch中的数据。这里我们创建了一个名为`es_mapping.app_enterprise_business_tags_es1222`的外部表,其中包含了与Elasticsearch对应的字段类型。 ```sql CREATE EXTERNAL TABLE `es_mapping.app_enterprise_business_tags_es1222`( `id` string COMMENT '对应es中id', `pid` string COMMENT '主键', `location` map<string,double> COMMENT '经纬度坐标' ) ROW FORMAT SERDE 'org.elasticsearch.hadoop.hive.EsSerDe' STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler' WITH SERDEPROPERTIES ( 'serialization.format'='1' ) LOCATION 'hdfs://nameservice1/user/hive/warehouse/es_mapping/app_enterprise_business_tags_es1222' TBLPROPERTIES ( 'bucketing_version'='2', 'es.batch.write.retry.count'='6', 'es.batch.write.retry.wait'='60s', 'es.index.auto.create'='TRUE', 'es.index.number_of_replicas'='0', 'es.index.refresh_interval'='-1', 'es.mapping.names'='id:id,pid:pid,location:location', 'es.mapping.id'='pid', 'es.write.operation'='upsert', 'es.nodes'='http://192.168.****:9200', 'es.nodes.wan.only'='TRUE', 'es.net.http.auth.user' = 'elastic', 'es.net.http.auth.pass' = '****', 'es.resource'='company_v5' ); ``` 此表定义了`id`、`pid`以及`location`三个字段,其中`location`字段为`map<string,double>`类型,这将用于后续的转换操作。 ##### 步骤2:转换并插入数据 接下来,需要将原始Hive表中的数据进行转换,确保经纬度数据符合Elasticsearch的格式要求。具体转换逻辑如下: - 从原始表中选择需要的数据。 - 然后,通过`CASE`语句判断`location`字段是否为空。 - 如果非空,则使用`map`函数构建一个新的`location`字段,其中`lat`对应原数组中的第二个元素(索引为1),`lon`对应第一个元素(索引为0)。 - 将转换后的数据插入到之前创建的映射表中。 ```sql insert overwrite table es_mapping.app_enterprise_business_tags_es1222 select a.id, a.pid, (case when a.location is null then null else map('lat', a.location[1], 'lon', a.location[0]) end) as location from (select id, pid, location, ... -- 其他字段省略 from dw.app_enterprise_es where dt=default.maxPart('dw', 'app_enterprise_es')) a left join (select pid, booth_type, booth_area, latest_journal_sd, lates -- 其他字段省略 from some_other_table) b on a.pid = b.pid; ``` #### 总结 通过以上步骤,可以有效地解决Hive与Elasticsearch之间的数据格式不匹配问题,特别是在处理地理坐标数据时。这种方式不仅能够确保数据的准确性,还能提高数据处理的效率。此外,这种方法还可以扩展应用于其他类似的数据迁移场景中,为数据的跨系统传输提供了可靠的解决方案。




























- 粉丝: 766
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 物理层接口及其协议ppt课件市公开课金奖市赛课一等奖课件.pptx
- 前景广阔的中国移动互联网(1).docx
- 公用网络机房计算机的管理系统.docx
- 2023年3月试二级C语言笔试试卷及参考答案.doc
- 网编程教学专业知识讲座公开课一等奖优质课大赛微课获奖课件.pptx
- 北京交通大学2021年9月《城市轨道交通信息技术》作业考核试题及答案参考12.docx
- 三本院校计算机专业C语言程序设计课程教学改革与探索.docx
- 拥抱互联网时代心得体会.docx
- 亿吉尔水工概预算软件操作指南讲解材料.ppt
- 南开大学2021年9月《C语言程序设计》作业考核试题及答案参考14.docx
- 网络营销运营网站的四大方向.doc
- 51单片机学习(键盘接口)-2013512-(2)演示教学.ppt
- 数据库检索APS数据库课件教案资料.ppt
- 中级CAD绘图员考试试题八套试题附样图.doc
- 复合式永磁同步电动机设计及其CAD系统开发的开题报告.docx
- 大连理工大学2021年9月《电子商务(管理类)》作业考核试题及答案参考1.docx


