hive支持的
数据类型很简单就INT(4 byte integer),BIGINT(8 byte integer),FLOAT(single precision),DOUBLE(double precision),BOOLEAN,STRING等原子类型,连日期时间类型也不支持,但通过to_date、unix_timestamp、date_diff、date_add、date_sub等函数就能完成mysql同样的时间日期复杂 *** 作。方法一:利用编辑器直接插入控制字符,以Vi为例。进入Vi:Shell
代码收藏代码$visupply-20110101.txt在Vi命令模式下,键入:setlist,设置控制字符可见,成功后Vi会立即显示一个行结束标志$。填入Hive表中需要的每列数据,比如我这里需要创建一个分区表:Hiveshell代码收藏代码hive(ch09)>createtablesupply(idint,partstring,quantityint)partitionedby(dayint)hive(ch09)>altertablesupplyaddpartition(day=20110101)hive(ch09)>altertablesupplyaddpartition(day=20110102)hive(ch09)>altertablesupplyaddpartition(day=20110103)可以看到一共需要三列数据,分别是id,part,quantity。在Vi中进入编辑模式,并填入:Vi代码收藏代码10part10100$我在这里是想输入10作为ID,part10作为part,100作为quantity,最后的$是行结束标志。然后移动光标到需要插入分隔符的地方,首先键入Ctrl+V,再键入字段分隔符Ctrl+A:Vi代码收藏代码10^Apart10100$依次插入其他分隔符,并完成编辑:Vi代码收藏代码10^Apart10^A100$11^Apart11^A90$12^Apart12^A110$13^Apart13^A80$这时候可以导入数据到HiveTable了:Hiveshell代码收藏代码hive(ch09)>loaddatalocalinpath'${env:HOME}/data/supply-20110103.txt'overwriteintotablesupply>partition(day='20110103')Copyingdatafromfile:/root/data/supply-20110103.txtCopyingfile:file:/root/data/supply-20110103.txtLoadingdatatotablech09.supplypartition(day=20110103)rmr:DEPRECATED:Pleaseuse'rm-r'instead.Moved:'hdfs://n8.example.com:8020/user/hive/warehouse/ch09.db/supply/day=20110103'totrashat:hdfs://n8.example.com:8020/user/root/.Trash/CurrentPartitionch09.supply{day=20110103}stats:[num_files:1,num_rows:0,total_size:54,raw_data_size:0]Tablech09.supplystats:[num_partitions:3,num_files:3,num_rows:0,total_size:147,raw_data_size:0]OKTimetaken:0.522seconds查看一下刚才load的数据,确保正确:Hiveshell代码收藏代码hive(ch09)>select*fromsupplywhereday='20110103'OKidpartquantityday10part101002011010311part11902011010312part121102011010313part138020110103Timetaken:0.229seconds可以看到数据完全正确,这里还可以看到,Hive自动把select*这样的 *** 作转换成文件系统 *** 作,没有生成任何MapReduceJob。方法二:自定义HiveTable的分隔符。Hiveshell代码收藏代码CREATETABLEsupply(idINT,partSTRING,quantityINT)PARTITIONEDBY(dayINT)ROWFORMATDELIMITEDFIELDSTERMINATEDBY'.'COLLECTIONITEMSTERMINATEDBY','MAPKEYSTERMINATEDBY'='STOREDASSEQUENCEFILE这样就可以避开控制字符。出自:/blog/1922887我们有一批日志数据存储在hdfs上,按天创建
目录,如2018-07-31的日志hdfs路径为:/data/logs/gateway/20180731。
现在要用hive分析数据,同时要保证这些数据目录不能改变,就需要hive用外表的方式与这些数据进行关联。
示例:
但是,看下文件列表
一共108个待添加的目录,这样一个个添加太累人,有没有批量添加的方法呢?
Hive有个MSCK命令,可以扫描数据分区目录,修复元信息,目录与元信息不一致时,能自动更新。
但是,数据目录必须是Hive习惯路径格式:
同时,建表时指定LOCATION为分区目录的父目录:
这时,用命令
即可自动把所有的数据按dt分区,添加到gateway_analysis中。
由于我们的目录格式不符合,只能用ADD PARTITION的方式了。
为减少工作量,写了个shell脚本,自动添加 /data/logs/gateway 目录下所有的分区目录到gateway_analysis表中:
评论列表(0条)