1、Hive
1、not in 后的表字段不能为空,否则无效。
create table test0201_1 as select null as id union all select 1 as id;
create table test0201_2 as select 2 as id union all select 1 as id;
select count(1) from test0201_2 where id not in(select id from test0201_1); --0
select count(1) from test0201_2 t1
left join test0201_1 t2
on t1.id=t2.id
where t2.id is null; --1
2、如果表是分区表,表结构有过变动的话,表结构和指定分区的表结构是不一样的。
3、Hive: 遇到了在分区表陆续日期新增列,前一列被后一列替换的场景。通过查找元数据发先,在no.1日期的分区表结构可查到列1,在no.2日期的分区表结构没有列1,有列2。以后避免在impala新增列,可能是这方面的问题。
4、Hive:表达式就是字段,窗口函数的排序如果有不同场景对应不同的排序策略,可以这样:row_number() over(partition by part_col order by col1 asc,case when type=1 then colx end asc,case when type=2 then colx end desc)
2、Shell、Mysql
1、Shell连接Mysql数据库、MySQL命令行
参考:MySQL命令行参数完整版:
HOSTNAME="xxx.xxx.xxx.xxx"
PORT="xxxx"
USERNAME="xxxx"
PASSWORD="xxxx"
DBNAME="xxx"
select_sql="select group_concat(schedule_time) from dag_list where id in(select dag_list_id from task_list)"
#执行查询*
result=`mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -Bse "${select_sql}"`
#B参数:打印结果,使用tab作为列间隔符,每个行占用新的一行;e参数:statement 执行语句并退出;s参数:沉默模式。产生少的输出。
schedule_time_str=`echo ${result} | awk '{print $1}'` #获取到的第1个值
schedule_time_array=(${schedule_time_str//,/ }) #以逗号分割字符串
for schedule_time in ${schedule_time_array[@]}
do
echo ${schedule_time}
done
2、Shell 实现根据逗号分割字符串
#!/bin/bash
string="hello,shell,haha"
#与/之间与分割的字符 ,另外/后有一个空格不可省略
array=(${string//,/ })
for var in ${array[@]}
do
echo $var
done
3、mysql的 =不一定是精准匹配,和DBA设置有关,如果有特殊字符可能看不出来,通过length可检查长度。
4、mysql唯一键能有多个空值吗? 能
3、Python
1、python时间运算
#1、添加半小时
import datetime
d1 = datetime.datetime.now()
d3 = d1 + datetime.timedelta(minutes=30)
print(d1)
print(d3)
#2、字符串转时间对象
execution_datetime = dateutil_parser.parse("2021-02-02 15:44" + " +08:00") #转换时区
#3、指定时间格式转换:
latest_complete_time = execution_datetime.strftime("%H:%M") #15:44
2、Python3 JSON 数据解析 Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数:
json.dumps(): 对数据进行编码。
json.loads(): 对数据进行解码。
探索json:
>>> dict_tmp = {"name":"anla"}
>>> print(dict_tmp)
{'name': 'anla'}
>>> import json
>>> json_obj = json.dumps(dict_tmp)
>>> print(json_obj)
{"name": "anla"}
>>> type(json_obj)
<class 'str'>
>>> dict_tmp = json.loads(json_obj)
>>> print(dict_tmp)
{'name': 'anla'}
>>> type(dict_tmp)
<class 'dict'>
3、Python assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。
断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况
4、isinstance(object, classinfo)
object – 实例对象。
classinfo – 可以是直接或间接类名、基本类型或者由它们组成的元组。
如果对象的类型与参数二的类型(classinfo)相同则返回 True,否则返回 False。