开发中遇见的知识点&小问题记录

知名技术社区

Github:   https://github.com/
CSDN:	https://www.csdn.net/
51CTO:	https://www.51cto.com/
博客网: https://www.cnblogs.com/
ChinaUnix:	http://www.chinaunix.net/
开源中国:	https://www.oschina.net/
SegmentFault: https://segmentfault.com/

学习网址:


```html
排序算法,数据表连接,表的插入删除等等
https://wenku.baidu.com/view/cbecab896bd97f192379e97d.html
http://blog.csdn.net/xuhaipeng/article/details/4215521
https://wenku.baidu.com/view/cbecab896bd97f192379e97d.html
http://www.jianshu.com/p/15017746f973
多线程:http://www.mamicode.com/info-detail-517008.html

postgrepsql日期截取函数:date_trunc


```sql
select * from ods.jy_tb_train_person_hour_stat where TO_CHAR(date_trunc('day',createtime),'yyyy-mm-dd')='2020-05-08';

GP库优化总结:

a.因为涉及到kettle ETL工具,修改kettle源码,一定要修改对地方,这个需要具体的调试。改好之后,替换jar包。
b.然后使用kettle进行具体的测试:在pg库测试表中插入10万条数据,启动任务发现写入速度加快了有3倍,之前是每秒钟是180左右,现在是每秒600左右,10万条数据,之前花费时间是10min左右,现在是2min53s左右。
c.修改源码的好处是不用改配置文件参数,优化器默认是开启的。修改源码只是在创建会话连接的执行set optimizer to off,单次连接有效。

/etc/profile和 ~/.bash_profile的区别:
/etc/profile
为系统的每个用户设置环境信息和启动程序,当用户第一次登录时,该文件被执行,其配置对所有登录的用户都有效。当被修改时,必须重启才会生效。英文描述:”System wide environment and startup programs,for login setup”
~/.bash_profile
为当前用户设置专属的环境信息和启动程序,当用户登录时该文件执行一次。默认情况下,它用于环境变量,并执行当前用户的.bashrc文件。理念类似于/etc/profile,只不过只对当前用户有效,也需要重启才能生效。

python 解决中文乱码问题:

#!/usr/bin/python3  
# -*- coding: utf-8 -*-

win 端口占用解决:

1).执行cmd 
2). cmd命令模式下输入netstat –ano,然后找到占用端口的那个进程:
netstat -ano  --查看所有端口被占用情况
netstat -ano | findstr "135"  --查看135端口被占用情况
3). 根据pid 杀死该进程:taskkill -pid 287784 -f

3.报错:

解决:ALTER TABLE dest set distributed by(columname); 重新设置下分发的字段。

1.遇见的问题:从源oracle库接入数据到postgresql库中,由于pg库字段区分大小写,如果是表字段是小写,不做任何处理,可以直接导入成功,但是如果表字段是大写,在插入数据到pg表中时需要加入双引号。
2.解决方案:
1)一开始考虑该kettle源码,但发现改了之后,在测试的时候没有,但是替换jar,重启本地kettle,运行job的时候,改的源码根本不能生效。
2)发现在数据连接的时候界面上有相关的配置,这样就方便很多了,估计kettle开发人员也应该考虑到了,各个数据库之间数据导入的时候,容易出现大小写的问题。
见下图:

4.Logback.xml和logback-spring.xml的区别
共同点:二者都是用来配置logback,但是2者的加载顺序是不一样的。
Logback.xml–application.properties–logback-spring.xml
Logback.xml加载早于application.properties,所以如果你在logback.xml使用了变量时,而恰好这个变量写在application.properties时,那么就会获取不到,只要改成logback-sping.xml就可以解决。
5.@ConditionalOnMissingBean,它是修饰bean的一个注解,主要实现的是,当你的bean被注册之后,如果而注册相同类型的bean,就不会成功,它会保证你的bean只有一个,即你的实例只有一个,当你注册多个相同的bean时,会出现异常,以此来告诉开发人员。
6.返回多种类型,怎么接收?
?extends Object

7.springboot连接postgresql 指定模式Schema种类型,怎么接收?
springboot 连接 postgresql 指定模式Schema
一般的连接方式,我们创建数据库之后,在public 的Schema(模式)下建表,这时使用连接方式----jdbc:postgresql://localhost:5432/postgresql
在这种连接方式下,默认连接使用的是postgresql数据库的public 模式
在业务场景中有时允许多个用户使用一个数据库并且不会互相干扰。这时需要在使用同一个数据库 新建其他模式进行连接。这时在springboot的数据源jdbc配置时注意。
postgresql-> 9.3 及以前的版本指定方式
spring.datasource.url=jdbc:postgresql://localhost:5432/postgresql?searchpath=newschema
postgresql-> 9.4 及以后的版本指定方式
spring.datasource.url=jdbc:postgresql://localhost:5432/postgresql?currentSchema=newschema
8.查询pg版本-sql
Select version();

9.Mybatis Mapper.xml 需要查询返回List

