1.离线编译 Velox 小记
2.大数据笔试真题集锦---第五章:Hive面试题
离线编译 Velox 小记
Velox 定义为 C++ 编写的源码数据库执行加速 library,目标是编译实现流处理、批处理和 AI/ML 领域计算的源码统一化,它不提供 parser 和 optimizer,编译旨在让各类计算引擎通过接入同一套 Native Engine 进行数据处理。源码
在编译网络环境良好的编译klt跟踪源码 matlab机器上,只需根据 GitHub 文档执行 scripts 目录的源码 setup 脚本,正常编译即可。编译也可以参考 .circleci 目录下的源码 CI 执行脚本了解详细的环境准备、编译、编译测试流程。源码目前 Velox 支持在 Ubuntu ./.、编译源码兔编程Centos8 和 MacOS Intel/M1 下编译,源码推荐在 Ubuntu 环境下学习。编译
对于网络环境恶劣的源码情况,可以参考以下步骤。以 Centos8 为例,在 scripts/setup-centos8.sh 脚本中,所有 dnf_install 安装的基础依赖都通过 Centos8 系统镜像源下载,dnf 是新版的 yum,需要进行换源操作。wget_and_untar 安装的是 Velox 依赖的项目,用户只需在本地下载后传至 Linux 服务器解压即可。ir转源码其余代码则负责将依赖下载、编译并安装至 Linux 环境中作为系统库使用。
如果不想手动下载、解压、编译和安装依赖,Velox 的编译流程设计了查找依赖的优先级。首先在系统库中查找,其次通过 CMake 下载编译。每个依赖对应有 DEPENCENCY_SOURCE 变量,值为 AUTO 表示按照优先级顺序查找,SYSTEM 表示仅从系统库查找,骑士源码网BUNDLED 表示通过 CMake 下载编译。
Velox 的编译流程还支持在编译源码时同时编译依赖。用户需在 third_party/CMakeLists.txt 和 CMake/resolve_dependency_modules 中定义依赖,通过简单修改依赖的 URL 为本地 tar 包路径,可实现 Velox 从本地路径完成依赖的解压和编译。
处理 submodule 时,Velox 通过 git submodule 包含了 xsimd 和 googletest,对于无法访问 press"="gzip"。
5.5 内部表和外部表
外部表使用external关键字和指定HDFS目录创建。 内部表在创建时生成对应目录的文件夹,外部表以指定文件夹为数据源。马老板源码 内部表删除时删除整个文件夹,外部表仅删除元数据。5.6 分区表和分桶表
分区表按分区字段拆分存储,避免全表查询,提高效率。 动态分区通过设置参数开启,根据字段值决定分区。 分桶表依据分桶字段hash值分组拆分数据。5.7 行转列和列转行
行转列使用split、explode、laterview,列转行使用concat_ws、collect_list/set。5.8 Hive时间函数
from_unixtime、unix_timestamp、to_date、month、weekofyear、quarter、trunc、current_date、date_add、date_sub、datediff。 时间戳支持转换和截断,标准格式为'yyyy-MM-dd HH:mm:ss'。 month函数基于标准格式截断,识别时截取前7位。5.9 Hive 排名函数
row_number、dense_rank、rank。5. Hive 分析函数:Ntile
效果:排序并分桶。 ntile(3) over(partition by A order by B)效果,可用于取前%数据统计。5. Hive 拉链表更新
实现方式和优化策略。5. Hive 排序
order by、order by limit、sort by、sort by limit的原理和应用场景。5. Hive 调优
减少distinct、优化map任务数量、并行度优化、小文件问题解决、存储格式和压缩格式设置。5. Hive和Hbase区别
Hive和Hbase的区别,Hive面向分析、高延迟、结构化,Hbase面向编程、低延迟、非结构化。5. 其他
用过的开窗函数、表join转换原理、sort by和order by的区别、交易表查询示例、登录用户数量查询、动态分区与静态分区的区别。