Пример #1
0
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
Пример #3
0
    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)