12.Postgresql 获取元数据表信息、字段信息、主键信息

select
tb.schemaname as schema_name,
tb.tablename as table_name,
obj_description(c.oid) as table_comment
from pg_tables as tb
inner join pg_namespace ns on ns.nspname = tb.schemaname
inner join pg_class c on c.relname = tb.tablename and ns.nspname = tb.schemaname
where tb.schemaname = ‘ods’ and tb.tablename like ‘ent_info’
order by tablename asc;

主键:
select
con.conname as pk_name, c2.relname as pk_table_name, a.attname as pk_column_name, a.attnum as pk_column_position
from pg_constraint con
inner join pg_namespace ns on ns.oid = con.connamespace
inner join pg_class c2 on c2.oid = con.conrelid
inner join pg_attribute a on (a.attrelid = con.conrelid and a.attnum = any(con.conkey))
where con.contype = ‘p’ and ns.nspname = ‘ods’ and c2.relname = ‘ent_info’;

字段信息:
select
tb.schemaname as schema_name,
tb.tablename as table_name,
a.attname as column_name,
a.attnum as column_position,
– t.typname as column_type_name,
(t.typname || COALESCE(SUBSTRING(format_type(a.atttypid,a.atttypmod) from ‘(.*)’), ‘’)) as column_type_name,
case a.attnotnull when ‘t’ then ‘not null’ else ‘’ end as column_notnull,
pg_get_expr(d.adbin, d.adrelid) AS column_default,
col_description(a.attrelid, a.attnum) as column_comment
from pg_attribute as a
left join pg_class as c on a.attrelid = c.oid
left join pg_type as t on t.oid = a.atttypid
left join pg_attrdef d ON (a.attrelid, a.attnum) = (d.adrelid, d.adnum)
inner join pg_namespace ns on ns.oid = c.relnamespace
inner join pg_tables as tb on tb.tablename = c.relname and ns.nspname = tb.schemaname
where tb.schemaname = ‘ods’ and tb.tablename = ‘ent_info’ and a.attnum > 0 and a.attisdropped = ‘f’
order by schema_name asc, table_name asc, a.attnum asc
13. updateByPrimaryKeySelective和updateByPrimaryKey的区别

