当前位置: 首页 > article >正文

数仓项目常见问题解答

一、数据清洗,你都清洗什么?或者说 ETL 你是怎么做的?

1.去除json格式不正确的(脏数据)

2.去除json中没用的废弃字段

3.过滤日志中缺少的关键字段(比如各种id)的记录

4.过滤掉日志中不符合时间段的记录(由于app上报有延迟,有数据延迟到达)

5.标准化,表名和字段名符合一般的规则

6.默认值填充,比如都性别字段男填充为0女填充为1

二、hive 和 spark 如何关联,关联过程中容易出现什么问题?

在spark-on-yarn环境下关联,启动metastore和threat服务,关联过程中可能会出现在spark中创建好的表在hdfs上查找不到,在本地被查到,需要修改hive里面的hive-sie.xml和spark中的hive-site.xml文件,缺包问题jar目录下缺少spark版本对应的hive-serde的jar包和hive-common的jar包在读取json数据时会失败。

三、hive 如何处理 json 数据?

利用jsonserde处理,导入一个三方的jar包到hive的jar目录下,然后再导入一个hive-common对应服务器spark对应版本的jar包;或者加载本地自带的反序列化jar包,然后建表时指定jar包即可直接读取json数据。

四、你的这个 spark 离线数仓的项目的项目架构图,请简单描述一下

五、编写完成的 spark 程序,如何运行?

利用spark-sumbit命令提交到spark-yarn模型下的spark集群上运行。

六、spark 本地化运行,提示缺包怎么办?集群提示缺包怎么办?

本地确保需要在所在pyspark环境下的jar目录导入hive-serde的jar包和hive-common的jar包,集群提升缺包需要在hdfs上的spark目录下的jar目录下导入hive-serde和hive-common的jar包。

七、你这个项目中的 session 分割是什么?怎么做?为什么 要做这个呢?

根据同一个设备做两件事情的时间间隔来分割的。如果同一个设备在做两件事的间隔大于10分钟则给它们一个1做为标签算作两个会话,然后使用sum对该设备的标签数求和,这样可以防止时间过长做的两个事件只被统计一次,可以提高统计会话窗口的精准率。

八、hive 表的数据存储格式,以及各个格式之间的优劣(区别)

hive的存储格式分为两大类:一类是纯文本,一类是二进制文件存储。

Hive支持的主要存储数据的格式有:TEXTFILE,SEQUENCEFILE,ORC,PARQUET

第一类:纯文本文件存储

textfile:纯文本文件存储格式,不压缩,也是Hive的默认存储格式,磁盘开销大,数据解析开销大。

第二类:二进制文件存储

- sequencefile:

会压缩,不能使用load方式加载数据

- parquet:

会压缩,不能使用load方式加载数据

- rcfile:

会压缩,不能load。查询性能高,写操作慢,所需内存大,计算量大。此格式为行列混合存储,hive在该格式下,会尽量将附近的行和列的块存储到一起。

- orcfile:rcfile的升级版。

九、如何创建分区表,如何创建分桶表,如何创建外部表

--分区表:
create table part1(
id int,
name string,
age int
)partitioned by (dt string)
row format delimited 
fields terminated by ','
lines terminated by '\n';
--分桶表:
--创建一个4个桶的分桶表
create tavle bucket1(id int,name string)
clustered by (id)
into 4 buckets
row format delimited fields terminated by ' ';
--外部表:
create external table test1(id int ,name string)
row format delimited
fields terminated by ','
location '/publicData'
--这个location 是本地的意思还是hdfs的路径呢?答案是必须在hdfs上。
--内部表和外部表的转换:
alter table test1 set tblproperties('EXTERNAL'='flase')--转换为内部表
alter table test1 set tblproperties('EXTERNAL'='TRUE')--转换为外部表
--TRUE一定要大写

十、hive 中有哪些数据类型。

  1. 基本数据类型
    数值类型

TINYINT:1字节整数,范围 -128 到 127。
SMALLINT:2字节整数,范围 -32,768 到 32,767。
INT:4字节整数,范围 -2,147,483,648 到 2,147,483,647。
BIGINT:8字节整数,范围 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。
FLOAT:4字节单精度浮点数。
DOUBLE:8字节双精度浮点数。
DECIMAL:精确的高精度数字,可以指定小数点后位数和整数位数。
字符类型

STRING:变长字符类型。
CHAR(n):定长字符类型,n表示字符数。
VARCHAR(n):变长字符类型,n表示最大字符数。
布尔类型

BOOLEAN:表示 TRUE 或 FALSE。
日期和时间类型

DATE:表示日期,格式为 yyyy-MM-dd。
TIMESTAMP:表示日期和时间,精确到毫秒,格式为 yyyy-MM-dd HH:mm:ss。
INTERVAL:表示时间间隔,用于计算日期或时间的增量。
2. 复杂数据类型
集合类型

ARRAY:元素类型为 T 的数组。 MAP<K, V>:键为 K 类型,值为 V 类型的映射。 STRUCT:包含不同类型元素的复合数据结构,类似于记录。 元组(Tuple)类型

TUPLE:多个元素的有序集合,类似于数组。
UNIONTYPE

UNIONTYPE:表示可以为多种类型中的任何一个。常用于表示可能有多个类型的字段。


http://www.kler.cn/a/422076.html

相关文章:

  • postman测试
  • 003-SpringBoot整合Pagehelper
  • Centos7安装MySQL8.0详细教程(压缩包安装方式)
  • QT实战-qt各种菜单样式实现
  • Qt清空文件夹下的内容
  • 基于Vue实现的移动端手机商城项目 电商购物网站 成品源码
  • Narya.ai正在寻找iOS工程师!#Mixlab内推
  • linux下环境变量的使用
  • 基于Java Springboot时间管理微信小程序
  • NLP 相关知识的构成
  • MR30分布式 IO 模块助力印刷设备,开启收益新篇
  • python脚本:Word文档批量转PDF格式
  • el-input输入校验,只允许输入数字或者带一个小数点的数字。
  • Linux环境部署RocketMQ单节点以及双主双从集群环境
  • 算法笔记:力扣146.LRU缓存
  • ubuntu无线网络共享到有线
  • 在 Windows Server 2022 Datacenter 上配置 MySQL 8.0 的主从复制
  • vscode切换anaconda虚拟环境解释器不成功
  • 无人机的计算机仿真模拟控制
  • 【测试工具JMeter篇】JMeter性能测试入门级教程(六):JMeter中实现参数化的几种方式
  • 利用Python爬虫获取淘宝关键词接口的深入解析
  • LeetCode78:子集
  • unity与android拓展
  • 量化交易系统开发-实时行情自动化交易-8.8.同花顺 SuperMind 平台
  • 【Oracle11g SQL详解】子查询的分类与嵌套查询实例
  • Typora设置自动上传图片到图床