公司网站代做,一个公司网站后台怎么做,网站调用字体库,网站建设有哪些主题目录 Hive的物种表结构特性 一、内部表
建表
使用场景 二、外部表
建表:关键词【EXTERNAL】
场景#xff1a;
外部表与内部表可互相转换 三、临时表
建表 临时表横向对比编辑
四、分区表
建表#xff1a;关键字【PARTITIONED BY】
场景#xff1a;
五、分桶表
…目录 Hive的物种表结构特性 一、内部表
建表
使用场景 二、外部表
建表:关键词【EXTERNAL】
场景
外部表与内部表可互相转换 三、临时表
建表 临时表横向对比编辑
四、分区表
建表关键字【PARTITIONED BY】
场景
五、分桶表
背景
建表 分区表和分桶表结合使用
Hive的物种表结构特性
内部表当删除内部表时HDFS上的数据以及元数据都会被删除外部表当删除外部表时HDFS上的数据不会被删除但是元数据会被删除临时表在当前会话期间存在会话结束时自动消失分区表将一批数据按照一定的字段或者关键字为多个目录进行存储分桶表将一批数据按照指定好的字段和桶的数量对指定字段的数据取模运算分成不同的桶进行存储方便随机取样以及join等操作。 一、内部表
建表
--方式一正式建表
CREATE TABLE hdw_dim.dim_city_info_df(city_id STRING COMMENT 城市id ,city_name STRING COMMENT 城市名称 ,provice_id STRING COMMENT 省份id ,provice_name STRING COMMENT 省份名称
)
COMMENT 城市信息维表
PARTITIONED BY ( pdate STRING COMMENT 天分区
)
STORED AS orc
TBLPROPERTIES (creator210XXXXX, orc.compressSNAPPY,ttl 30
);
--方式二仿照现有的表建表
create table hdw_dim.dim_city_info_tmp like hdw_dim.dim_city_info_df;
--方式三根据查询结果自动创建表并且插入数据
create table dw_dim.dim_city_info_tmp1 as dw_dim.dim_city_info_tmp
使用场景
ETL数据清理时用内部表做中间表清理时HDFS上的文件同步删除在误删的情况下数据易回溯用内部表统计分析时不涉及数据共享数据的情况需要对元数据和表数据进行管理时。 二、外部表
建表:关键词【EXTERNAL】
CREATE EXTERNAL TABLE hdw_dim.dim_city_info_df(city_id STRING COMMENT 城市id ,city_name STRING COMMENT 城市名称 ,provice_id STRING COMMENT 省份id ,provice_name STRING COMMENT 省份名称
)
COMMENT 城市信息维表
PARTITIONED BY ( pdate STRING COMMENT 天分区
)
STORED AS orc
TBLPROPERTIES (creator210XXXXX, orc.compressSNAPPY,ttl 30
);
场景
建议在ods层使用外部表
外部表不会加载数据到Hive的默认仓库减少数据的传输同时还能和其他外部表共享数据使用外部表Hive不会修改源数据不用担心数据损坏或者丢失Hive在删除外部表时删除的只是表结构而不会删除数据
在对于恢复巫山数据有困难的情况比如实时采集的数据
外部表与内部表可互相转换
--查看表类型
desc formatted address--将内部表修改为外部表
alter table address set tblproperties(EXTERNAL TRUE);--将外部表修改为内部表
alter table address set tblproperties(EXTERNAL FALSE); 三、临时表
建表
--方式一TEMPORARY
create temporary table hdw_dim.dim_city_info(city_id STRING COMMENT 城市id ,city_name STRING COMMENT 城市名称 ,provice_id STRING COMMENT 省份id ,provice_name STRING COMMENT 省份名称
)
COMMENT 城市信息维表
--方式二with as
with t1 as
(select *from hdw_dim.dim_city_infowhere provice_name 山东省
) ,
t2 as
(select *from hdw_dim.dim_city_infowhere provice_name 北京市
)
--方式三真实建表用完手动删除
create table hdw_tmp.tmp_city_info as
select *
from hdw_dim.dim_city_info;
drop table if exists hdw_tmp.tmp_city_info临时表横向对比
四、分区表
分区是HDFS上表目录的子目录数据按照分区存储在子目录中。如果查询的where子句中包含分区条件则直接从该分区查找而不是扫描整个目录合理的分区可以极大的提高查询速度和性能。
建表关键字【PARTITIONED BY】
CREATE EXTERNAL TABLE emp_partition
(
empno INT,
ename STRING,
job STRING,
mgr INT,
hiredate TIMESTAMP,
sal DECIMAL(7,2),
comm DECIMAL(7,2)
)
PARTITIONED BY (deptno INT) -- 按照部门编号进行分区
ROW FORMAT DELIMITED FIELDS TERMINATED BY \t
LOCATION /hive/emp_partition;
场景
在数据仓库管理大规模数据集的时候都需要进行分区比如将日志文件按天进行分区从而保证数据细粒度的划分使得查询性能得到提升。
查看分区目录
hadoop fs -ls hdfs://hadoop001:8020/hive/emp_partition/
五、分桶表
背景
分区提供了一个隔离数据和优化查询的可行性方案但是并非所有的数据集都可以形成合理的分区分区的数量也不是越多越好过多的分区条件可能导致很多分区上没有数据。同时hive会限制动态分区可以创建最大的分区数用来避免过多的文件对文件系统产生负担。 鉴于以上原因Hive还提供了一种更细粒度的数据拆分方案分桶表bucket Table。分桶表会将指定的列的值进行哈希散列并对bucket桶数量取余然后存储到对应的bucket中。
建表
CREATE EXTERNAL TABLE emp_bucket
(
empno INT,
ename STRING,
job STRING,
mgr INT,
hiredate TIMESTAMP,
sal DECIMAL(7,2),
comm DECIMAL(7,2),
deptno INT
)
CLUSTERED BY(empno)
SORTED BY(empno ASC) INTO 4 BUCKETS --按照员工编号散列到四个 bucket 中
ROW FORMAT DELIMITED FIELDS TERMINATED BY \t
LOCATION /hive/emp_bucket; 分区表和分桶表结合使用
分区表和分桶表的本质都是将数据按照不同粒度进行拆分从而使得在查询的时候不必扫描全表只需要扫描对应的分区或分桶从而提升查询的效率。两者可以结合使用从而保证数据在不同粒度上都能得到合理的拆分官方示例如下
CREATE TABLE page_view_bucketed
(
viewTime INT,
userid BIGINT,
page_url STRING,
referrer_url STRING,
ip STRING
)
PARTITIONED BY(dt STRING)
CLUSTERED BY(userid)
SORTED BY(viewTime) INTO 32 BUCKETS ROW FORMAT DELIMITED
FIELDS TERMINATED BY \001
COLLECTION ITEMS TERMINATED BY \002
MAP KEYS TERMINATED BY \003
STORED AS SEQUENCEFILE;