updateByPrimaryKeySelective:只是更新新的model中不为空的字段。
updateByPrimaryKey:则会将为空的字段在数据库中置为NULL。
14.问题:java遇到日期带T和Z,提示Unparseabledate:2021-08-31T12:56:33.000Z
解决方法:
将SimpleDateFormat datestr=new SimpleDateFormat(“yyyy-MM-dd’T’HH:mm:ss.SSSZ”);这里最后的Z改为X,即
SimpleDateFormat datestr=new SimpleDateFormat("yyyy-MM-dd’T’HH:mm:
在格式字符串的末尾使用X而不是Z:
解析ISO-8601格式的时区偏移。
15.wget下载不需要验证命令:
wget https://zhanglc-c-pc01.grandsoft.com.cn:8090/temp/data_standard_tab_temp.xls --no-check-certificate
16.
delivery 英[dɪˈlɪvəri] 美[dɪˈlɪvəri]
n. 传送; 交付; 分娩; 递送; 演讲方式; 表演风格; 投球;
[例句]He’s the postal delivery man in his village.
村里的邮件都由他传送。
17.
BeanUtils.copyProperties有一个问题,就是当src对象的键值为Null时
,就会把target对象的对应键值覆盖成空了。
public static String[] getNullPropertyNames(Object source) {
final BeanWrapper src = new BeanWrapperImpl(source);
java.beans.PropertyDescriptor[] pds = src.getPropertyDescriptors();
Set emptyNames = new HashSet();
for (java.beans.PropertyDescriptor pd : pds) {
Object srcValue = src.getPropertyValue(pd.getName());
if (srcValue == null) {
emptyNames.add(pd.getName());
}
}
String[] result = new String[emptyNames.size()];
return emptyNames.toArray(result);
}
然后调用该方法:
BeanUtils.copyProperties(supMsgInfoDTO, supMsgInfo, getNullPropertyNames(supMsgInfoDTO));
18.
routekey 路由选择key
19.
useSSL=true是进行安全验证,一般通过证书或者令牌什么的,useSSL=false就是通过账号密码进行连接,通常使用useSSL=false
20.
CollectionUtils.isEmpty的用法:用来对集合null和空的判断。
包名:org.apache.commons.collections;
Public static Boolean isEmpaty(Collection coll){
Return coll == null || coll.isEmpty();
}
20.linux 删除多行的多种方式:
第一种方式
按一下ESC键,确保退出编辑模式
按两次键盘上面的 g键,让光标移动到文本的首行
然后按键盘上面的 d和 G键。其中d键是小写,G键要切换成大写的。
这样就可以删除所有内容了。
第二种方式
按一下ESC键,确保退出编辑模式
按一下 :冒号键,(shift + ;)就可以输入 :冒号了。
然后输入 1,$d
第三种方式
按一下ESC键,确保退出编辑模式
按一下 :冒号键, shift + ; 就可以输入 :冒号了。
然后输入 %d。 %表示文件中的所有行。
删除多行
将光标移动到需要删除的行
按一下ESC键,确保退出编辑模式
在dd 命令 前面加上要删除的行数。例如,如果要删除第4行以下的3行,请按下 3 dd

  1. mybatis转义字符

  2. federated
    英 [ˈfedəreɪtɪd] 美 [ˈfedəreɪtɪd]
    adj.结成联邦的;结成联盟的 v.结成联邦;组成同盟

  3. deprecated
    英[ˈdeprəkeɪtɪd]
    美[ˈdeprəkeɪtɪd]
    v. 对…表示极不赞成; 强烈反对;
    [词典] deprecate的过去分词和过去式;
    [例句]He deprecated the low quality of entrants to the profession
    他对该行业中新人的低素质予以了批评。
    [其他] 原型: deprecate

  4. fastjson List转JSONArray

端口占用问题解决:
1.查看80端口号是否被占用 命令:netstat -anp | grep 80
2.查看当前环境下已经使用了的端口信息 命令:netstat -nultp
3.通过kill -9 PID,将该线程强杀即可
25. 卸载rpm安装下的jdk
若有安装OpenJDK可强制卸载,可先用该命令检查版本

卸载jdk
rpm -e --nodeps jdk1.8-1.8.0_301-fcs.x86_64

  1. ResultSet 转List
    //定义静态方法,并根据泛型和反射,实现转换
    //注意:要求数据库的列名必须和JAVA实体类的属性名、类型完全一致
    public static List<Map<String, Object>> resultSetToList(ResultSet rs) throws SQLException {
    List list = new ArrayList();
    ResultSetMetaData md = rs.getMetaData();
    int columnCount = md.getColumnCount();
    while (rs.next()) {
    Map rowData = new HashMap();
    for (int i = 1; i <= columnCount; i++) {
    rowData.put(md.getColumnName(i), rs.getObject(i));
    }
    list.add(rowData);
    }
    return list;
    }
    27.pg数据库使用substring对时间进行截取报错:
    语法如下:

    这是因为,保存时间的列使用的是timestamp类型,而现使用的数据库版本,substring方法只接收text类型,可能很多人遇不到这个问题,那是因为使用的版本低。
    那怎么解决那?
    既然必须text,那就转嘛,直接to_char!这是个解决办法,但不是好办法。实际上还有更优解,直接使用DATE进行比较:

问题总结:本地没有报错,线上有报错。
1.首先找到问题,报的什么错误,定位到之后,发现使用的包不一致,服务器上使用base模块dm8的驱动包,而本地是启动本地模块,使用的dm7,没有问题。
造成这个问题,1方面就是依赖包不规范,本身模块依赖了web-base模块,web-base中依赖的是别的版本,本身模块又重新依赖了驱动包。
自身问题:问题是定位到,但是没有刨根追踪到问题的根源,就是分析问题,不太深入造成了这个问题。
28. mybatis中关于example类详解
Example example = new Example(EnumField.class);
if(StringUtil.isNotNull(keyword)) {
example.createCriteria().andLike(“fieldName”, ‘%’+keyword+‘%’);
}
29. list集合根据某字段进行排序
1、Collections.sort()
//升序排列
Collections.sort(list, new Comparator() {
public int compare(Student s1, Student s2) {
return s1.getAge().compareTo(s2.getAge());
}
});
//降序排列
Collections.sort(list, new Comparator() {
public int compare(Student s1, Student s2) {
return s2.getAge().compareTo(s1.getAge());
}
});

//多条件-先年龄升序、后分数升序
Collections.sort(list, new Comparator() {
public int compare(Student s1, Student s2) {
int i = s1.getAge().compareTo(s2.getAge());
if(i == 0) {
i = s1.getScore().compareTo(s2.getScore());
}
return i;
}
});

//如日期集合List list = new ArrayList<>();
Collections.sort(list, new Comparator() {
public int compare(Date s1, Date s2) {
return s1.compareTo(s2);
}
});
java8可使用
2、list.sort()

//升序排列
list.sort((x,y)->Integer.compare(x.getAge(), y.getAge()));
list.sort((x,y)->y.getAge().compareTo(x.getAge()));
//降序排列
list.sort((x,y)->Integer.compare(y.getAge(), x.getAge()));
//如日期集合List list = new ArrayList<>();
list.sort((x,y)->x.compareTo(y));

3、list.stream()

//升序排列
list = list.stream().sorted(Comparator.comparing(Student::getAge)).collect(Collectors.toList());
list = list.stream().sorted(Comparator.comparingInt(Student::getAge)).collect(Collectors.toList());
//使用lambda表达式
list = list.stream().sorted(Comparator.comparing(e -> e.getAge())).collect(Collectors.toList());
//降序排列
list = list.stream().sorted(Comparator.comparing(Student::getAge).reversed()).collect(Collectors.toList());
//多条件-先年龄升序、后分数升序
list = list.stream().sorted(Comparator.comparing(Student::getAge).thenComparing(Comparator.comparing(Student::getScore))).collect(Collectors.toList());

  1. oracle 查询所有表名,注释,等
    SELECT * FROM all_tables WHERE OWNER = ‘模式名’
    31.sql server查询所有表名信息:
    select * from sys.tables;

32.查看数据库大小-mysql
用SQL命令查看Mysql数据库大小
要想知道每个数据库的大小的话,步骤如下:
1)、进入information_schema 数据库(存放了其他的数据库的信息)
use information_schema;
2)、查询所有数据的大小:
select concat(round(sum(data_length/1024/1024),2),‘MB’) as data from tables;
3)、查看指定数据库的大小:
比如查看数据库home的大小
select concat(round(sum(data_length/1024/1024),2),‘MB’) as data from tables where table_schema=‘home’;
4)、查看指定数据库的某个表的大小
比如查看数据库home中 members 表的大小
select concat(round(sum(data_length/1024/1024),2),‘MB’) as data from tables where table_schema=‘home’ and table_name=‘members’;

