20210511曾经

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>>testechonhivee"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 |
±---------------------+

以此记录华泰的简单岁月

生活也许平凡,可这就是生活,在平凡中思考,在思考中伟大

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值