现在要用hive分析数据,同时要保证这些数并圆据目录不能改变,就需要hive用外表的方式与这些数据氏蔽灶进行关歼扮联。
示例:
但是,看下文件列表
一共108个待添加的目录,这样一个个添加太累人,有没有批量添加的方法呢?
Hive有个MSCK命令,可以扫描数据分区目录,修复元信息,目录与元信息不一致时,能自动更新。
但是,数据目录必须是Hive习惯路径格式:
同时,建表时指定LOCATION为分区目录的父目录:
这时,用命令
即可自动把所有的数据按dt分区,添加到gateway_analysis中。
由于我们的目录格式不符合,只能用ADD PARTITION的方式了。
为减少工作量,写了个shell脚本,自动添加 /data/logs/gateway 目录下所有的分区目录到gateway_analysis表中:
一、Hive only:加载分区数据的快捷方法
如果指定的分区不存在Hive将创建新的分区
这个命令将:
(1)如果不存在的话添加分区到表的元数据
(2)如果存在的话,创建子目录:/user/hive/warehouse/call_logs/call_date=2014-10-02
(3)移动消拿HDFS文件call-20141002.log到分区子目录
二、查看、添加和移除分区
(1)查看当前表逗郑分区
(2)使用ALTER TABLE添加或删除分区
三、 从已存在的分区目录创建分区
(1)HDFS的分区目录可以在Hive或Impala之外进行创建和数据,比如:通过Spark或MapReduce应用
(2) Hive中使用MSCK REPAIR TABLE命令来为已存在的表创建分区
四、什么时候使用分区
下列情况使用分区
(1)读取整个数据集需要花费很长时间
(2)查询几乎只对分区字段进行过滤
(3)分区列有合理数量的不同的值
(4)数据生成或ETL过程是按文件或目录名来分段数据的
(5)分区列值不在数据本身
五、什么时候不使用分区
(1)避免把数据分区到很多小数据文件
– 不要对有太多惟一值的列进行分区
(2)注意:当使用动态分区时容易发生
– 比如:按照fname来分区客户表会产生上千个分区
六、 Hive进行分区
在旧的Hive版本中,动态分区默认没有启用 ,通过设置这两个属性启用:
但是在hive分区中我们应该注意一些问题,比如:
(1)注意:Beeline设置的Hive变量只在当前会话有效,系统管理员可以设置永久生效
(2)注意:如果分区列有很多唯一值,将会创建很多分区
另外,我们可以给Hive配置参数来限制分区数 :
(1) hive.exec.max.dynamic.partitions.pernode
查询在某个节点上可以创建的最大动态分区数,默认100
(2) hive.exec.max.dynamic.partitions
一个HiveQL语句可以创建的最大动态分区数拿指搭 ,默认1000
(3)hive.exec.max.created.files
一个查询总共可以创建的最大动态分区数,默认1000000
1、 数据量表比于2GB面2GB文件于32位os限另外备份间2、 包括历史数据表比新数据放入新区典型例:历史表前月份数据修改其月份能read-only
ORACLE支持区:tables, indexes on tables, materialized views, and indexes on materialized views
区SQLDML透明(应此凯用程序必知道已经作区)DDL同区进行管理
同区间必须相同逻辑属性皮举比共同表名列名数据类型约束
同物理属性比pctfree, pctused, and tablespaces.
区独立性:即使某些区用其区仍用
64000区具LONG or LONG RAW列表CLOB or BLOB列表
用to_date函数比:
alter session set nls_date_format='mm/dd/'
CREATE TABLE sales_range
(salesman_id NUMBER(5),
salesman_name VARCHAR2(30),
sales_amount NUMBER(10),
sales_date DATE)
PARTITION BY RANGE(sales_date)
(
PARTITION sales_jan2000 VALUES LESS THAN('02/01/2000'),
PARTITION sales_feb2000 VALUES LESS THAN('03/01/2000'),
PARTITION sales_mar2000 VALUES LESS THAN('04/01/2000'),
PARTITION sales_apr2000 VALUES LESS THAN('05/01/2000')
)
Partition Key:16columns,nullable
非区表区或者非区索引
燃扒碧 区表区或者非区索引
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)