数仓相关思考3

古城微笑少年丶 2023-01-03 04:44 251阅读 0赞

数仓相关思考3

1.ODS层表为什么要指定输入格式为com.hadoop.mapred.DeprecatedLzoTextInputFormat

表的输入格式和表中存储数据的格式相关,输入格式的作用是为select语言提供一个输入格式,以便于读取表中的数据!
ODS层表中存储的数据格式为 textfile ,但是使用了lzo压缩,为了可以正常读取和切片数据文件,必须设置为 DeprecatedLzoTextInputFormat!

2.ODS层表能否切片?为什么?

能否切片,主要取决于数据的存储格式!如果数据存储的是textfile,还要进一步判断文件的压缩格式是否支持切片!

  • textfile: 一般情况下,可切。
    如果采取了压缩,还需要查看压缩格式是否可切!
    如果采取了lzo压缩,在切片时,需要有索引文件,才能切片!
  • sequenceFile: 都可切
  • parquet: 都可切
  • orc: 都可切

3.什么情况需要把Hive的默认输入格式由CombineHiveInputFormat改为HiveInputFormat

读取的表中,除了数据还有其他文件,不希望其他文件作为数据被读入,就需要设置!

4.ODS层表的建模过程

  1. 表创建的是external 表
  2. ods层表的特点是直接将采集的数据导入,不做修改,因此ods层表的字段个数,数量和顺序都需要参考采集数据中字段的数量,个数,顺序,类型!
  3. ods层数据是每日导入,因此建表使用分区表,指定导入数据的日期作为分区字段
  4. ods层所有的数据都是 textfile + lzo压缩,
    因此指定inputformat为DeprecatedLzoTextInputFormat
  5. 指定表的存储位置为指定的位置
  6. ods层的业务数据,每个字段都是使用\t分割,使用row format指定每行的分隔符

5.shell中单引号,双引号的作用和使用的注意事项

单引号和双引号都是在需要将一些特殊字符例如空格,作为一个字符串的整体时,使用!
单引号中 不 会 脱 义 , 双 引 号 中 不会脱义,双引号中 不会脱义,双引号中会脱义,会被认为是引用一个变量!

注意事项:如果最外层是双引号,那么其中字符串的 都 会 被 脱 义 , 如 果 最 外 层 是 单 引 号 , 都会被脱义,如果最外层是单引号, 都会被脱义,如果最外层是单引号,不会被脱义

6.事实表的分类,每种不同类型事实表的特征和数据的导入方式

  1. 事务型事实表: 如果一个事实,一旦发生,不会被修改,那么这个事实的表就是事务型事实表
  2. 同步数据时,只需要同步新增的数据!
  3. 插入数据: insert overwrite 某个分区
  4. 周期型快照事实表: 确定一个事实快照的采样周期,在周期结束时,使用快照的形式,记录事实。
  5. 核心:确定采样的周期
  6. 插入数据: insert into 某个表
  7. 累积型快照事实表: 在事实的生命周期中,只对几个关键的采样点感兴趣,希望以累积的形式呈现事实变化趋势,采取累积型快照事实表!
  8. 插入数据时,涉及更新操作: insert overwrite (old + new )

7.简述HiveOnSpark的运行原理

  1. HiveOnMR : MR不支持DAG运算!复杂的hql,可能会被解析为多个job,多个job根据依赖关系依次运行!
  2. HQL -----> YARN上提交一个 JobSet(多个Job)
  3. HiveOnSpark : Spark支持DAG运算!
  4. App: 包含SparkContext的程序,称为app!
  5. Job: 每提交一次行动算子,这个行动算子被初始化为一个Job!Job需要在app中运行!
  6. HQL ------> spark Job
  7. 第一次执行一个HQL语句时,会先在集群上提交一个App.这个App就一直在YARN上运行!
  8. Hive客户端,会保持和App的一个连接,称为一个session(回话)!
  9. 只要hive客户端不关闭,session一直保持!
  10. Hive客户端,每执行一个HQL,将hql发送给appapp根据HQL对应的模版,运行对应的job!
  11. HiveOnTez: 支持DAG运算!
  12. 第一次执行一个HQL语句时,会先在集群上提交一个App.这个App就一直在YARN上运行!
  13. Hive客户端,会保持和App的一个连接,称为一个session(回话)!
  14. 区别于spark,这个session会有默认的超时时间(30s),一旦30s不再提交HQLsession关闭,
  15. app也会stop!

发表评论

表情:
评论列表 (有 0 条评论,251人围观)

还没有评论,来说两句吧...

相关阅读

    相关 相关思考5

    数仓相关思考5 1.什么样的表适合做成拉链表? > 缓慢变化的维度表, 需要记录表中每条数据的变化情况 2.累积型快照事实表如何分区?如何导入数据?

    相关 相关2

    数仓小思考2 1.数仓分层每一层用来做什么 > O(original)DS层: 原始数据存储层 原始数据不做处理,保持原貌,直接导入! > 分区表

    相关 相关

    数仓小思考 1.为什么使用关系型存储用户业务数据 > RDMS(关系型数据库)是基于OLTP(online transaction process在线事务处理)设计