最近,一直在写 hive
1)create_table LZO格式
1. 建议:shell名称为hive表名,采用此模板仅需二步 a) 编辑字段信息;b) 指定分区信息;
2. 运行shell,请使用全路径,如 sh/data3/dmp_online/dmp/dw/mds/purpow/create_table/mds_dm_purpow_source_his.sh;
3. dm工作组时,${table_level}应修改为${project_name};
shell名称如果不是hive表名,请手工指定变量${table_name}、${table_level}。
#获取当前工作组(dw或dm)
echo ${0} | grep -q "/dmp/dm/"
if [ $? -eq 0 ]
then
work_group="dm"
else
work_group="dw"
fi
#加载配置文件
cd $(dirname `ls -l $0 |awk '{print $NF;}'`)/..
shellpath=`pwd|awk -F ${work_group} '{print $1}'`
cd ${shellpath}
. common/conf/.hive_config.sh
#table_level=mds
#table_name=mds_dm_purpow_his
#创建表信息
$HIVE<< EOF
use ${hive_db};
DROP TABLE ${table_name};
CREATE EXTERNAL TABLE ${table_name}
(
cookie string comment '用户COOKIE',
price int comment '用户对应车型价格',
source int comment '来源'
)
PARTITIONED BY(dt STRING, type STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'
STORED AS INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION '${HDFS_DIR}/${table_level}/${table_name}';
ALTER TABLE ${table_name} SET SERDEPROPERTIES('serialization.null.format'='');
EOF
create_tableRCFile格式:
STORED AS RCFILE
create_tableTXT格式:STORED AS TEXTFILE
附:关于 hive null的问题:http://blog.csdn.net/yfkiss/article/details/7943053
hive中NULL默认是以'\N'表示的;可以通过ALTER TABLE table_name SET SERDEPROPERTIES('serialization.null.format' = '');修改空值描述符
hive中分区字段如果为NULL需注意
使用dynamic partition,如果分区字段为NULL,数据会放到一个特殊的分区,这个分区由参数“hive.exec.default.partition.name”控制,默认为“__HIVE_DEFAULT_PARTITION__”。