`

HIVE 第八章 schema

阅读更多

 

 

schema设计

hive pattern && hive anti-pattern

 

1.Table by day 按照天分割数据,在relation中,这个参数不推荐,在hive中使用

create table supply(id int,part string,quantity int) partitioned by (int day)

alter table supply add partition (day=20120102)

partition的负面影响:

1.namenode limition

但是partition产生的子目录,子文件都会保存在hdfs中,namenode会存在内存中,所以这得负面效果是namenode的filesystem的容量上限(hadoop has this upper limit on the total number of file,mapr and amazon s3 don't have this limitation)

2.一个job分解成几个task,每个task是一个jvm实例,每一个file对应一个独立的task,每个task是jvm中独立的一个实例(进程),过多的实例会给jvm压力(start up and tear down),这使得计算速度降低

因此不能有太多partition,每个文件要尽可能的大

一个好的table by day的设计,是设计出相似大小的数据在不同的时间间断,时间间断可以适当增大。同时保证每个file大于filesystem block size。目的是让partition足够的大。另一种方法,是用多维度的partition分解数据。

 

2.unique keys and normalization 主键,格式化数据

关系数据库最爱用地策略,但是在hive中没有这种概念。因为hive可以存储denormalized data非格式化的数据,如array,map,struct。这样可以避免one-to-many的关联关系,加快了io速度。但是也pay the penalty of denormalization,比如数据复制,数据不一致的概率

 

3.making multiple passes over the same data 同数据源的操作优化

insert overwrite table sales

select * from history where action='purchased';

insert overwrite table credits

select * from history where action='returned';

 

from history

insert overwrite sales select * where action='purchased'

insert overwrite credits select * where action = 'returned'

 

 

4.the case for partitioning every table

为了避免job fail而使得数据被删除,在insert数据的时候可以使用table pardae table1 partition(day=20120102).但是需要删除这个中间换转者partition

 

5.bucketing table data storage

当table没有明显的partition特征时,或是减轻filesystem的负担,可以使用bucketing,他的优点是不会随着增加数据使得文件个数变动,而且对于取样sample是很容易的,对于一些joins操作也比较便利。

create table weblog(user_id int,url string,source_ip string) partition by (dt string) clustered by (user_id) into 96 buckets;

为了生成正确个数的reducer对应hash出得bucket

在查询的时候设置 set hive.enforce.bucketing=true;

from raw_logs或是设置reduce数直接等于bucket数set mapred.reduce.tasks=96

insert overwrite table weblog partition(dt='2009-02-25') select user_id,url,source_ip where dt='2009-02-25'

 

6.adding colums to a table

hive是没有格式化的数据仓库,随着数据需求可以增加一列,数据少于期待列数,则填补null,数据多于,则舍弃。

create table weblogs(version long,url string) partitioned by (hit_data int) row format delimited fields terminated by '\t'

加载数据,可以用int补上缺少的数据

load data local inpath 'log1.txt' int weblogs partition(20110101)

 

7.(almost)always use compression

 

 

分享到:
评论

相关推荐

    hive-json-schema最新源代码

    hive-json-schema最新源代码hive-json-schema最新源代码hive-json-schema最新源代码hive-json-schema最新源代码hive-json-schema最新源代码hive-json-schema最新源代码hive-json-schema最新源代码hive-json-schema...

    《Hive数据仓库案例教程》教学课件 第5章 Hive数据操作.pdf

    《Hive数据仓库案例教程》教学课件 第5章 Hive数据操作.pdf《Hive数据仓库案例教程》教学课件 第5章 Hive数据操作.pdf《Hive数据仓库案例教程》教学课件 第5章 Hive数据操作.pdf《Hive数据仓库案例教程》教学课件 第...

    python导出hive数据表的schema实例代码

    本文研究的主要问题是python语言导出hive数据表的schema,分享了实现代码,具体如下。 为了避免运营提出无穷无尽的查询需求,我们决定将有查询价值的数据从mysql导入hive中,让他们使用HUE这个开源工具进行查询。...

    Hive编程指南中文版

    第8章 HiveQL:索引 第9章 模式设计 第10章 调优 第11章 其他文件格式和压缩方法 第12章 开发 第13章 函数 第14章 Streaming 第15章 自定义Hive文件和记录格式 第16章 Hive的Thrift服务 第17章 存储处理程序和NoSQL ...

    大数据Hadoop第八章hive

    在大数据处理领域,Hadoop 和 Hive 是两个非常关键的组件。Hadoop 是一个开源框架,主要用于存储和处理大规模数据,而 Hive 则是构建在 Hadoop 上的数据仓库工具,它提供了 SQL 式的查询语言(HQL)来方便地对大数据...

    HIVE安装及详解

    "HIVE安装及详解" HIVE是一种基于Hadoop的数据仓库工具,主要用于处理和分析大规模数据。下面是关于HIVE的安装及详解。 HIVE基本概念 HIVE是什么?HIVE是一种数据仓库工具,主要用于处理和分析大规模数据。它将...

    hive客户端安装_hive客户端安装_hive_

    八、测试Hive 创建一个测试数据库和表,然后插入一些数据,验证Hive是否正常工作。例如: ``` CREATE DATABASE testdb; USE testdb; CREATE TABLE test_table (id INT, name STRING); LOAD DATA LOCAL INPATH '/path...

    hive metastore java api使用

    hive metastore是hive的元数据管理服务,实际应用中很多第三方框架需要访问metastore服务,如spark,impala等。同样hive metastore也提供了java接口。 使用 import org.apache.hadoop.hive.conf.HiveConf; import org...

    第6章:Hive性能优化及Hive3新特性1

    【Hive性能优化及Hive3新特性】 在大数据处理领域,Hive作为一个基于Hadoop的数据仓库工具,常用于大规模数据处理和分析。本章节主要探讨如何优化Hive的性能,以及Hive3引入的新特性。 1. **分区表与分桶表优化** ...

    hive学习和习题集

    (1)解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。 (2)编译器(Physical Plan):...

    Hive 对 Protobuf 序列化文件读取.zip

    2. **创建表结构**:定义一个Hive表,指定使用 Protobuf SerDe,并指定protobuf的schema。Hive表的创建语句通常会包含以下内容: ```sql CREATE TABLE my_table ( column1_type column1_name, column2_type ...

    Hive数据导入HBase的方法.docx

    首先,需要创建一个 Hive 表,关联到 HBase 表,并指定 Hive schema 到 HBase schema 的映射关系。例如: CREATE TABLE hive_hbase_table(key int, name String, age String) STORED BY 'org.apache.hadoop.hive....

    HIVE从入门到精通.pdf

    #### 八、Hive Schema - **Schema的作用**:定义表结构,包括列名、数据类型等信息。 - **查看Schema**:使用DESCRIBE命令查看表的Schema信息。 #### 九、Hive Join - **Join操作**:支持多种类型的JOIN操作,如...

    centos7中hive的安装和使用

    Users are required to manually migrate schema after Hive upgrade which ensures proper metastore schema migration. (Default) False: Warn if the version information stored in metastore doesn't match ...

    hive

    8. **与 BI 工具集成**:Hive 可以与商业智能(BI)工具,如 Tableau、QlikView 和 Power BI 等无缝集成,方便进行数据可视化和报表制作。 在实际应用中,Hive 常常与其他大数据组件一起使用,例如 HBase 提供实时...

    Hive驱动1.1.0.zip

    在大数据处理领域,Hive是一个基于Hadoop的数据仓库工具,它允许用户使用SQL(HQL,Hive Query Language)查询和管理存储在Hadoop分布式文件系统(HDFS)中的大量结构化数据。Hive 1.1.0是Hive的一个版本,提供了...

    Hive3.1.2编译源码

    使用hive3.1.2和spark3.0.0配置hive on spark的时候,发现官方下载的hive3.1.2和spark3.0.0不兼容,hive3.1.2对应的版本是spark2.3.0,而spark3.0.0对应的hadoop版本是hadoop2.6或hadoop2.7。 所以,如果想要使用高...

    Hive_JDBC.zip_hive java_hive jdbc_hive jdbc pom_java hive_maven连

    在大数据处理领域,Apache Hive是一个基于Hadoop的数据仓库工具,它允许用户使用SQL(HQL,Hive Query Language)查询存储在Hadoop集群中的大型数据集。Hive JDBC(Java Database Connectivity)是Hive提供的一种...

Global site tag (gtag.js) - Google Analytics