一站制造工业项目之DWD介绍及代码运用

DWD:明细数据层:存储ODS层进行ETL以后的数据

首先:101张表的数据已经存储在HDFS上了

其次建库:

create database if not exists one_make_ods;

申明分区:

alter table 表名 add partition if not exists
partition(key=value)

创建ODS层全量表:44张表

create external table one_make_ods_test.ciss_base_areas
comment '行政地理区域表'
PARTITIONED BY (dt string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
location '/data/dw/ods/one_make/full_imp/ciss4.ciss_base_areas'
TBLPROPERTIES
('avro.schema.url'='hdfs://bigdata.itcast.cn:9000/data/dw/ods/o
ne_make/avsc/CISS4_CISS_BASE_AREAS.avsc');

先建库后建表

获取表的信息:表的注释

                Oracle:表的信息
                从Oracle中获取表的注释

读取全量表表名

                动态获取表名:循环读取文件

获取表的文件:HDFS上AVRO文件的地址

/data/dw/ods/one_make/full_imp

获取表的Schema:HDFS上的Avro文件的Schema文件地址

/data/dw/ods/one_make/avsc 

疑问:

表名怎么获取?

tableNameList【full_list,incr_list】
full_list:全量表名的列表
incr_list:增量表名的列表

建表的语句是什么,哪些是动态变化的?

create external table 数据库名称.表名
comment '表的注释'
partitioned by
ROW FORMAT SERDE
 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
STORED AS INPUTFORMAT
 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT
 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
location '这张表在HDFS上的路径'
TBLPROPERTIES ('这张表的Schema文件在HDFS上的路径')

怎么获取表的注释?

从Oracle中获取:从系统表中获取某张表的信息和列的信息

select
   columnName, dataType, dataScale, dataPercision,
columnComment, tableComment
from
(
 select
     column_name columnName,
     data_type dataType,
     DATA_SCALE dataScale,
     DATA_PRECISION dataPercision,
     TABLE_NAME
 from all_tab_cols where 'CISS_CSP_WORKORDER' =
table_name) t1
 left join (
   select
       comments tableComment,TABLE_NAME
   from all_tab_comments WHERE 'CISS_CSP_WORKORDER' =
TABLE_NAME) t2
   on t1.TABLE_NAME = t2.TABLE_NAME
 left join (
   select comments columnComment, COLUMN_NAME
   from all_col_comments WHERE
TABLE_NAME='CISS_CSP_WORKORDER') t3
   on t1.columnName = t3.COLUMN_NAME;

全量表与增量表有什么区别?

区别1:表名不一样

full_table_list
incr_table_list

区别2:路径不一样
/data /dw /ods /one_make /full /Oracle库名.表名
/data /dw /ods /one_make /incr /Oracle库名.表名

如何实现自动化建表?
自动化创建全量表
获取全量表名
调用建表方法:数据库名称、表名、全量标记
通过Oracle工具类获取表的信息【表的名称、表的注释、字段信息等】
拼接建表语句
执行SQL语句
自动化创建增量表
获取增量表名
调用建表方法:数据库名称、表名、增量标记
通过Oracle工具类获取表的信息【表的名称、表的注释、字段信息等】
拼接建表语句
执行SQL语句

将ODS层的数据表直接加载到DWD层

insert into dwd partition (dt = '20210101')
select
*
from ods
where dt=20210101

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王小橙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值