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