问题:数据量大,分页查询时卡顿,如何解决?

解决:通过join方式,先查询主键,再查询内容

方法:

offset_num = (page - 1) * pagesize
sub_q = select(
    User.id).filter_by(**obj_get).order_by(
    User.id.asc()).offset(
    offset_num).limit(pagesize).subquery()
q = select(
    User.uid, User.username, User.fullname, User.national_id, User.phone, User.email,
    User.gender, User.last_login, User.status, User.create_time,
    User.expire_time).join(sub_q, User.id == sub_q.c.id)
r = await db.execute(q)
return r.all()

阅读全文

问题:redis如何只允许特定ip访问?

解决:redis好像不能指定特定ip访问,因为redis的配置文件中bind是绑定redis所在服务器的ip,而不是特定访问redis的ip

bind:是绑定本机的IP地址,(准确的是:本机的网卡对应的IP地址,每一个网卡都有一个IP地址),而不是redis允许来自其他计算机的IP地址。

如果指定了bind,则说明只允许来自指定网卡的Redis请求。如果没有指定,就说明可以接受来自任意一个网卡的Redis请求。

阅读全文

问题:数据库中出现好多重复数据,现在需要只保留最先的一条数据

方法:

SELECT
    * 
FROM
    table_name AS ta 
WHERE
    ta.唯一键 <> ( SELECT max( tb.唯一键 )
                  FROM table_name AS tb 
                  WHERE ta.判断重复的列 = tb.判断重复的列 );

阅读全文

问题:报错:return code 3 from org.apache.hadoop.hive.ql.exec.spark.SparkTask
Job failed with org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 22.0 failed 4 times, most recent failure: Lost task 0.3 in stage 22.0 (TID 57, had
oop03, executor 2): UnknownReason

解决:因为语句中collect_set(named_struct))顺序有错

阅读全文

问题:hive的字段是array<struct>类型,如何将数据转换成字符串?

解决:一步步拆解

方法:
hive字段

`page_stats` ARRAY<STRUCT<page_id:STRING,page_count:BIGINT,during_time:BIGINT>> COMMENT '页面访问统计'

数据生成方法

select
    mid_id,
    collect_set(named_struct('page_id',page_id,'page_count',page_count,'during_time',during_time)) page_stats
from
(
    select
        mid_id,
        page_id,
        count(*) page_count,
        sum(during_time) during_time
    from dwd_page_log
    where dt='2020-06-14'
    group by mid_id,page_id
)t2
group by mid_id

阅读全文