20210511华泰离职知识记录
缘由
在华泰大数据项目工作将近一年,很多东西都不是什么知识点,更像是习惯或者方式,知识是死的,背就可以了,怎么用是一门学问,学会思考,用自己的方式来打开这个世界
正文
20210511记录一次知识储备
有些知识可能根本就不算知识,有些知识可能还会有小错误,不过,该部分记录作为一个手册,确实可以保证一个数仓的正常运转,如有错误,还请指出,随笔记录
--------在hive里设置spark作为计算引擎
set hive.execution.engine=spark;
--------设置除了某字段,查询其他字段
set hive.support.quoted.identifiers=none; --默认值为column
(字段)?+.+
如:select (customerid)?+.+
from xx where limit 1;
创建parquet表
ROW FORMAT SERDE
‘org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe’
STORED AS INPUTFORMAT
‘org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat’
OUTPUTFORMAT
‘org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat’
--------将show tables;的结果写入文档中
“beeline -u ‘jdbc:hive2://ip地址:端口号/’ -n 用户名 -p 密码 -d org.apache.hive.jdbc.HiveDriver -e use 数据库名;show tables;” > hive_tables.txt
--------接一个表的总流程
全量抽取
增量抽取
增全量合并
数据校验——增
数据校验——全
删除分区
创建视图
注意:接表之后要校验几天,排除笛卡尔积等异常问题
-----------输入字段名和时间字段,结果放入一个文件
#!/bin/bash
col = ${1}
pt= ${2}
test
export sql
#拼出查询语句
cat /zw/biao | while read line
do
sql=“select ${col} from l i n e w h e r e p t = line where pt= linewherept={pt};”
echo l i n e > > t e s t e c h o − n ∣ h i v e − e " s e t h i v e . e x e c u t i o n . e n g i n e = s p a r k ; u s e o d s ; line >>test echo -n |hive -e "set hive.execution.engine=spark;use ods; line>>testecho−n∣hive−e"sethive.execution.engine=spark;useods;{sql}" >>test
done
-----------切换服务器
切root用户
sudu su
切其他服务器
ssh 100.100.111.111
-----------赋权
赋予权限
chmod a+w file1
直接改变文件所属者
chown ha /data/text.txt
-----------查找文件
find -type f |grep -i 文件名
查找当前目录下所有文件的特殊字符
find ./bin/ -type f | xargs grep ‘ods’
-----------整理逻辑文档时意外收获
–1-------mapjoin
网址:https://blog.csdn.net/maenlai0086/article/details/90763593
例子:
select /+ mapjoin (t4,t6,t7)/ from xx
作用:在Hive中,common join是很慢的,如果我们是一张大表关联多张小表,可以使用mapjoin加快速度。
注意:每个mapjoin都要执行一次map
–2-------hive本地时间
select current_date;
select current_timestamp;
–3-------NVL与Coalesce
NVL与Coalesce之间的差异
网址:https://www.imooc.com/wenda/detail/579237
–4-------distinct和group by的区别
https://www.cnblogs.com/wanshutao/p/3938968.html
–5-------特殊字符需要转义
如:’ |
–6-------like和relike
简单来说
a relike b
表示b是否在a里面,b可以是正则表达式,返回值为false或者ture
网址:https://blog.csdn.net/qq_26442553/article/details/79452221
–7-------TRIM的作用
网址:https://www.1keydata.com/cn/sql/sql-trim.php
-----------判断一个值为null
去掉前面和后面的空格trim
最保险的方式是 length(xx)=0
处理之外还要考虑字符串 null NULL
有时候还会出现换行符\n 制表符\n 以及组合\r\n \r等等,抽数的时候dataX可以用下面的语句处理特殊字符
if( Column.Type.STRING == record.getColumn(i).getType() && record.getColumn(i).asString()!=null ) record.setColumn( i,new StringColumn(record.getColumn(i).asString().replaceAll("[\r\n\"^]","")))
-----------oracle拼接
oracle里面sql语句中,拼接用:字符a||字符b
-----------sqoop抽数特殊字符处理
网址:https://blog.csdn.net/wuzhilon88/article/details/103788958?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160448113419724842934779%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=160448113419724842934779&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v28_p-2-103788958.pc_first_rank_v2_rank_v28p&utm_term=sqoop%E6%8A%BD%E6%95%B0%E6%8D%A2%E8%A1%8C&spm=1018.2118.3001.4449
利用一下两个参数可以实现对换行等特殊字符的替换或者删除,没测试过
–hive-delims-replacement
–hive-drop-import-delims
-----------dataX的一些问题
dataX分隔符不支持组合符号
脏数据换行符\n,回车符\r,以及组合\r\n
-----------修改表格式
ALTER TABLE xx SET FILEFORMAT parquet cascade;
-----------创建视图
CREATE VIEW v_table_name_a(
,pt)
as select
pt
from temp.ods_table_name_a ;
-----------复制分区表三步走
第一步、复制表结构
create table ods_xx_a like ods_xx_d
第二步、复制hdfs上文件(提前通过show create table查看表位置)
hadoop fs -cp hdfs://nameservice1/user/hive/warehouse/temp.db/ods_xx_d/* hdfs://nameservice1/user/hive/warehouse/temp.db/ods_xx_a/
第三步、重新对新表分区
MSCK REPAIR TABLE ods_xx_a;
补充:
可能会有不对的分区,show partitions 新表名;不对的分区删除
alter table 表名 drop partition (pt=XXX)
-----------设置三天前作为脚本参数
date +%Y%m%d -d "-3 day"
-----------表的命名
表的命名一定要规范,我是做etl的,所以这个特别在意
一般是这样的:层-系统-表名-增/全
比如:ods_car_cust_a
一般来说,数据的加工过程中要经历好几步,我觉得中间表最好规范取名字以及写上注释,比如:
ods_xx_a --xx表
ods_xx_a1 --处理名字
ods_xx_a2 --处理性别
ods_xx_a3 --处理电话
ods_yy_a --个人信息整合
我经历了好几个比较大的项目,为了方便自己也为了方便别人,每个步骤写个小注释吧,大爷,顺便提一下,一旦涉及到复杂点的逻辑最好都写个注释,不管是sql、脚本、程序,我可谢谢您嘞
-----------自编脚本
这样的小脚本逻辑并不复杂,主要是为了啥,你记不住复杂命令,那就把复杂命令参数化设计,就当作一个方法,自己调用起来真的很方便
#命令格式,大小写请统一
#sh tolocal.sh inc car t_xx ${startdate}
e
n
d
d
a
t
e
t
y
p
e
=
{enddate} type=
enddatetype={1}
mokuai=
2
b
i
a
o
m
i
n
g
=
{2} biaoming=
2biaoming={3}
startdate=
4
e
n
d
d
a
t
e
=
{4} enddate=
4enddate={5}
if [ t y p e = ′ i n c ′ ] t h e n p y t h o n / d a t a / r u n J o b . p y / h o m e / b i n / x x . p y / d a t a / i n c / {type} = 'inc' ] then python /data/runJob.py /home/bin/xx.py /data/inc/ type=′inc′]thenpython/data/runJob.py/home/bin/xx.py/data/inc/{mokuai}/ods_KaTeX parse error: Expected group after '_' at position 9: {mokuai}_̲{biaoming}_d.json s t a r t d a t e , {startdate}, startdate,{enddate} /data/conf/conf.conf ${mokuai}
echo “python /data/runJob.py /home/bin/xx.py /data/inc/KaTeX parse error: Expected group after '_' at position 13: {mokuai}/ods_̲{mokuai}_${biaoming}_d.json s t a r t d a t e , {startdate}, startdate,{enddate} /data/conf/conf.conf ${mokuai}”
elif [ t y p e = ′ q u a ′ ] t h e n p y t h o n / d a t a / r u n J o b . p y / h o m e / b i n / x x . p y / d a t a / i n c / {type} = 'qua' ] then python /data/runJob.py /home/bin/xx.py /data/inc/ type=′qua′]thenpython/data/runJob.py/home/bin/xx.py/data/inc/{mokuai}/ods_KaTeX parse error: Expected group after '_' at position 9: {mokuai}_̲{biaoming}_a.json s t a r t d a t e , {startdate}, startdate,{enddate} /data/conf/conf.conf ${mokuai}
echo “python /data/runJob.py /home/bin/xx.py /data/qua/KaTeX parse error: Expected group after '_' at position 13: {mokuai}/ods_̲{mokuai}_${biaoming}_a.json
s
t
a
r
t
d
a
t
e
,
{startdate},
startdate,{enddate} /data/conf/conf.conf ${mokuai}”
fi
-----------压缩
打包文件夹
zip -r file.zip file
打包不保存原文件
zip -m -r file.zip file
解压到当前目录(压缩文件路径和准备解压的路径一样)
unzip file.zip
-----------修改vim参数
修改vim默认参数,比如带不带行号
vim ~/.vimrc
原来的配置
set nu
set ic
在vim下搜索字符
:/zifu
显示行号
:set number
-----------从集群下载东西
hdfs dfs -get hdfs://nameservice1/user/htbd/udf/* udf/
查看封装的命令
alias myimp
-----------查看yarn在运行的任务
yarn application -list
yarn application -kill application_id
-----------Jenkins配置环境变量突破内网限制
~~不方便写
有些脚本调用需要初始化环境变量
source /home/user/.bash_profile
-----------order by 的顺序是
特殊字符
数字
大写
小写
如图
select * from temp.index order by name;
±---------------------+
| name |
±---------------------+
| -p1713015277029 |
| .p1713015277029 |
| 12009122517030919034 |
| 2713015277029 |
| A1713015277029 |
| P1713015277029 |
| P2104015664690 |
| a1713015277029 |
| p1713015277029 |
±---------------------+
以此记录华泰的简单岁月
生活也许平凡,可这就是生活,在平凡中思考,在思考中伟大