def getUserAudienceValue(audience_id): # "统计自有人群信息" 少一种mix_uid flag_mapping = {'md5imei':'\'md532_imei\'','imei':'\'std_imei\'', 'idfa':'\'idfa\'', 'mac':'\'mac\'', 'md5idfa':'\'md532_idfa\'','md5mac':'\'md532_mac\'', 'sha1imei':'\'shal_imei\'', 'sha1idfa':'\'sha1_idfa\'','sha1mac':'\'sha1_mac\'','mix_uid':'\'mix_uid\'' } print '开始统计自有人群输入UV...' user_in_uv_tmp = USER_IN_UV % audience_id status, std_out = HiveExe2([user_in_uv_tmp], SORUCE_DATABASE, 'default') if status == 0: print '自有人群输入UV:in_uv='+str(std_out) val = {'in_uv':std_out.strip()} else: print '自有人群输入UV统计失败:'+std_out sys.exit(1) #更新报告生成状态--40% updateTableValue('audience', 'state', '40', 'audience_id', audience_id) print '开始生成用户ID临时表...' user_id_tab_tmp = DMP_SRV_AUDIENCE_IN_TMP % {'tmp_table':audience_id, 'audience_id':audience_id} status, std_out = HiveExe2([user_id_tab_tmp], SORUCE_DATABASE, 'default') if status == 0: print '生成用户ID临时表完成' else: print '生成用户ID临时表失败:' dropTmpTables() sys.exit(1) #更新报告生成状态--50% updateTableValue('audience', 'state', '50', 'audience_id', audience_id) print '开始生成用户关系临时表...' audience_id_split = audience_id.strip().split('_') # 9_user_mixUid_20170523114502 if len(audience_id_split) == 4: flag_tmp = audience_id_split[2] flag = flag_mapping[flag_tmp.lower()] else: print '无法获取用户ID类型' dropTmpTables() sys.exit(1) #判断是那种加密方式 if(flag.__contains__("md5")): # flag= flag= '\''+flag.split('_')[1] DMP_UM_USER_REL_DT_TMP = DMP_UM_USER_REL_DT_TMP_MD5 elif(flag.__contains__("sha1")): flag= '\''+flag.split('_')[1] DMP_UM_USER_REL_DT_TMP = DMP_UM_USER_REL_DT_TMP_SHA1 if(flag=='imei'): flag = 'std_imei' pvs = getUserRelDayIds() conditions = COMM_COND + " AND flag=" + flag + " AND " + pvs if(flag.__contains__("mix_uid")): conditions = COMM_COND + " AND flag in ('imei','idfa') AND " + pvs DMP_SRV_AUDIENCE_DETAIL_ADD_PARTITION = DMP_SRV_AUDIENCE_DETAIL_ADD_PARTITION_MIX_UID user_rel_tab_tmp = DMP_UM_USER_REL_DT_TMP % {'audience_id':audience_id, 'conditions':conditions} status, std_out = HiveExe2([user_rel_tab_tmp], SORUCE_DATABASE, 'default') if status == 0: print '生成用户关系临时表完成' else: print '生成用户关系临时表失败:' dropTmpTables() sys.exit(1) #更新报告生成状态--60% updateTableValue('audience', 'state', '60', 'audience_id', audience_id) print '开始自有人群详情匹配...' data_add_partition = DMP_SRV_AUDIENCE_DETAIL_ADD_PARTITION % {'tmp_table':audience_id, 'audience_id':audience_id} status, std_out = HiveExe2([PARTITION_DYNAMIC + data_add_partition], SORUCE_DATABASE, 'default') if status == 0: print '自有人群详情匹配成功' else: print '自有人群详情匹配失败:'+std_out dropTmpTables() sys.exit(1) print '开始删除临时表 %s...' % audience_id status = dropTmpTables() if status == 0: print '删除临时表 %s成功' % audience_id else: print '删除临时表 %s失败' % audience_id sys.exit(1) #更新报告生成状态--70% updateTableValue('audience', 'state', '70', 'audience_id', audience_id) print '开始自有人群匹配ID...' dmp_srv_audience_data_add_partition = DMP_SRV_AUDIENCE_DATA_ADD_PARTITION % {'audience_id':audience_id} status, std_out = HiveExe2([PARTITION_DYNAMIC + dmp_srv_audience_data_add_partition],SORUCE_DATABASE, 'default') if status == 0: print '自有人群匹配ID成功' else: print '自有人群匹配ID失败:'+std_out dropTmpTables() sys.exit(1) print '开始统计自有人群匹配UV...' user_out_uv_tmp = USER_OUT_UV % audience_id status, std_out = HiveExe2([user_out_uv_tmp], SORUCE_DATABASE, 'default') if status == 0: print '统计自有人群匹配UV:out_uv='+str(std_out) val['out_uv'] = std_out.strip() else: print '统计自有人群匹配UV失败:'+std_out sys.exit(1) print '开始统计自有人群匹配MIXUID UV...' mix_uid_out_uv_tmp = MIX_UID_OUT_UV % audience_id status, std_out = HiveExe2([mix_uid_out_uv_tmp], SORUCE_DATABASE, 'default') if status == 0: print '统计自有人群匹配MIXUID UV:mixuid_out_uv='+str(std_out) val['mixuid_out_uv'] = std_out.strip() else: print '统计自有人群匹配MIXUID UV失败:'+std_out sys.exit(1) print "val=", json.dumps(val) return json.dumps(val)
def mix_data_audience(provinces, tags, audience_id): #更新报告生成状态--10% print '开始生成品联人群...' updateTableValue('audience', 'state', '10', 'audience_id', audience_id) std_tags_cond, pro_tags_cond = getTagsCondition(tags) if std_tags_cond != '': pro_cond = getDayIdsCondition(STAND_TAGS_TABLE, provinces) std_cond = COMM_COND + " AND " + pro_cond + " AND " + std_tags_cond args_sql = { 'target_table': SORUCE_DATABASE + '.' + STAND_TAGS_TABLE, 'audience_id': audience_id, 'conditions': std_cond } #标准人群详情 std_tags_detail_tmp = PARTITION_DYNAMIC + STAND_TAGS % args_sql print '开始获取标准人群详情...' status = HiveExe([std_tags_detail_tmp], 'mixreport', 'default') if status != 0: print '获取标准人群详情失败!' return 1 print '获取标准人群详情成功' else: print '未选择标准标签%s' % tags if pro_tags_cond != '': #更新报告生成状态--30% updateTableValue('audience', 'state', '30', 'audience_id', audience_id) pro_cond = getDayIdsCondition(PROFILE_TAGS_TABLE, provinces) cont_cond = COMM_COND + " AND " + pro_cond + " AND " + pro_tags_cond args_sql = { 'target_table': SORUCE_DATABASE + '.' + PROFILE_TAGS_TABLE, 'audience_id': audience_id, 'conditions': cont_cond } #兴趣人群详情 cont_tags_detail_tmp = PARTITION_DYNAMIC + PROFILE_TAGS % args_sql print '开始获取兴趣人群详情...' status = HiveExe([cont_tags_detail_tmp], 'mixreport', 'default') if status != 0: print '获取兴趣人群详情失败!' return 1 print '获取兴趣人群详情成功' else: print '未选择兴趣标签%s' % tags args_sql = { 'target_table': 'mixreport.dmp_srv_audience_detail', 'conditions': audience_id } #品联人群ID mix_uid_tmp = PARTITION_DYNAMIC + MIX_UID_AUDIENCE % args_sql print '开始获取品联人群ID...' #更新报告生成状态--50% updateTableValue('audience', 'state', '50', 'audience_id', audience_id) status = HiveExe([mix_uid_tmp], 'mixreport', 'default') if status != 0: print '获取品联人群ID失败!' return 1 print '获取品联人群ID成功' #更新报告生成状态--80% updateTableValue('audience', 'state', '80', 'audience_id', audience_id) args_sql = { 'target_table': 'mixreport.dmp_srv_audience_data', 'conditions': audience_id } audience_uv_tmp = MIX_AUDIENCE_UV % args_sql status, std_out = HiveExe2([audience_uv_tmp], 'mixreport', 'default') print 'status= %s, std_out= %s' % (str(status), std_out) if status == 0: std_out_split = std_out.strip().split('\t') if len(std_out_split) == 2: valus_js = json.dumps({'out_uv': std_out_split[1]}) print 'value_js=' + valus_js updateTableValue('audience', 'value', valus_js, 'audience_id', audience_id) else: print '获取品联人群UV失败' print '获取品联人群UV成功' #更新报告生成状态--80% updateTableValue('audience', 'state', '100', 'audience_id', audience_id) completed_time = time.strftime(ISOTIMEFORMAT, time.localtime()) updateTableValue('audience', 'update_time', completed_time, 'audience_id', audience_id) updateTableValue('audience', 'is_run', '0', 'audience_id', audience_id) print '生成品联人群成功' return status
else: print '统计自有人群匹配MIXUID UV失败:'+std_out sys.exit(1) print "val=", json.dumps(val) return json.dumps(val) if __name__ == '__main__': args = sys.argv if len(args) == 4: audience_id = args[1] file_name = args[2] user_name = args[3] #更新报告生成状态--10% updateTableValue('audience', 'state', '10', 'audience_id', audience_id) uploadUserFilesToHdfs(file_name, audience_id, user_name) #更新报告生成状态--30% updateTableValue('audience', 'state', '30', 'audience_id', audience_id) try: valus_js = getUserAudienceValue(audience_id) except Exception, e: dropTmpTables() print '获取自有人群uv失败' #更新报告生成状态--80% updateTableValue('audience', 'state', '80', 'audience_id', audience_id) updateTableValue('audience', 'value', valus_js, 'audience_id', audience_id) #更新报告生成状态--100% updateTableValue('audience', 'state', '100', 'audience_id', audience_id) completed_time = time.strftime(ISOTIMEFORMAT, time.localtime()) updateTableValue('audience', 'update_time', completed_time, 'audience_id', audience_id)