内部表:
默认数据格式为text(TEXTFILE):
CREATE TABLE `ds.ds_ree_t_result_tmp` (
`workno` int COMMENT '员工工号',
`employeename` string COMMENT '姓名',
`amount` string COMMENT '业绩',
`effectivedate` string COMMENT '生效时间',
`isleave` string COMMENT '是否离职',
`leavedate` string COMMENT '离职日期',
`tag` array<string> COMMENT '标签类型', --这里指定是个数组类型
`addtime` string COMMENT '订单生成时间'
);
数据格式为parquet:
CREATE TABLE `dws.test`(
`source` string COMMENT '来源',
`client_id` bigint COMMENT '客户id',
`client_name` string COMMENT '客户名称') stored as parquet;
外部表
如果数据已经存在HDFS的'/user/hadoop/warehouse/page_view'上了,如果想创建表,指向这个路径,就需要创建外部表:
CREATE EXTERNAL TABLE page_view(
viewTime INT,
userid BIGINT,
page_url STRING,
referrer_url STRING,
ip STRING COMMENT 'IP Address of the User',
country STRING COMMENT 'country of origination')
COMMENT 'This is the staging page view table'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\054'
STORED AS TEXTFILE
LOCATION '/user/hadoop/warehouse/page_view';
创建表,有指定EXTERNAL就是外部表,没有指定就是内部表,内部表在drop的时候会从HDFS上删除数据,而外部表不会删除。
外部表和内部表一样,都可以有分区,如果指定了分区,那外部表建了之后,还要修改表添加分区。
外部表如果有分区,还可以加载数据,覆盖分区数据,但是外部表删除分区,对应分区的数据不会从HDFS上删除,而内部表会删除分区数据。
外部表删除时,不会删除数据,这是与内部表的最大区别,一般80%企业都是 外部表。
指定位置 ,必须在hdfs之上:
自己先创建目录 :
文件如果 直接放到目录下面去,然后就可以直接查询出来,这样的方式是最快最省事的!
可以先创建表目录再放文件也可以。
分区表:
指定分区字段,以下示例是按月分区(可以多级分区也就是按多个字段分区):
加载数据: