话说中文社区曾有几个HIVE友的文章我很喜欢看,怎么说呢,有些“文章”的感觉,言之有物、文字驾驭功夫了得、情感也比较细腻。
(图源 :pixabay)
可惜这些优秀的作者们,在HIVE上已经消失了好长时间,甚至微信群中都极少见到他/她们的精彩发言,甚是遗憾。
我不由想起网络上经常见到的一个梗:
先生当初退出文坛,我是坚决反对的,也曾苦苦挽留过。先生惜字如金,行文如刀,如剑,如号角,如灯盏……都是那么让人振聋发聩,耳目一新。不曾想先生决绝的离去,背影如同流星划过天际,短暂却耀眼,但这却让中国文坛倒退了三十年!
那么这些年,中文社区都流失了哪些人口呢?我突然想到,或许可以用HiveSQL来分析一下,正好这两天刚刚完成一键建立到HiveSQL转发服务的脚本,玩得正上瘾呢。
首先,如何定义中文社区的人口呢?我将其粗略定义为:
最近3年有在'hive-105017'发表文章(即主贴)的用户
根据这个定义我们可以写出如下查询
SELECT author
FROM comments
WHERE category = 'hive-105017'
AND depth = 0
AND created > DATEADD(YEAR, -3, GETDATE())
GROUP BY author
其中depth = 0
,表示我们只查询发表文章(主贴)的用户
DATEADD(YEAR, -3, GETDATE()) ,会得到3年前的当前时间。
查询后我们得到类似如下的结果,原来这三年曾经有750人在中文社区发帖呢(当然也包括之前发现的僵尸网络用户)
没错,上述查询返回结果中包含了只发一两篇主贴的僵尸网络用户。当然了,发一两篇的不一定一定是僵尸网络用户,但是不活跃用户没跑了。所以我们过滤掉这部分中户(僵尸网络以及不活跃用户)
修正后的查询:
SELECT author, COUNT(*) AS posts
FROM comments
WHERE category = 'hive-105017'
AND depth = 0
AND created > DATEADD(YEAR, -3, GETDATE())
GROUP BY author
HAVING COUNT(*) >= 2
ORDER BY author;
部分返回结果如下(可见这部分用户有334个):
接下来,我们要从这334个用户中找出来失踪人口,我们暂定为最近一年没有在中文社区发帖的用户。
所以修改过滤条件为下边这个样子:
HAVING COUNT(*) >= 2
AND MAX(CASE WHEN created > DATEADD(YEAR, -1, GETDATE()) THEN 1 ELSE 0 END) = 0
部分返回结果如下(可见有177个失踪人口,呜呜呜)
我们还知道可以通过如下语句查询和计算用户的有效HP
SELECT Name, (Vesting_shares + Received_vesting_shares - Delegated_vesting_shares) * Hive_per_vest AS E_HP
FROM Accounts, DynamicGlobalProperties
WHERE name = 'xxx'
综合之前的查询,我们给查询结果添加上有效HP(E_HP)显示
SELECT c.author,
COUNT(*) AS posts,
(a.Vesting_shares + a.Received_vesting_shares - a.Delegated_vesting_shares) * d.Hive_per_vest AS E_HP
FROM comments c
JOIN Accounts a ON c.author = a.Name
JOIN DynamicGlobalProperties d ON 1 = 1
WHERE c.category = 'hive-105017'
AND c.depth = 0
AND c.created > DATEADD(YEAR, -3, GETDATE())
GROUP BY c.author, a.Vesting_shares, a.Received_vesting_shares, a.Delegated_vesting_shares, d.Hive_per_vest
HAVING COUNT(*) >= 2
AND MAX(CASE WHEN c.created > DATEADD(YEAR, -1, GETDATE()) THEN 1 ELSE 0 END) = 0
ORDER BY c.author;
嗯,这回结果更丰满了
其中需要解释的是GROUP BY c.author, a.Vesting_shares, a.Received_vesting_shares, a.Delegated_vesting_shares, d.Hive_per_vest
因为后边的字段要在计算字段在计算 E_HP用到,所以需要加在这里。
再加上排名,以及最后在CN区发帖过去了多少天,再加上一些格式上的调整(对了,把最近三年发帖数改成>3
,用以屏蔽掉更多僵尸网络用户等),最终筛选出来如下87个失踪超一年的人口。
我们还可以通过修改SQL,来查询失踪超过半年,或者2个月,或者30天以上的人口。
比如通过以下语句过滤出失踪超过30天以上的用户,快来看看里边有没有你呀?
HAVING COUNT(*) > 3
AND MAX(CASE WHEN c.created > DATEADD(DAY, -30, GETDATE()) THEN 1 ELSE 0 END) = 0
需要补充说明的是,以上失踪人口登记表仅仅针对中文社区哦。
有些用户可能还活跃在HIVE上,比如在其它社区(或者没使用社区功能,仅使用标签)发帖,那么也会被列入失踪人口哦。
所以,问题来了,你在“失踪”人口之列嘛?你为啥玩起了失踪?什么时候再回到中文社区大家庭呢?
AT姐現在上班,我過2天見到她,捉她回來
@kathyto 召唤 🤣
加油!
啊啊,用吸星大法把HIVE的失踪人口吸回来哈哈。。
小影快快施法
来了,来了。。。
是时候轮到我释放超级无敌逗比法术的时候了,,,先转两个圈圈,然后在天空画三个爱心形状,再对着南方大声喊出那句:“HIVE中文区失踪的帅哥美女们速速回归,速速回归!!!!”
基本上被我拉来的朋友都消失了🥹
一声叹息,哎!
O哥把SQL玩的真6
瞎玩而已
Hi, O哥
哇,炸出来一个失踪人口
日更很难 但是坚持很酷!加油
今天一个一个私聊了😅
一个一个?😲 那边看都很多人了
我认识的 O(∩_∩)O哈哈~ 不认识的没办法联系啊 哈哈
厉害了,表妹!
中文区的朋友好多啊,可是怎么都没有看到过写文呢,可能他们有更重要的事去做了吧
也是曾经辉煌过!
加油,再创辉煌!
坚持日更,慢慢完善文章质量,oh year!
我仔细地在列出名单找我自己,哈哈,我在三年失踪名单里。从今年开始,希望自己能坚持下去,加油💪💪💪
那不是三年失踪名单
那是三年内发过主贴的名单
第五个1289好像是外文区的 只是写中文时用过咱们社区标签🏷
嗯,所以说程序过滤不如人工过滤精准
3年内她在中文社区发过11篇主贴呢,也算不少了
winniex
以前互动过的,温妮
@travelgirl 還在
O哥喊妳呢!偶爾也發發中文帖回來玩玩吧!
嗯,只是中文社区失踪人口,不是HIVE失踪人口,哈哈
哈哈 我在49 在筛选估计看不到我呢
昨天失踪1 天,今天立马更新😄
你好, 我在“失踪”人口之列,還是在失踪一年人口中HP第二高的人🤣
大佬威武