hive的map类型处理
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类型处理的更多相关文章
- Hive内置数据类型
Hive的内置数据类型可以分为两大类:(1).基础数据类型:(2).复杂数据类型.其中,基础数据类型包括:TINYINT,SMALLINT,INT,BIGINT,BOOLEAN,FLOAT,DOUBL ...
- Hive数据据类型 DDL DML
Hive的基本数据类型 DDL DML: 基本数据类型 对于Hive而言String类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上它可以 ...
- Hive中集合类型
Hive中集合类型 创建表,集合是以 - 分割的 数据文件 加载数据 查询数据 查询数组中第一个字段 再建一个表,使用map 查看数据文件 加载数据 查询数据 查询键值 创建表,struct类型 查看 ...
- Flex ActionScript版本的Map类型
ActionScript中没有Map类型,因为Object就相当于Map了.Object的属性相当于key,值相当于value. 也就是说,没有必要有Map类型.但是,这样做,也会带来一些问题,造成不 ...
- zk框架中利用map类型传值来创建window,并且传值
@Command @NotifyChange("accList") public void clear(@BindingParam("id") String a ...
- C++map类型
map是键-值对的集合,可以理解为关联数组,可以使用键作为下标来获取一个值 本文地址:http://www.cnblogs.com/archimedes/p/cpp-map.html,转载请注明源地址 ...
- Hibernate执行原生SQL返回List<Map>类型结果集
我是学java出身的,web是我主要一块: 在做项目的时候最让人别扭的就是hibernate查询大都是查询出List<T>(T指代对应实体类)类型 如果这时候我用的联合查询,那么返回都就是 ...
- javabean实体类对象转为Map类型对象的方法(转发)
//将javabean实体类转为map类型,然后返回一个map类型的值 public static Map<String, Object> beanToMap(Object obj) { ...
- Play Framework常用标签list,set,如何遍历list、map类型数据
最近一段时间的项目都是在Play这个框架上进行开发的,挺强大的,但不足之处也挺多的.今天分享下play中强大的标签,遍历list,map类型的数据的用法. 遍历单纯的list数据,例如:List< ...
随机推荐
- sqlserver 查询 inner join 同一表2次 只出一条查询结果
inner join T_MTN_MobileNumber k on 1=1 and k.hddm='01' inner join (select a.hdxx+','+b.hdxx as hdxx ...
- 初识RabbitMQ系列之三:.net 如何使用RabbitMQ
话不多说,直接上代码! 一:搭建一个解决方案框架:RabbitMQ_Demo 其中包含4个部分: 1:RabbitMQ 公用类库项目 2:一个生产者控制台项目 3:两个消费者控制台项目 项目结构如图: ...
- Microsoft SQL server2017初次安装与使用记录
Microsoft SQL server2017初次安装与使用记录 学校数据库课程以Microsoft SQL server为例, 由于老师给的软件版本和我的window10不兼容,选择官网的最新版2 ...
- Go 语言指向指针的指针
如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量. 当定义一个指向指针的指针变量时,第一个指针存放第二个指针的地址,第二个指针存放变量的地址: 指向指针的指针变量声 ...
- Docker常见仓库Ubuntu
Ubuntu 基本信息 Ubuntu 是流行的 Linux 发行版,其自带软件版本往往较新一些. 该仓库提供了 Ubuntu从12.04 ~ 14.10 各个版本的镜像. 使用方法 默认会启动一个最小 ...
- Docker常见仓库Nginx
Nginx 基本信息 Nginx 是开源的高效的 Web 服务器实现,支持 HTTP.HTTPS.SMTP.POP3.IMAP 等协议. 该仓库提供了 Nginx 1.0 ~ 1.7 各个版本的镜像. ...
- Android源码解析——LruCache
我认为在写涉及到数据结构或算法的实现类的源码解析博客时,不应该急于讲它的使用或马上展开对源码的解析,而是要先交待一下这个数据结构或算法的资料,了解它的设计,再从它的设计出发去讲如何实现,最后从实现的角 ...
- 利用git pull的勾子实现敏捷部署
监听端 例如nginx或Python,php,rails等后端 git --git-dir=~/op/.git --work-tree=~/op pull git hooks端 位于.git/hook ...
- JVM性能参数调优实践,不会执行Full GC,网站无停滞
原文来自:http://bbs.csdn.net/topics/310110257 本文只做整理记录,供个人学习. 1 JVM参数调优是个很头痛的问题,设置的不好,JVM不断执行Full GC,导致整 ...
- PHP学习(3)—在HTML中嵌入PHP
我们以一个提交订单和显示订单信息的例子为学习PHP的开始.这个例子包含两个文件.一个提交订单的html文件:orderform.html,一个显示订单信息的php文件:processorder.php ...