阿里云API网关-后端过滤器-汇总查询结果

python

阿里云Dataworks数据服务使用API网关提供服务,因Api不支持汇总查询,故使用后端过滤器。

又因结果超过15000字符串结果无法转为json,所以要分开处理。

字符串提取带小数金额使用re.findall正则表达式

正则表达式含义

. # 点可代表一切字符

\ # 起转义作用

[...] # 指代方括号中的任意字符

\d # 指代数字0-9

\D # 指代非数字

\s # 指代一切空格,包括tab制表符、空格、换行等

\S # 指代非空格

\w # 指代大小写字母、数字和下划线

\W # 指代非大小写字母、数字和下划线

* # 匹配前面字符 >=0 次

+ # 匹配前面字符1次及以上

? # 匹配前面字符0次或1次

{m} # 匹配m次

{m,n} # 匹配m到n次

{m,} # 至少匹配m次

 

# -*- coding: utf-8 -*-

# event (str) : in filter it is the API result, in other cases, it is your param
# context : some environment information, temporarily useless
# import module limit: json,time,random,pickle,re,math
# do not modify function name
import json
import re
def handler(event,context):
    # load str to json object
    json_len = len(event)
    json_type = str(type(event))
    json_type1 = 0
    list_a = []
    a_dict = {}
    if json_len < 15000:
        obj = json.loads(event)
        data = obj['data']
        data_len = len(data)
        list_data = []
        amt_result = 0.0
        for i in range(data_len):
            list_data.append(data[i]['trans_amt'])
        for j in range(data_len):
            amt_result += list_data[j]
        amt_result = round(amt_result, 2)
        sales_name = ''
        mer_name = ''
        if data_len >= 1:
            sales_name = data[0]['sales_name']
            mer_name = data[0]['mer_name']
        else:
            sales_name = ''
            mer_name = ''
        result = {"sales_name": sales_name,"mer_name": mer_name, "trans_amt": amt_result}
    else:
        amt_result = 0.0
        list_data = [float(s) for s in re.findall(r'\d+\.*\d*', event)]
        data_len = len(list_data)
        for j in range(data_len):
            amt_result += list_data[j]
        amt_result = round(amt_result, 2)
        result = {"sales_name": sales_name,"mer_name": mer_name, "trans_amt": amt_result}
    return result
    # obj = obj[0]['trans_amt']
    # add your code here
    # end add
    # return obj,a

 

posted @ 2021-06-09 17:11  hehenihaoa  阅读(121)  评论(0)    收藏  举报