说明
有时候需要做两个表键值的比对,字符型的键值以md5为例,即使是1亿的记录也就是是3.2GB的大小,放在本地是完全可行的。这里写一个从mysql从获取键值集合的函数
内容
函数
import tqdm
# msyql:通过一个range变量获取某个key变量的集合
def mysql_get_key_set_by_range_var(table_name, key_var, range_var='id',range_start = None, range_end= None, step=10000,mysql_config = None, fs = None):
range_list = list(range(range_start,range_end, step))
range_list1 = range_list + [range_end]
get_mid_sql = '''select %s from %s where id >= %s and id < %s'''
table_key_set = set()
for i in tqdm.tqdm(range(len(range_list1)-1)):
tem1 = fs.mysql_exe_sql_with_cursor(get_mid_sql % (key_var,table_name,range_list1[i], range_list1[i+1]),mysql_config)
tem1_set = set([x[0] for x in tem1])
table_key_set = tem1_set |table_key_set
return table_key_set
一般每个mysql表都会设置id自增主键,所以默认的范围过滤使用id
。对于其他的Nosql库,按照统一时间轴的规范一定会有slot
时隙变量,一般按照时序变量读取即可。
使用
the_set = mysql_get_key_set_by_range_var('YOURTABLE', 'THE_KEY',range_start=1, range_end= 10000000, mysql_config=YOURCONFIG, fs=fs)