33.查看数据库信息-表、库-sql server
1)、查询数据库所有表名:
select * from sysobjects where xtype=‘u’
2)、 查询数据库中所有表
select * from sys.tables
3)、 --查询数据库所有表名及每个表的行数
SELECT a.name, b.rows FROM sysobjects AS a INNER JOIN sysindexes AS b ON a.id = b.id WHERE (a.type = ‘u’) AND (b.indid IN (0, 1)) ORDER BY a.name,b.rows DESC
34.查看数据库信息-表、库-oracle
oracle查看所有表信息和字段信息以及注释信息等-https://blog.csdn.net/gxlzhhx/article/details/123683253
select * from all_tables where OWNER = ‘REALTIMEDATA’;//所有用户的表

查看数据库信息、表-postgresql:
select * from pg_tables where schemaname = ‘public’;

  1. Postgresql 内容替换sql:
    update job_conf_info set content = replace(content,‘218.90.248.145’,‘8.189.245.115’) where name like ‘job-房改和住房保障信息系统%’;
  2. 文件采集总结:
    采集文件弊端:
    1.联系了几家系统,发现大部分文件是以文件路径存储在业务库里面,文件真实存储在另一个附件库或文件服务器上。
    a.因为存在另一个数据库里面,对方还需要给我们账号和密码,这个未必配合.
    b.另外我们真的要采集这些文件数据,需要类似于数据对接的,需要时间计划对接。(目前有十三家需要做证照库、图档库的采集)
    c.我们对接过来了,一方面特别占用磁盘空间,已知的几家存储就特别大(020-几个T 政府投资是17G 绿色建筑-几百G 既有建筑-305G 商品房-100G)
    d.存储这些文件数据也确实用途不大,因为,我们使用链接的方式下载文件或者查看图片,这个数据是来自人家业务系统的文件服务器上,不是来源于我们采集到文件数据。
    e.文件资源维护也是个工作量,因为附件特别多,需要配置采集任务等等工作,文件资源更新不及时造成获取的文件是旧的文件。
  3. postgresql 每个表的大小
    select relname, pg_size_pretty(pg_relation_size(relid)) from pg_stat_user_tables where schemaname=‘ods’ order by pg_relation_size(relid) desc;
  4. Java将图片转换成二进制,将二进制转换成图片

Pg 多行合并成一行:
https://blog.csdn.net/qq_42555061/article/details/126010866

数据转List的几种方法:
https://blog.csdn.net/TM_enn/article/details/121563174
安装redis5:
https://blog.csdn.net/weixin_43394840/article/details/122683242
Debian8系统如何通过chkconfig查看启动项
先安装软件 apt-get install chkconfig
查看开机启动项:chkconfig –list
Nacos:安装
https://blog.csdn.net/Mr_7777777/article/details/123133036
Redis :安装
https://baijiahao.baidu.com/s?id=1722728002073366376&wfr=spider&for=pc
nginx安装:
https://blog.csdn.net/t8116189520/article/details/81909574
pg10.5 在线安装:
https://blog.csdn.net/weixin_35997503/article/details/116838052
Debian 11 安装 PostgreSQL
https://blog.csdn.net/weixin_44471703/article/details/123988432
win查看端口是否存在:
netstat –ano | findstr “8080”
pg数据库大小查询:
postgres=# select pg_size_pretty(pg_database_size(‘postgres’));

修改crontab编辑器
export EDITOR=vi 修改编辑器为 vi
执行脚本 jar包为执行问题:一天未解决
1.写脚本 注意环境变量,有时候不识别 验证 env >> /data/opt/access.out
解决:可以将环境变量放到脚本中,执行就没有问题了。

