https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-CollectionFunctions

--首先进行一些基础配置设置:

SET mapred.job.queue.name=queue3;

SET hbase.client.scanner.caching=5000;

SET hbase.zookeeper.quorum=datanode06,datanode07,datanode08;

SET zookeeper.znode.parent=/hbase;





--然后对hbase的表建立外部表:

CREATE EXTERNAL TABLE wizad_test_geely_20141017 (

rowkey string,

fixeddim_map map<STRING,STRING>,

social_map map<STRING,STRING>

) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,fixeddim:,social:")

TBLPROPERTIES ("hbase.table.name" = "wizad_mdm_task_geely_hk_20141017");









--查询时,需要用Lateral View语法将(map)值展开为一个新的虚拟表:

--lateral view首先为原始表的每行调用UDTF,UTDF会把一行拆分成一或者多行,lateral view再把结果组合,产生一个支持别名表的虚拟表。





SELECT social_key,count(DISTINCT rowkey) FROM wizad_test_geely_20141017

LATERAL VIEW explode(fixeddim_map) myTable1 AS fixeddim_key,fixeddim_value

LATERAL VIEW explode(social_map) myTable2 AS social_key,social_value

WHERE (social_key='sex_f' or social_key='sex_m') and (social_value>50)

GROUP BY social_key;













=========================================================================

CREATE EXTERNAL TABLE lxw2 

