hive_shell_mysql_python.杂记

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。

猜你喜欢

转载自blog.csdn.net/AnlaGodness/article/details/113518408