数仓 ETL 过程中,数据探索阶段主要包括哪些内容?
参考答案:
1)收集所有的源系统的文档、数据字典等内容。
2)收集源系统的使用情况,如谁在用、每天多少人用、占多少存储空间等内容。
3)判断出数据的起始来源(System-of-Record)。
4)通过数据概况(Data Profiling)来对源系统的数据关系进行分析。
raw_input
print
raw
input
cat file1 | tail -n +300 | head -n 200
cat file1| head -n 500 | tail -n + 300
sed -n ‘500,200p’ file1
sed -n ‘300,500p’ file1
python3 中获取用户输入并默认以字符串存储的函数是(d)
a.
b.
c.
d.
哪些命令可以查看 file1 文件的第 300-500 行的内容(abd)
a.
b.
c.
d.
在关系模型中,实现“关系中不允许出现相同的元组”的约束是通过(c)
a. 外键
b. 超键
c. 主键
d. 候选键
关于 Kafka,以下说法不正确的是(c)
a.
b.
Producer 根据指定的 partition 方法,将消息发布到指定 topic 的 partition
kafka 集群接收到 Producer 发过来的消息后,将其持久化到硬盘,并保留消息指定时长,
而不关注消息是否被消费
Kafka 某个 Topic 的消息一旦被消费掉后,不会再被其他消费者重复消费
Kafka 消费者可以指定从最早的 offset 开始消费,也可指定从最新的 offset 开始消费
c.
d.
下列对 SQL Server 的描述正确的有(abd)
a. 关系型数据库
b. 企业级数据库
c. 层次化数据库
d. 客户机/服务器数据库
在 SQL 中以下哪些方式可以用来对数据排序(abd)
a. ORDER BY
b.
c.
d.
Spark 中以下哪个操作会进行真实计算(d)
a. MapJoin
Reduce
b.
ByKey
c.
d.
collect
Impala 与下列哪个组件共享元数据信息(d)
ROW_NUMBER() OVER()
PARTITION BY
RANK() OVER()
select * from tab where colA=’1’ and colB= ’2’
select * from tab where colA=’1’ or colB= ’2’
select * from tab where colA=’1’
select * from tab where colB=’2’
a. HDFS
b. Hive
c.
Pig
d. Oozie
下面哪些是 YARN 支持的调度语义(ad)
a. 请求节点 nodeX 上 5 个 Container:虚拟 CPU 个数为 2,内存量为 2GB
b. 请求任意节点上 5 个 Container:虚拟 CPU 个数为 3,内存量为 1GB
c. 请求任一同一个机架 rack 上 3 个 Container:虚拟 CPU 个数为 1,内存量为 6GB
d. 请求机架 rackX 上 3 个 Container:虚拟 CPU 个数为 4,内存量为 3GB
关于添加带自增列的数据,下列说法正确的是(b)
a. 自增的列需要显式地添加
b. 自增的列无须显式地添加。如需添加全部字段数据时,仅需表名,可省略全部字段
c. 自增的列无须显式地添加。如需添加全部字段数据时,虚列出除自增列之外的全部列名
d. 自增的列可以显式地添加,也可以非显示地添加
select * from tab where colA=’1’ union select * from tab where colB=’2’ 与此查询语句等价
的选项是(b)
a.
b.
c.
d.
a=1;b=1;a+ = b++;b+=++a;请问结果为(b)
a.
b.
c.
d.
小赵在测试 pyspark 的时候,写了一段代码如下
lines = sc.textFile("data.txt")
lineLengths = lines.map(lambda s: len(s))
lineLengths.persist()
lineCount = lineLengths.count()
totalLength = lineLengths.reduce(lambda a, b: a + b)
1) 该代码运行过程中,请分析 1,2,4 行 spark RDD 的执行过程是怎么样的?
2) 请结合代码分析 lineLengths.persist()这一步的作用
参考答案:
1) 该代码为 Spark 官方示例,分析如下
The first line defines a base RDD from an external file. This dataset is not loaded in memory
or otherwise acted on: lines is merely a pointer to the file.
The second line defines lineLengths as the result of a map transformation. Again, lineLengths
is not immediately computed, due to laziness.
Finally, we run reduce, which is an action. At this point Spark breaks the computation into
tasks to run on separate machines, and each machine runs both its part of the map and a
local reduction, returning only its answer to the driver program.
If we also wanted to use lineLengths again later, we could add: lineLengths.persist()
before the reduce, which would cause lineLengths to be saved in memory after the first time
a=3,b=4
a=3,b=5
a=4,b=4
a=4,b=5
it is computed.
在第一行,从外部文件中定义了一个基础的 RDD,数据集并未加载或者执行,lines 仅仅是
一个指向文件外部文件的指针
在第二行,lineLengths 定义了一个 map 转换结果的 RDD,改行数据集并未加载或者执行,
同样的,lineLengths 并未执行,仅仅是一个指针
在第四行,count()为一个 action 操作,数据开始加载运行,会将所有的 RDD 加载乳内存进
行计算,并返回结果
2) 该步指定 lineLengths 在第一次计算后会被加入到内存中
在第四行,lineLengths 被首次计算,加入内存
在第五行,lineLengths 再次被使用到,直接采用内存中的 lineLengths 进行计算,而不需要
再次计算 lineLengths 的值
在有关数据仓库测试,下列说法不正确的是(d)
a. 在完成数据仓库的实施过程中,需要对数据仓库进行各种测试.测试工作中要包括单元测
试和系统测试
b. 当数据仓库的每个单独组件完成后,就需要对他们进行单元测试
c. 系统的集成测试需要对数据仓库的所有组件进行大量的功能测试和回归测试
d. 在测试之前没必要制定详细的测试计划
以下关于 HDFS 中 Block 的说法正确的是(c)
a. 一个磁盘有自己的块大小,一般为 512 个字节,HDFS 中的块大小与本地磁盘保持一致
b. 为了容错,一般 Block 的默认备份 1 份,并且会尽量考虑到网络拓扑进行分布式存储
c. 由于分布式文件系统中使用 Block 来抽象数据存储,由于文件的分块不需要存储在同一
个机器上,所以 HDFS 的文件可以大于每个单独的磁盘大小
d. 数据文件的各个 Block 主要存储在 namenode 上
用 Python 编写一个函数,获得当前目录下的所有文件名(包含子目录中的子文件,假设当
前用户有所有文件的访问权限)
参考答案:
两种思路
①os 类的使用,文件及文件夹的判断,文件路径的处理
os.listdir()
os.path.join()
os.path.isdir()判断传入的文件是否为文件夹
②用 commands 等第三方包调用 shell 命令(find)
LIKE‘Mc_’
LIKE‘Mc%’
LIKE‘M[^c]_’
LIKE‘M[^c]%’
模糊查询,可以检索出以“M”开头,且第二个字符不是“c”的所有字符串的是(d)
a.
b.
c.
d.
如何删除 sales 表中产品类型为 toys 的 profits 列的列值?(a)
a. UPDATE sales SET profits = NULL WHERE product_type = 'TOYS'
b. DELETE profits FROM sales WHERE product_type = 'TOYS'
c. DELETE FROM sales WHERE product_type = 'TOYS'
d. DELETE FROM sales
查询每个部门中工资最高的员工
有两张表,一张表为员工表,包含员工 ID,员工姓名,员工工资和员工所在的部门 ID,
另一张表为部门表,包含部门 ID 和部门名称。
写出查询每个部门中工资最高的员工信息的 SQL。对于上述两张表,输出应如下:
参考答案
select d.Name as Department,e.Name as Employee, e.Salary
from Employee as e
inner join Department as d
on e.DepartmentId = d.Id
where (e.DepartmentId,e.salary) in (select DepartmentId,max(Salary) from Employee group
by DepartmentId)
ab
a
b
Hive 中 concat 函数的作用是是将传入的参数连接成为一个字符串,则 concat(’a’,null,’b’)
的结果是(d)
a.
b.
c.
d. NULL
客户隐私管理是银行业的重中之重,现需要对数据仓库中多张表中存储的不同格式的客户手
机号虚拟出一个"手机号 ID",该 ID 会被用于公网中的系统间调用,你会如何生成该 ID,并请
设计手机号和 ID 的映射关系表结构?请注意:手机号和 ID 的关系一旦生成,不应再发生改
变;无法通过 ID 倒推出手机号
参考答案:
(1)、先按照将手机号标准化,剔除不符合 11 长度的手机号,剔除开头不是 1 的手机号等等
(2)、对新增手机号排序后生成一个自增 ID,该 ID 需大于已存在 ID 的最大值
(3)、对已有手机号保留之前生成的 ID
(4)、表结构参考 [ ID,手机号,ID 生成日期 ] 的结构
考察关键点:
(1)、需要事先标准化手机号,然后再根据标准后的手机号生成 ID
(2)、手机号与 ID 要一一对应
(3)、ID 一旦生成不再改变
(4)、不能通过 ID 反推得到手机号
li
pri
print(7, id(_list))
print(1, id(list1))
_list.append(0)
list1 = [1, 2, 3]
print(3, id(list1))
print(6, id(_list))
if __name__ == "__main__":
print(2, list1)
以下 python 脚本的运行结果正确的是
def addElement(_list):
return _list
st2 = addElement(list1)
nt(5, id(list2))
(a)
1
a.
0]
3 52875528
4 [1, 2, 3, 0]
5 52875528
1 52875528
6 52879800
7 52879800
2 [1, 2, 3]
3
52875528
4 [1, 2, 3, 0]
5 52879800
1 52875528
6 52879800
7 52879800
2 [1, 2, 3]
3
52875528
6
print(4, list2)
52875528
7
52875528
2
[1,
2,
3,
b.
c.
d.
52875528
4 [1, 2, 3, 0]
5 52889000
1 52875528
6 52875528
7 52889000
2 [1, 2, 3]
3
52875528
4 [1, 2, 3, 0]
5 52889000
数据仓库中为什么要做拉链表?什么样的场景比较适合用拉链表?举例说明拉链表的实现过
程?
参考答案
参考要点:
1)记录下数据所有的状态变化的记录,如数据是按日批次更新,相当于实现了数据每日切
片的功能。
2)适合状态会发生变化的数据,并且每次数据变化量比较小,而历史状态又比较重要的数
据,数据必须要有主键。
3)首先需要给每条数据增加两个字段:链头和链尾,记录了这条数据的有效起始时间和结
束时间,批量更新时,将历史数据中删除和被更新的数据的链尾置为当前时间,表示这些数
据的链路被关闭。将新数据中新增的和更新历史数据的数据的链头设置为当前时间,链尾设
置为一个很大的时间,表示这些数据新开辟一条链路并且为当前有效。在对比数据的时候根
据主键对比整条数据是否发生变化,只要有一个字段的值发生变化即视为该条数据有更新。
0 次
1 次
2 次
3 次
下 面 spark 代 码 执 行 时 , 会 读 取 几 次 file 文
件 val raw = sc.textFile(file) val pvLog = raw.filter(isPV(_)) val clLog = raw.filter(isCL(_)) v
al baseRDD = pvLog.union(clLog) val baseRDD.count()(b)
a.
b.
c.
d.
如果我们现有一个安装 2.6.5 版本的 hadoop 集群,在不修改默认配置的情况下存储 200 个
200M 的文本文件和 200 个 30M 的文本,请问最终会在集群中产生多少个数据块(包括副
本)(b)
400
a.
1800
b.
c.
600
d.
1200
下列哪个是 Hadoop 运行的模式(acd)
a. 单机版
b. 联机版
c. 伪分布式
d. 分布式