表的存储路径为:${hive.metastore.warehouse.dir}/databasename.db/tablename/
可以使用desc formatted tablename;命令查看表的详细信息,其中包括了存储路径:
Location: hdfs://cdh5/hivedata/warehouse/hive.db/test
Hive中的表分为内部表(MANAGED_TABLE)和外部表(EXTERNAL_TABLE)。
内部表和外部表最大的区别
内部表DROP时候会删除内部表和删除HDFS上的数据;
外部表DROP时候会删除外部表但不会删除HDFS上的数据;
内部表适用场景:
Hive中间表、结果表、一般不需要从外部(如本地文件、HDFS上load数 据)的情况。
外部表适用场景:
源表,需要定期将外部数据映射到表中。
CREATE EXTERNAL TABLE test(
id INT,
ip STRING COMMENT '访问者IP',
avg_view_depth DECIMAL(5,1),
bounce_rate DECIMAL(6,5)
) COMMENT '测试'
PARTITIONED BY (day STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS textfile
LOCATION 'hdfs://cdh5/tmp/hive/;
关键字EXTERNAL:表示该表为外部表,如果不指定EXTERNAL关键字,则表示内部表
关键字COMMENT:为表和列添加注释
关键字PARTITIONED BY:表示该表为分区表,分区字段为day,类型为string
关键字ROW FORMAT DELIMITED
指定表的分隔符,通常后面要与以下关键字连用:
FIELDS TERMINATED BY ',' //指定每行中字段分隔符为逗号
LINES TERMINATED BY '\n' //指定行分隔符
COLLECTION ITEMS TERMINATED BY ',' //指定集合中元素之间的分隔符
MAP KEYS TERMINATED BY ':' //指定数据中Map类型的Key与Value之间的分隔符
关键字STORED AS:指定表在HDFS上的文件存储格式,可选的文件存储格式有:
TEXTFILE //文本,默认值
SEQUENCEFILE // 二进制序列文件
RCFILE //列式存储格式文件 Hive0.6以后开始支持
ORC //列式存储格式文件,比RCFILE有更高的压缩比和读写效率,Hive0.11以后开始支持
PARQUET //列出存储格式文件,Hive0.13以后开始支持
关键词LOCATION:指定表在HDFS上的存储位置。