Sql技巧:一条SQL语句实现更新表中的某个字段等于另一张关联表中的某个字段值
UPDATE metadata.data_library SET dept_idd =dept_id
FROM metadata.data_library AS a
JOIN asset.tb_system_info AS b
ON a.library_code = b.system_code
Pg配置允许远程访问ip:
pg_hba.conf和postgresql.conf的存放目录都在(9.5版本)/etc/postgresql/9.5/main
1 host all all 192.168.1.0/24 trust
表示允许网段192.168.1.0上的所有主机使用所有合法的数据库用户名访问数据库, /后面数字有 32 24 16 8 0 分别代表如下:
例如:
      32 -> 192.168.1.1/32 表示必须是来自这个IP地址的访问才合法;
      24 -> 192.168.1.0/24 表示只要来自192.168.1.0 ~ 192.168.1.255的都合法;
      16 -> 192.168.0.0/16 表示只要来自192.168.0.0 ~ 192.168.255.255的都合法;
      8 -> 192.0.0.0/16 表示只要来自192.0.0.0 ~ 192.255.255.255的都合法;
      0 -> 0.0.0.0/0 表示全部IP地址都合法,/左边的IP地址随便了只要是合法的IP地址即可;
Linux 清空文件内容:
echo “” > access.log
IDEA2017激活 可使用以下两种方法之一:

  1. 到网站 http://idea.lanyus.com/ 获取注册码。
    2.弹窗中选择最后一个页面license server,填入下面一种链接即可:
    http://idea.iteblog.com/key.php
    http://intellij.mandroid.cn/
      http://idea.imsxm.com/
    应博友要求,来个有图有真相,如下图所示:

linux命令du 统计当前文件夹下各文件夹大小并排序
du --max-depth=1 –BG/M |sort –n
将初始化类转为json串
1.package com.jingshou.jackson;
2.
3.import java.io.IOException;
4.import java.util.ArrayList;
5.import java.util.Date;
6.import java.util.List;
7.
8.import com.fasterxml.jackson.databind.ObjectMapper;
9.import com.jingshou.pojo.Class;
10.import com.jingshou.pojo.Student;
11.Student student1 = new Student();
12. student1.setId(5237);
13. student1.setName(“jingshou”);
14. student1.setBirthDay(new Date());
15.
16. ObjectMapper mapper = new ObjectMapper();
17.
18. // Convert object to JSON string
19. String Json = mapper.writeValueAsString(student1);
20. System.out.println("Change Object to JSON String: " + Json);
List集合:scala定义:
Var qq=List(1,2,3,4,5)
Nil空集合
Scala.collection.immutable.Nil.type=List()
Var ww=1::Nil
Var ee=2::ww List[Int]=List(2,1)
创建一个可变的lit集合:
Var rr=scala.collection.mutable.ListBufferInt
Rr +=2
Rr += (2,3)
Rr ++=List(1,2,3) scala.collection.mutable.ListBuffer[Int]=ListBuffer(2,2,3,1,2,3)
Rr -=2
Set
Var qq=Set(1,2,4)
Var qq=Set(1,2,3,”e”)
3.可变
Var ww=scala.collection.mutable.Set(1,2,3,4,”t”)
scala中解析JSON
scala中自带了一个Scala.util.parsing.json.JSON
然后可以通过JSON.parseFull(jsonString:String)来解析一个json字符串,如果解析成功的话则返回一个Some(map: Map[String, Any]),如果解析失败的话返回None。
所以我们可以通过模式匹配来处理解析结果:
[plain] view plain copy

1.val str2 = “{“et”:“kanqiu_client_join”,“vtm”:1435898329434,“body”:{“client”:“866963024862254”,“client_type”:“android”,“room”:“NBA_HOME”,“gid”:”“,“type”:”“,“roomid”:”“},“time”:1435898329}”
2.
3.val b = JSON.parseFull(str2)
4.b match {
5. // Matches if jsonStr is valid JSON and represents a Map of Strings to Any
6. case Some(map: Map[String, Any]) => println(map)
7. case None => println(“Parsing failed”)
8. case other => println("Unknown data structure: " + other)
9.}
两个list集合取差集。
Map<String,String> map1=new LinkedHashMap<String,String>();
Map<String,String> map2=new LinkedHashMap<String,String>();
map1.put(“b”,“2”);
map1.put(“a”,“1”);
map1.put(“c”,“3”);
map1.put(“e”,“5”);
map1.put(“f”,“6”);
map1.put(“d”,“4”);
map2.put(“a”,“1”);
map2.put(“bb”,“2”);
//map2.put(“c”,“3”);
// map2.put(“d”,“4”);
map2.put(“e”,“5”);
map2.put(“f”,“6”);
Map<String, String> difMap = getDifferenceSet(map1,map2);