(

key string,

value map<STRING,STRING>



STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,fixeddim:")

TBLPROPERTIES ("hbase.table.name" = "wizad_mdm_task_geely_hk_20141014"); 

 





SELECT KEY,dim_name,dim_value FROM lxw2 

LATERAL VIEW explode(VALUE) myTable1 AS dim_name,dim_value

--WHERE KEY = '000000054153796'





























hive支持8个层级的分隔符,依次是\001,\002,\003...\008(HIVE nested ARRAY in MAP data type)

map嵌套使用

map的key分隔符指定

hive> explain

    > create table t3(foo int,bar MAP<STRING, MAP<STRING,STRING>>)

    > row format delimited fields terminated by '\t' 

    > collection items terminated by ','

    > MAP KEYS TERMINATED BY ':'

> STORED AS TEXTFILE;





map元素用分隔符\004(就是','),key通过分隔符\005(就是':')指示;

map只有一个元素数据:\tkey_out0:key_in01\005val_in01\004key_in02\005val_in02

实际结构:{"key_out0":{"key_in01":"val_in01","key_in02":"val_in02"}}





外层map两个元素:1\tkey_out0:key_in01\005val_in01\004key_in02\005val_in02,key_out1:key_in01\005val_in01\004key_in02\005val_in02

结构: {"key_out0":{"key_in01":"val_in01","key_in02":"val_in02"},"key_out1":{"key_in01":"val_in01","key_in02":"val_in02"}}









map的使用

1建表:

hive> CREATE TABLE t3 (foo STRING, bar MAP<STRING,INT>)

    > ROW FORMAT DELIMITED

    > FIELDS TERMINATED BY '/t'

    > COLLECTION ITEMS TERMINATED BY ','

    > MAP KEYS TERMINATED BY ':'

    > STORED AS TEXTFILE;

2,load本地数据:路径默认

LOAD DATA LOCAL INPATH 'test.txt' OVERWRITE INTO TABLE t3;

3使用:

select foo,bar['a'] from t3 where id='1'; --使用下标访问map





select foo,size(bar) from t3 where id='1'; #查看map长度





select ip,uid from t3 where dt='20130101'  where array_contains(map_keys(gameinfo),'wow');#查看map的key,找出有玩wow游戏的记录

更多操作参考 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-CollectionFunctions

hive的map类型处理的更多相关文章

  1. Hive内置数据类型

    Hive的内置数据类型可以分为两大类:(1).基础数据类型:(2).复杂数据类型.其中,基础数据类型包括:TINYINT,SMALLINT,INT,BIGINT,BOOLEAN,FLOAT,DOUBL ...

  2. Hive数据据类型 DDL DML

    Hive的基本数据类型 DDL DML: 基本数据类型 对于Hive而言String类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上它可以 ...

  3. Hive中集合类型

    Hive中集合类型 创建表,集合是以 - 分割的 数据文件 加载数据 查询数据 查询数组中第一个字段 再建一个表,使用map 查看数据文件 加载数据 查询数据 查询键值 创建表,struct类型 查看 ...

  4. Flex ActionScript版本的Map类型

    ActionScript中没有Map类型,因为Object就相当于Map了.Object的属性相当于key,值相当于value. 也就是说,没有必要有Map类型.但是,这样做,也会带来一些问题,造成不 ...

  5. zk框架中利用map类型传值来创建window,并且传值

    @Command @NotifyChange("accList") public void clear(@BindingParam("id") String a ...

  6. C++map类型

    map是键-值对的集合,可以理解为关联数组,可以使用键作为下标来获取一个值 本文地址:http://www.cnblogs.com/archimedes/p/cpp-map.html,转载请注明源地址 ...

  7. Hibernate执行原生SQL返回List<Map>类型结果集

    我是学java出身的,web是我主要一块: 在做项目的时候最让人别扭的就是hibernate查询大都是查询出List<T>(T指代对应实体类)类型 如果这时候我用的联合查询,那么返回都就是 ...

  8. javabean实体类对象转为Map类型对象的方法(转发)

    //将javabean实体类转为map类型,然后返回一个map类型的值 public static Map<String, Object> beanToMap(Object obj) { ...

  9. Play Framework常用标签list,set,如何遍历list、map类型数据

    最近一段时间的项目都是在Play这个框架上进行开发的,挺强大的,但不足之处也挺多的.今天分享下play中强大的标签,遍历list,map类型的数据的用法. 遍历单纯的list数据,例如:List< ...

随机推荐

  1. jQuery ajax中使用serialize()方法提交表单数据示例

    <form id="form"> 输入账号 :<input id="name" type="text" name=&quo ...

  2. javac编译原理

    javac编译器的作用就是将符合java语言规范的源代码转化成符合java虚拟机规范的java字节码 经历:词法分析器->语法分析器->语义分析器->编译字节码 四个过程生成字节码文 ...

  3. CRM客户关系管理系统(六)

    第六章.排序和搜索功能开发  6.1.排序功能开发 (1)kingadmin_tags.py @register.simple_tag def get_sorted_column(column,sor ...

  4. Node.js Buffer(缓冲区)

    JavaScript 语言自身只有字符串数据类型,没有二进制数据类型. 但在处理像TCP流或文件流时,必须使用到二进制数据.因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门 ...

  5. Python3 数字(Number)

    Python 解释器可以作为一个简单的计算器:您可以在解释器里输入一个表达式,它将输出表达式的值. 表达式的语法很直白: +, -, * 和/ 和在许多其它语言(如Pascal或C)里一样:括号可以用 ...

  6. 自定义View实现五子棋游戏

    成功的路上一点也不拥挤,因为坚持的人太少了. ---简书上看到的一句话 未来请假三天顺带加上十一回家结婚,不得不说真是太坑了,去年婚假还有10天,今年一下子缩水到了3天,只能赶着十一办事了. 最近还在 ...

  7. iOS 中的block异常

    转自:iOS 知识小集 我们在调用block时,如果这个block为nil,则程序会崩溃,报类似于EXC_BAD_ACCESS(code=1, address=0xc)异常[32位下的结果,如果是64 ...

  8. android 调试工具ADB命令详解

    adb是什么? adb的全称为Android Debug Bridge,就是起到调试桥的作用. 通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具. ...

  9. mysql 远程连接配置

    近期买了阿里云服务器,服务器 安装了mysql,需要远程操作mysql数据库,但是远程不配置的话,连接不上去的.需要配置 .具体的配置如下: 先看看my.cnf是否绑定了本机,如果绑定了地址就解绑吧. ...

  10. [nginx]统计文件下载是否完整思路(flask)

    有一个需求是统计文件是否被用户完整下载,因为是web应用,用js没有找到实现方案,于是搜索下nginx的实现方案,把简单的探索过程记录下. 实验一 最原始的思路,查看日志,下载了一个文件之后我们看日志 ...