【Hive】(二十四)谈谈 Hive 开发过程中需要注意的二三事?

简介: 【Hive】(二十四)谈谈 Hive 开发过程中需要注意的二三事?

文章目录


一、前言


二、建表规范


2.1 LZO标准建表模板如下所示

2.2 ORC标准建表模板如下所示


三、字段类型使用 Hive 标准字段


四、数据类型标准


五、HDFS 目录规范


5.1 表的 HDFS 目录与分区层级的名称和顺序保持一致

5.2 表的 HDFS 目录中不能有特殊字符(只能包含字母、数字、=、-)


一、前言


主要讲讲一些 Hive 开发过程中需要注意的一些规范,大家可要注意┗|`O′|┛ 嗷~~ 🚢


二、建表规范


Hive 分为内部表和外部表,一般情况,只允许建外部表,不建议使用内部表 ❗


2.1 LZO标准建表模板如下所示

create EXTERNAL table app_sku_pur_attrib (
stat_dt string comment '统计日期' ,
ord_item_units double comment '下单商品件数',
valid_ord_qtty bigint comment '有效订单量' )
comment '商品采销属性'
PARTITIONED BY ( dt string )
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES ( 'field.delim'='\t' )
STORED AS INPUTFORMAT "com.hadoop.mapred.DeprecatedLzoTextInputFormat"
OUTPUTFORMAT "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat";
##建表时需要加上表注释、字段注释;


2.2 ORC标准建表模板如下所示

create external table app_jdw_jmart_zbinfo_test_test(
capacity_all float comment '数据总容量PB',
deal_data_dt float comment '日处理数据量PB',
add_data_dt float comment '日新增数据量PB',
add_job_dt float comment '日运行job数W',
machine_num int comment '平台总机器数',
corejob_avgtime string comment '核心任务平均运行时长')
PARTITIONED BY ( week_nm string,dt string )
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' (列分隔符)
NULL DEFINED AS "" (空值展示为"")
STORED AS ORC (存储格式为ORC,不可少)
LOCATION '*************' (指定表的location)
tblproperties ('orc.compress'='SNAPPY'); (ORC压缩格式为SNAPPY)


三、字段类型使用 Hive 标准字段


**原生类型:**
    TINYINT
    SMALLINT
    INT
    BIGINT
    BOOLEAN
    FLOAT
    DOUBLE
    STRING
    BINARY (Hive 0.8.0以上才可用)
    TIMESTAMP (Hive 0.8.0以上才可用)
**复合类型:**
    arrays: ARRAY<data_type>
    maps: MAP<primitive_type, data_type>
    structs: STRUCT<col_name : data_type [COMMENT col_comment], ...>
    union: UNIONTYPE<data_type, data_type, ...>


四、数据类型标准


为了提高通用性,代码字段尽量不用数字型,建议多采用STRING类型;


日期类型字段由于格式多样,造成在信息加工处理过程中的格式转换复杂且易出错,因此对日期类型字段统一制定如下规范


以 “2013-01-01 13:35:23.71” 为例说明日期字段类型规范内容。


五、HDFS 目录规范


5.1 表的 HDFS 目录与分区层级的名称和顺序保持一致


正确:

表分区dt=update
Hdfs目录:hdfs://ns3/user/jd_ad/chenyanan/source_id_base64/dt=update
表分区:dt,dp
Hdfs目录:
hdfs://ns3/user/jd_ad/ad.db/ad_ads_swc_request_log/dt=20161104/dp=03


错误:

表分区dt=update
hdfs目录:hdfs://ns3/user/jd_ad/chenyanan/source_id_base64/update
表分区:dt,dp
Hdfs目录:
/
hdfs://ns3/user/jd_ad/ad.db/ad_ads_swc_request_log/2016110403


5.2 表的 HDFS 目录中不能有特殊字符(只能包含字母、数字、=、-)


错误:hdfs://ns3/user/jd_ad/ad.db/ad_base_model_click/dt=%22%22%22+ ht.data_day_str + %22%22%22,包含%符号


正确:hdfs://ns3/user/jd_ad/ad.db/ad_base_model_click/dt=222222

目录
相关文章
|
15天前
|
SQL JavaScript 前端开发
用Java来开发Hive应用
用Java来开发Hive应用
23 7
|
15天前
|
SQL JavaScript 前端开发
用Java、Python来开发Hive应用
用Java、Python来开发Hive应用
19 6
|
4月前
|
存储 SQL JSON
大数据开发岗大厂面试30天冲刺 - 日积月累,每日五题【Day02】——Hive2
大数据开发岗大厂面试30天冲刺 - 日积月累,每日五题【Day02】——Hive2
56 0
|
4月前
|
SQL 存储 大数据
大数据开发岗面试30天冲刺 - 日积月累,每日五题【Day01】——Hive1
大数据开发岗面试30天冲刺 - 日积月累,每日五题【Day01】——Hive1
71 0
|
SQL 分布式计算 运维
【大数据开发运维解决方案】Sqoop增量同步mysql/oracle数据到hive(merge-key/append)测试文档
上一篇文章介绍了sqoop全量同步数据到hive, 本片文章将通过实验详细介绍如何增量同步数据到hive,以及sqoop job与crontab定时结合无密码登录的增量同步实现方法。
【大数据开发运维解决方案】Sqoop增量同步mysql/oracle数据到hive(merge-key/append)测试文档
|
SQL 运维 分布式计算
【大数据开发运维解决方案】Sqoop全量同步mysql/Oracle数据到hive
前面文章写了如何部署一套伪分布式的handoop+hive+hbase+kylin环境,也介绍了如何在这个搭建好的伪分布式环境安装配置sqoop工具以及安装完成功后简单的使用过程中出现的错误及解决办法, 接下来本篇文章详细介绍一下使用sqoop全量同步oracle/mysql数据到hive,这里实验采用oracle数据库为例,
【大数据开发运维解决方案】Sqoop全量同步mysql/Oracle数据到hive
|
SQL 分布式计算 运维
【大数据开发运维解决方案】sqoop增量导入oracle/mysql数据到hive时时间字段为null处理
前面几篇文章详细介绍了sqoop全量增量导入数据到hive,大家可以看到我导入的数据如果有时间字段的话我都是在hive指定成了string类型,虽然这样可以处理掉时间字段在hive为空的问题,但是在kylin创建增量cube时需要指定一个时间字段来做增量,所以上面那种方式不行,这里的处理方式为把string改成timestamp类型,看实验:
【大数据开发运维解决方案】sqoop增量导入oracle/mysql数据到hive时时间字段为null处理
|
SQL 运维 Oracle
【大数据开发运维解决方案】Oracle通过sqoop同步数据到hive
将关系型数据库ORACLE的数据导入到HDFS中,可以通过Sqoop、OGG来实现,相比较ORACLE GOLDENGATE,Sqoop不仅不需要复杂的安装配置,而且传输效率很高,同时也能实现增量数据同步。 本文档将在以上两个文章的基础上操作,是对第二篇文章环境的一个简单使用测试,使用过程中出现的错误亦可以验证暴漏第二篇文章安装的问题出现的错误,至于sqoop增量同步到hive请看本人在这篇文章之后写的测试文档。
【大数据开发运维解决方案】Oracle通过sqoop同步数据到hive
|
SQL 运维 Oracle
【大数据开发运维解决方案】Sqoop增量同步Oracle数据到hive:merge-key再次详解
这篇文章是基于上面连接的文章继续做的拓展,上篇文章结尾说了如果一个表很大。我第一次初始化一部分最新的数据到hive表,如果没初始化进来的历史数据今天发生了变更,那merge-key的增量方式会不会报错呢?之所以会提出这个问题,是因为笔者真的有这个测试需求,接下来先对oracle端的库表数据做下修改,来模拟这种场景。
【大数据开发运维解决方案】Sqoop增量同步Oracle数据到hive:merge-key再次详解
|
SQL 分布式计算 Java
hive中开发、使用udf
我们在使用hive时难免会碰到hive的函数解决不了的操作,这时我们就可以开发UDF函数去解决复杂的问题
444 0
hive中开发、使用udf