System.out.println(difMap);
System.out.println(difMap.size());
private static Map<String, String> getDifferenceSet(Map<String, String> bigMap, Map<String, String> smallMap) {
Set bigMapKey = bigMap.keySet();
Set smallMapKey = smallMap.keySet();
Set differenceSet = Sets.difference(bigMapKey, smallMapKey);
Map<String, String> result = new HashMap<String,String>();
for (String key : differenceSet) {
result.put(key, bigMap.get(key));
}
return result;
}
运行起来:
取得当前时间的前一小时
Calendar c = Calendar.getInstance();
c.setTime(new Date());
c.set(Calendar.HOUR_OF_DAY, c.get(Calendar.HOUR_OF_DAY) - 1);
System.out.println(Sdf.format(c.getTime()));
从kafka中某一个topic中获取包括某一内容的数据
kafka-console-consumer --zookeeper 10.101.127.166 --topic 4227_danger --from-beginning | grep LIANHPIC2016
scala中final保留字
用于class或trait,表示不能派生子类型
用于类型成员,则表示派生的class或trait不能覆写它
Array[AnyRef]这种类型可以用到java中和scala中。
mysql查询所有元数据表名:
select * from information_schema.tables tt where table_schema=‘bigdata’ select table_name from information_schema.tables tt where table_schema=‘bigdata’;
Java生成随机整数:
Random rand = new Random();
int i = rand.nextInt(); //int范围类的随机数
i = rand.nextInt(100); //生成0-100以内的随机数
i = (int)(Math.random() * 100); //0-100以内的随机数,用Matn.random()方式 不建议
正则匹配find()方法
Find()是部分匹配,是查找输入串中与模式匹配的子串,如果该匹配的串有组还可以使用gorup()函数
Matches()是全部匹配,是将整个输入串与模式匹配,如果验证一个输入的输入是否为数字类型或其他类型,一般要用matches().

修改yum源为阿里yum源
1.进入yum源目录
cd /etc/yum.repos.d
2.备份旧的配置文件
mv CentOS-Base.repo CentOS-Base.repo.bak
3.下载阿里云yum并配置
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
4.清理缓存
yum clean all
5.更新
yum -y update

mysql数据库查询元数据信息:
在navicat中
1.查询数据库中所有表的信息
Select * from information_schema.tables where TABLE_SCHEMA=’数据库名’;
2.查询数据库中所有的表名:
Select TABLE_NAME from information_schema.tables where TABLE_SCHEMA=’数据库名’
3.查询(指定)数据库中哪些表有某个指定的字段 eg:查那些表有play_id字段
Select * from information_schema.columns where column_name=’play_id’ and table_schema=’数据库名’
4.查询字段含有制定字符串的表:
Select * from information_schema.columns where locate(“country”,column_name)>0
5.查库里的所有的空表:
Select table_schema,table_name,table_rows from information_schema.TABLES where table_schema=’数据库名’ and table_rows=0 order by table_name;
6.查看制定数据库中最近被更新的表:
Select table_name,update_time from information_schema.tables where table_schema=’数据库名’ order by update_time desc
7.查看指定数据库中最近新建的表:
Select table_name,create_time form inforation_schema.tables where table_schema=’数据库名’ order by create_time desc;
8.查看mysql数据库大小:
Select sum(DATA_LENGTH)+sum(INDEX_LENGTH) from information_schema.TABLES where TABLE_SCHEMA=’数据库名’
得到的结果是以字节为单位,除1024为K
9.查看数据库基本信息:
Select * from information_schema.TABLES where information_schema.TABLES.TABLES_SCHEMA=’数据库名’ and information_schema.TABLES.TABLE_NAME=’表名’;
List与Array两个明显的区别:

  1. List一但创建,其值不能被改变
    如前面的nums,改变其值的话,编译器会报错

  2. List具有递归结构(Recursive Structure),例如链表结构
    List类型和其它类型集合一样,它具有协变性(Covariant),即对于类型S和T,如果S是T的子类型,则List[S]也是List[T]的子类型

  3. 如果没有上传文件的话,完全可以使用ajax请求就好了,没必要这么折腾。那也就说明 ajax请求不能够上传文件,ajax只能传递文本类信息;
    使用maven进行本地编译和打包:

加参数时注意:应该时Array

而不是

否则,会报参数多异常。
Scala中private[this]
如果将field使用private来修饰,那么代表这个field是类私有的,在类方法中,可以直接访问类的其他对象的private field,这种情况下,如果不希望field被其他对象访问到,那么可以使用private[this],意味私有的field,只有本对象可以访问到。
伴生对象
如果有一个class,还有一个与class同名的object,那么就称这个object是class的伴生对象,class是object的伴生类。伴生类和伴生对象必须存放一个.scala文件中,bansheng 类和伴生对象,最大的特点在于,互相可以访问private field
dolphinSchedule和azkaban两者调度区别
dolphinSchedule azkaban

HA dolphin才开始用,本身就是ha,一台挂了另外一台也可以用. azkaban属于一个executor,多个worker,worker可以增加,但是增加的很麻烦需要重启executor然后还要激活worker

存储资源 dolphin采用的是hdfs存储文件,hdfs默认副本3 azkaban采用的mysql数据库存取文件,一般mysql是没有ha的,吐槽下数据库存的内容有部分是加密后的json数据,查看起来很麻烦

crontab调度 azkaban API支持两种,页面只支持一种就是crontab,还有一种是period(已废弃,但是还能调用)
period是指在一定范围时间内每隔xx秒xx分钟执行
crontab 不支持未来时间范围内,比如我现在写好project,但是想两个星期后crontab运行,支持从现在开始 dolphin支持在一定范围内使用crontab,毫无疑问更强大

定时管理 dolphin采用的是一个flow有多个schedule,起作用的是看哪个上线 azkaban采用的一个flow使用一个schedule

job执行 flow支持单job,向前运行,向后运行 azkabn中的job能够单独执行,能够和依赖执行,即从前运行到当前,但是不支持想后运行,通过api可以但是很麻烦

代码 azkaba使用的javaweb,采用的原生的servlet,看起来有点繁琐 dolphin采用的ssm框架,看起来简洁,查找问题和解读源码都十分方便

页面操作 dolphin有数据源管理,有文件管理,能够在线编辑和生成需要的脚本很方便,dolphin页面舒服,操作流程感觉很顺畅 azkaban的页面操作有点不合理就是很别扭
Hive并发执行开启及设置
// 开启任务并行执行
set hive.exec.parallel=true;
// 同一个sql允许并行任务的最大线程数
set hive.exec.parallel.thread.number=8;
hdfs查询某张表某目录下文件的总大小
hadoop fs -du /user/hive/warehouse/dw/dim_enterprise_info/dt=2023-07-18|awk ’ { SUM += KaTeX parse error: Expected 'EOF', got '}' at position 3: 1 }̲ END { print SU…{project.basedir}/lib/hive-common-2.1.1-cdh6.3.1.jar

正则表达式,匹配特殊符号的的字符:
where enterprise_name not rlike ‘^[!*()()±/:~{},.·、¥《》、※—’‘“”\’‘!【】A-Za-z0-9@&\KaTeX parse error: Expected 'EOF', got '#' at position 4: ;=?#̲%\\[\\]]+’;

linux 查看根目录下各文件的占用大小
使用 du -ah --max-depth=1 / 可以查看根目录下各个文件占用情况

Hive-sql函数coalesce
select coalesce(‘’,‘a’); 结果: ‘’
select coalesce(null,‘a’); 结果:’a’
所以在字段为’’的时候,不能直接用这个函数,需要做一些处理,比如字段name为‘‘
Select coalesce(if(name=’’,null,name),’b’,’c’)
Java实现简体和繁体相互转换:
https://blog.csdn.net/serialization_rong/article/details/121120921
get_json_object不支持 键为中文
select get_json_object(‘{“承办单位”:[“深圳亚太传媒股份有限公司展览中心”],“aaa”:[“深圳亚太传媒股份有限公司展览中心”]}’,‘ . a a a ′ ) ; 结果:深圳亚太传媒股份有限公司展览中心 s e l e c t g e t j s o n o b j e c t ( ′ " 承办单位 " : [ " 深圳亚太传媒股份有限公司展览中心 " ] , " a a a " : [ " 深圳亚太传媒股份有限公司展览中心 " ] ′ , ′ .aaa'); 结果:深圳亚太传媒股份有限公司展览中心 select get_json_object('{"承办单位":["深圳亚太传媒股份有限公司展览中心"],"aaa":["深圳亚太传媒股份有限公司展览中心"]}',' .aaa);结果:深圳亚太传媒股份有限公司展览中心selectgetjsonobject("承办单位":["深圳亚太传媒股份有限公司展览中心"],"aaa":["深圳亚太传媒股份有限公司展览中心"],.承办单位’);
结果:为NULL

Hive 修改表字段类型sql:
ALTER TABLE dw.mid_exhibition_center CHANGE COLUMN exh_center_id exh_center_id string;
Hive 添加表字段类型sql:
ALTER TABLE dw.app_enterprise_info ADD COLUMNS (regcapital_value double COMMENT ‘原始注册资金值’,regcapital_value_r double COMMENT ‘转化为人民币注册资金值’,norm_coin_type string COMMENT ‘规范币种’);
Java中 relace() replaceAll()方法使用
注意事项:需要替换字符串,需要使用旧的字符串重新接收一下
simple = simple.replaceAll(“主 办”,“主办单位”).replaceAll(“承 办”,“承办单位”);
海豚调度运行设置技巧
脚本运行不加日志重定向
如下:没有加日志重定向输出
kill -9 $(ps -ef|grep getMaxPartitionInfo|grep -v grep|awk ‘{print $2}’)
source /etc/profile
echo date "+%Y-%m-%d %H:%M:%S"
java -Dfile.encoding=UTF8 -Xms1g -Xmx1g -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -jar /root/mqw/jar/max_partition/getMaxPartitionInfo.jar
hive中 lateral view explode() 函数使用:
select xx.exh_center_id_split,a.*
from (select *
from dw.dim_exhibition_center
where dt in (select max(dt) from dw.dim_exhibition_center)
) a
lateral view explode(a.arr_exh_center_id) xx as exh_center_id_split
结果:

scala-maven-plugin版本与scala版本需要对应:

已知:scala2.13 对应 4.5.6
Scala2.12.15 对应 4.4.0

Hive sql 测试插入一条数据 报错:Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.tez.TezTask. Vertex failed, vertexName=Reducer 2, vertexId=vertex_16921569043
Caused by: java.lang.NullPointerException
insert overwrite table dw.dim_enterprise_info_certinfocommon partition(dt)
select ‘S122334545’,‘wr2343254’,‘hello’,1,‘手机电脑’,‘sds’,timestamp(current_date()),timestamp(current_date()),‘sak’,‘2023-08-22’;
select * from dw.dim_enterprise_info_certinfocommon
where dt = ‘2023-08-22’ limit 1;
select * from dw.dim_enterprise_info_certinfocommon
limit 1;
set hive.map.aggr = false;
解决:添加一个设置:set hive.map.aggr = false;

hive解析Hive解析Json数组
地址:https://blog.csdn.net/ytp552200ytp/article/details/125277965

hdfs查询某张表某目录下文件的总大小:
hadoop fs -du /user/hive/warehouse/dw/dim_enterprise_info/dt=2023-07-18|awk ’ { SUM += $1 } END { print SUM/(102410241024) }’
32.2068G
Yarn杀死所有的 accepted的应用程序
for i in yarn application -list | grep -w ACCEPTED | awk '{print $1}' | grep application_; do yarn application -kill $i; done
hive中构造struct类型和map类型

Hadoop MapReduce介绍、官方示例及执行流程
网址:https://zhuanlan.zhihu.com/p/591446173?utm_id=0

ES-HADOOP:

https://www.elastic.co/guide/en/elasticsearch/hadoop/7.6/configuration.html

英语代码单词
1.analogous英 [ə’næləgəs 类似的,可比尼的 类比的
2.conventional 英 [kən’venʃ(ə)n(ə)l] 美 [kən’vɛnʃənl] 习俗的,传统d,常见的,惯例的
conventional weapon常规武器,常规兵器 conventional lending 传统放款,常规放款
conventional depth 常规深度
3.invocation [,ɪnvə’keʃən] n祈祷 【法律】法院对另案的文件调取;法权的行驶
invocation list调用列表,实例的调用列表
method invocation 方法的调用;方法请求,方法激活
invocation interface 调用接口
4.frame [frem] n.框架结构 画面 vt设计;建造陷害; vi 有成功希望 adj 有木架的,有架构的 帧
Frame rate 帧率,帧速率 帧频 Lead Frame 导线架,引线框架,引线框
5.manipulate [mə’nɪpjulet] vt 操纵;操作 巧妙地处理,篡改
manipulate accounts 做假账 manipulate crane 换料机 manipulate market 操纵市场
6.allocate ['æləket] vt分配;拨出 使坐落于 分配 指定
write allocate 写分配 写分配法 写时申请 按写分配
allocate memory 分配内存 分配存储器
allocate distribute 分配
7.contiguous [kən’tɪɡjuəs] adj 连续的;邻近的;接触的
contiguous sense 接触感觉;接触感官
8.reserve
9.arbitrary [ˈɑːrbətreri] 任意的,任意角度 专断的
10.parallel 美 ['pærəlɛl] n.平行线 vt.使…与…平行 adj平行的;类似的,相同的并行的
11.cluster 美 ['klʌstɚ] n 群,簇 丛 串 vi 群聚 丛生 vt 使聚集
12.kick off 开始 开始于某事
13.concise
14.placeholder 占位符
placeholder ['pleis,həuldə] n. 【数学】占位符号
15.compose美 [kəm’poz] vt构成;写作,使平静;编写 vi 组成 作曲 排字
16.concurrent英 [kən’kʌr(ə)nt] adj.并发的;一致的,同时发生的 n.同时发生的事件
17.delegate英 [ˈdɛlɪˌɡeɪt; -ɡɪt; (for v.,) ˈdɛlɪˌɡeɪt] vt.委派…为代表 n.代表
18.embody英 [ɪm’bɒdɪ; em-] vt.体现,使具体化;具体表达 n人名
19.given 特定的
20.valid 有效的
21.deprecated英 [ˈdeprəkeɪtɪd] v. 不赞成;弃用;不宜用(deprecate的过去式及过去分词形式
22.parallelism
['pærəlelɪzəm] 平行度,并行性
23.indicate 英 ['ɪndɪkeɪt]
Vt.表明;指出;预示;象征
23.multiple英 ['mʌltɪpl] adj.多重的,多样的,许多的 n倍数;并联
24.launch英 [lɔːntʃ]
vt.发射(导弹火箭等);发起,发动使…下水
vi.开始,下水,起飞
n.发射;发行;投放市场;下水;汽艇
25. speculative ['spekjʊlətɪv] adj.投机的;推测的;思索性的
26. metrics英 ['metrɪks]n. 度量;作诗法;韵律学 指标
27.

  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值