自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 资源 (10)
  • 收藏
  • 关注

原创 经验总结7—数据准确性

1、一个版本开发过程,可能琐碎的需求比较多,一定要记下来,否则后面可能会忘记或遗漏,不要太自信自己的记忆力2、A left join B on 1=1 ,一般用来把B表的字段加到A表的每一行上,比如B表计算出当天是否是工作日,这是一个常量,和A表没有关系,所以就直接加到A表的每一行3、数据报表开发是件很严谨的事,有的报表是全国各机构的人都在看的,一旦数据准确性出现问题,会引来很多人的质问,一定要重视4、如果A和B是相同的表结构,只是名称不同,则两张表在关联取数的时候一定要写出具体的字段名并加表名,如.

2021-02-17 12:47:53 2047

原创 经验总结6—数据发散

1、取分区数据时,如果后续需要回刷历史数据,且可以一次取多天的数据,则可以写成where dt >= ‘start_date’ and dt < ‘end_date’,这样可以根据传入的开始、结束时间取多天的数据,如果只需取一天的数据,则where dt = ‘start_date’2、做join或left join时一定要检查左表的关联字段是否有null值,如果有则要进行nvl(col_1,concat(‘hive’,rand()))处理,如果右表关联字段有重复值则要去重,否则数据会发.

2021-02-17 12:42:57 4709

原创 经验总结5—集市迁移

1、在写多个union all的时候,一定要注意每个union all都要写select,在复制的时候很容易丢掉2、运算时注意null的情况,sum(null)会将null当0处理,但是+ - * / 有null时结果为null3、做迁移的时候对于同一个字段,一定要确认维值是否相同,如果不一样数据会对不上4、迁移的时候如果数据对不上,则先核查脚本逻辑,因为在写的过程中很容易写错,尤其是复制粘贴过来的,然后再看维值是否有差异,最后看上游数据是否对得上,每次对比都要认真落到实处,不要有应付的心态,否则还.

2021-02-17 12:34:52 259

原创 经验总结4—沟通协作

1、复制分区表数据时可以使用动态分区,如果写死分区会报错,显示多出一个字段,因为分区也是一个字段insert overwrite into table tab_name partition (dt) select * from scr_tab where dt = ‘2021-02-17’2、在excell里面进行数据核对的时候,一定要保存好数据,删除不需要的的sheet页更要小心,删除就无法恢复,尽量把临时的sheet页放到最后3、做迁移的时候一定要留意数据加工过程中做了哪些转换,尤其是数据加工链.

2021-02-17 12:30:45 224

原创 编程规范

1、注释- -/**/2、缩进代码难以阅读的首要原因是没有进行缩进,其次是没有对长代码划分模块,所有的都揉在一起好的示例select col_1, col_2, col_3, count(*) from tab where col_1 = 'a' and col_2 = ( select max (col_2) from tab2 where col_3 = 100 .

2021-01-31 18:52:46 112

原创 SQL优化

1、参数是子查询时,使用exists替代in,或者使用连接替代in,虽然in非常方便,但是会成为性能瓶颈2、会进行排序的代表性运算有:group byorder by聚合函数(sum count avg max min)distinct集合运算符(union intersect except)窗口函数(rank row_number等)通过指定带索引的列作为group by和order by的列,可以实现高速查询3、使用索引时,条件表达式的左侧应该是原始字段,把运算的表达式放到查询条件的.

2021-01-31 18:45:59 122

原创 三值逻辑

1、sql语言里除了true和false,还有第三个值unknown2、null既不是值也不是变量,它只是一个表示没有值的标记,而比较谓词只适用于值,因此对并非值的null使用比较谓词本来就没有意义,对null使用比较谓词后得到的结果总是unknown3、三个真值之间的优先顺序:(1) and的情况 false>unknown>true(2) or 的情况 true>unknown>false4、case表达式和where一样,只认可真值true的条件,而不会认可.

2021-01-31 18:35:41 705

原创 SQL进阶

1、为了提高sql代码的可移植性,避免使用oracel中的decode和mysql中的if函数,而使用标准的case函数,与decode相比,case函数中可以使用in、like、< >等谓词,表达能力较强2、使用case函数时,when子句要注意条件的排他性3、case函数中的else是可选的,如果不写,其结果为else null,但是最好养成习惯写上4、group by中可以使用select子句中简单case函数指定的别名,但是只能在postgresql和mysql中使用,在orac.

2021-01-31 18:31:24 230

原创 MySQL正则表达式

mysql中的正则表达式匹配自3.23.4版本后不区分大小写,如果需要可以使用BINARY关键字,如where name regexp binary ‘Jack.000’正则表达的分类:1、基本字符匹配% 匹配任意字符. 匹配任意一个字符| 匹配其中之一 100|200[] 匹配几个字符之一 [123]等价于1|2|32、匹配范围[0-9][a-z]3、匹配特殊字符为了匹配特殊字符,必须用\为前导如:为了匹配反斜杠()字符本身,需要使用\\ ,其他还有\. \- \?\也可以用.

2021-01-31 17:55:03 183

原创 窗口函数

1、窗口函数也称为OLAP函数,意思是对数据库数据进行实时分析处理,mysql目前不支持窗口函数2、窗口函数大体分为两类(1) 能够作为窗口函数的函数,sum avg count max min(2) rank dense_rank row_number等专用窗口函数3、窗口函数兼具分组和排序两种功能:rank() over(partition by order by )其中partition by能够设定排序的对象范围,order by能够指定按照哪一列、何种顺序进行排序,partion by.

2021-01-31 17:44:30 443

原创 集合

1、加法union表的加法union(并集),会对表数据进行除重,如果要包含重复项则加all注意:(1)作为运对象的记录的列数必须相同(2)作为运算对象的记录中列的类型必须一致(3)可以使用select语句,但是order by子句只能在最后使用一次2、乘法intersect表的乘法intersect(交集),应用于两张表,选取出它们当中公共的记录,如果保留重复行则加all,mysql尚不支持3、减法记录的减法except,mysql尚不支持,oracle中使用的是minus4、uni.

2021-01-31 17:22:43 98

原创 常用函数

1、abs绝对值2、mod求余3、round四舍五入4、||拼接,进行字符串拼接时,如果其中包含null,则结果也是null且该函数在sql server 和mysql中无法使用,sql server中使用+mysql中使用concat函数5、length字符串长度,sql server中使用len,注意同样是这个函数,不同dbms的执行结果也不尽相同6、lower小写转换7、upper大写转换8、replace字符串替换9、substring字符串截取postg.

2021-01-18 22:15:19 114

原创 事务和视图

一、 事务事务是需要在同一个处理单元中执行的一系列更新处理的集合,对于银行转账这种需要在同一个处理单元中执行的一系列更新操作的情况,一定要使用事务1、创建事务(1) SQL Server、PostgreSQLbegain transaction(2) MySQLstart transaction(3) Oracle、DB2无2、commit是提交事务包含的全部更新处理的结束指令,相当于文件处理中的覆盖保存,一旦提交,就无法恢复到事务开始前的状态了3、ROLLBACK是取消事务包含的全部.

2021-01-18 21:57:00 253

原创 SQL基础知识

1、有代表性的关系型数据库有:OracleSQL ServerDB2PostgreSQLMySQL2、SQL语句分为三类(1) DDL,数据定义语言CREATE DROP ALTER(2) DML,数据操纵语文INSERT SELECT UPDATE DELETE(3)DCL,数据控制语言COMMIT ROLLBACK GRANT REVOKE3、建表语句create table <表名>(<列名1> <数据类型> <该列所需约束&g.

2021-01-17 21:34:10 412

原创 经验总结3—字段别名

1、hive建表时,如果表已经存在,则脚本运行会报错,但是任务显示成功,所以建表完成后要看下日志详情2、如果需要在测试环境里面测任务3,但是又依赖任务1,2,也就是必须等1,2跑完才能跑3,则可以从生产中取1,2的表数据,这样可以节省时间,前提是有权限3、新建任务或字段名的时候,一定要先查下生产是否已存在任务或表中已有字段名,不要跟已有的重名4、取字段的时候要加上别名,否则如果2张或多张表有相同的字段,容易混淆,还容易报错5、在测试脚本时,如果需要配置系统变量,则一定要确定系统变量中是否包含了脚本中

2020-10-21 00:12:27 378

原创 经验总结2—任务时效性

1、如果开发的脚本较多,哪些数据完成了对比,一定要确认并记录下来,别鸡爪似的东挠一下西挠一下,否则后面又要返回去确认一下,有一是一,落到实地2、在开发前先制定一个命名规范,比如验证数的excell,可以是车队指标集合_二级机构_日表_数据验证3、对于已经完成的新旧表结构和脚本,如果后续需要经常复制粘贴,又怕不小心损坏原脚本,可以对脚本进行权限设置,设为只读或加密码4、建表前一定要确认表是否已经存在,尤其是修改生产已有的任务,否则会删除已有表数据,在测试环境做开发测试的时候,最好复制原表结构并加上_XX

2020-10-21 00:03:42 845

原创 经验总结1—数据核对

1、做数据核对的时候,要具体情况具体分析,不要思维固化,不要一看到少数据,就各种查上游表2、先动脑再动手,深度思考,抽丝剥茧,一步步到位,最终定位问题3、如果数据对不上,看上游表的跑数日期的任务是否跑成功了(看任务日志是否有报错),或者是否有重跑数据4、从SVN上取生产脚本时,要确定是否与生产环境日志中的一致,有可能开发同事修改过脚本,然后直接替换了生产脚本,但是没有更新到SVN,这样你从SVN拿到的就不是最新的5、如果hive跑任务失败了,可以在hadoop日志页面点击不同的看不同的日志,有3个c

2020-10-20 23:58:40 1814

原创 精力管理9—付诸行动

不管面对什么样的事情,要么全情投入,要么有策略地离开。细致规划放松和恢复时间。有研究机构的实验表明,人类行为只有5%是受自我意识支配的。我们是习惯的造物,因而我们的行为有95%都是自动反应或对于某种需求或紧急情况的应激反应。成功在于认识到良好习惯的力量,将后天习得的精准行为融入日常,接受清晰的目标感的支配。积极的精力仪式习惯有三点重要性。首先它要确保精力有效使用在当下的任务上,其次能够减少行...

2020-05-04 22:10:01 245

原创 精力管理8—正视现实

全情投入和最优表现取决于调动积极精力的能力。面对现实让我们有机会理解和应对负责情感,而不是漫不经心地应付掉。要想变得高效,我们必须诚实面对生活中最痛苦的事实和冲突,同时怀抱希望和积极精力投入生活,最终在上述两者之间找到平衡。有些情况下,刻意忽视某些真实的信息会很有帮助。运动员必须把全部精力放在任务上才能赢得比赛。这需要他暂时放下对家人的担忧,隐隐作痛的膝盖,甚至是对技能水平的不自信。放下令人...

2020-05-04 22:02:59 287

原创 精力管理7—明确目标

意志力量是目标最充足的源泉,意志精力来源于深层价值取向和超越个人利益的目标。目标会激发决心。它促成了我们的全情投入,希望将精力集中在某件事情或某个目标上。只有真正深刻地关心自己所为真正有意义,人们才有可能做到全情投入。使命感是我们的火种,我们动力,也是我们的精神食粮。从培训角度看,英雄之旅的意义在于调动、培养和定期更新宝贵的精力,支持我们完成人生最重要的任务。不幸的是,多数人从未踏上过英雄征途...

2020-05-04 21:36:08 410

原创 精力管理6—意志精力

本质上说,意志精力是一股掌管所有维度行为的独立力量,是通向深层的价值取向和超越个人利益的意图。安是一家大型化妆品公司的高管,成年以后,安一直尝试戒烟却没有成功。当安得知自己怀孕了,好决定立刻戒烟,一直到孩子出生,她都没有碰过香烟。不过生下小孩出院之前,她就迫不及待地重拾香烟。一年后,安第二次怀孕了,她又一次停止吸烟。就像第一次那样,在9个月的孕期里很容易就克服了对尼古丁的渴望,却在孩子出生后立...

2020-05-04 21:26:56 264

原创 精力管理5—思维精力

为了发挥出最好的水平,我们必须保持专注,在整体方向和局部目标之间灵活游走。与身体和情感能力相同思维能力需要平衡消耗和再生。保持专注与乐观的秘诀在于间歇地变换思维频道,达到精力休息和再生的效果。1、在放松中思考思考会耗费巨大的精力,只占体重的2%大脑需要人体25%的氧气供给。如果思维得不到足够的恢复,会判断失误、创造力减弱、或无法合理评估风险。思维恢复的关键是让正常工作的大脑间歇地休息。引起...

2020-05-04 21:24:36 426

原创 精力管理4—情感精力

在我们看来,情商的意义在于有技巧地管控情感以保持正面积极的精力,并最终为全情投入服务。在实际应用中,自信、自控、社交技巧及共情能够牵动积极情感的“肌肉”。通俗来说,就是耐心、开放、信任和喜悦。若要调动情感肌肉塑造最佳表现,需要创造定期使用和间歇恢复的平衡。调取了足够多的经理和员工样本之后,盖洛普公司发现,员工和顶头上司之间的关系比其他因素更有决定员工的效率。员工的工作动力包括感受到主管或其他同...

2020-05-04 21:17:07 306

原创 精力管理3—体能精力

在大多数工作中,体能被完全从效能公式中抹去,然而实际操作中,体能是燃料的基本来源,即使大部分工作时间都是坐着一动不动。它不仅是敏锐度和生命力的核心,还影响着我们管理情绪为、保持专注、创新思考甚至投入工作的能力。领导者和经理们往往会犯基本的错误,忽略精力对体能的需求,却仍然期望下属随时保持最佳表现。从生理学的角度看,精力来源于氧气和血糖的化学反应。从实际生活中看,精力储备取决于我们的呼吸模式、进...

2020-05-04 21:12:51 520

原创 精力管理2—劳逸结合的平衡

1、人类最基本的需要——精力的消耗与恢复通过运动和休息的交替进行可以最大限度提高表现。通过一定时间的活动消耗,人体需要从基础生化源获取能量。这一过程叫作“补偿”,消耗的能量通过补偿而得以恢复。随着训练强度增大、对运动员要求提高,能力的恢复和补偿程度也必然相应增加,否则,运动员的表现将逐渐下降。我们需要精力来创造最佳表现,而精力的恢复尤为重要。它不仅确保我们享有健康和幸福,还能提升我们做事的能...

2020-05-03 18:13:54 961

原创 精力管理1—如何管理精力

什么是精力精力就是做事情的能力。 包括体能、情感、思维、意志四个方面。我们生活在数字时代,节奏如电光火石般迅猛,对于大多数人来说,时间永远不够用,我们唯一办法只有在每一天里最程度地生挤硬塞,然而新的问题出现了,再高效的时间管理也无法确保我们有足够的精力处理每一件事。精力,而非时间,是高效表现的基础。领导是组织精力的统筹人,在公司、机构及家庭中均是如此。要想树立威信,首先要依靠个人精力管理...

2020-05-03 17:52:16 521

原创 解决Flume数据采集中出现的问题:Expected timestamp in the Flume event headers, but it was null

使用Flume向HDFS采集数据时报错:java.lang.NullPointerException: Expected timestamp in the Flume event headers, but it was null解决方法是在flume的配置文件中添加时间戳配置项:a1.sinks.k1.hdfs.useLocalTimeStamp = true...

2020-03-19 11:01:42 1341

原创 数据仓库维度建模之事实表设计

一、DWD层明细事实表设计事实表有粒度大小之分,基于数据仓库层次架构,明细事实表一般存在于dwd层,该层事实表设计不进行聚合、汇总动作,仅做数据规范化、数据降维动作,将多个实事表的内容汇总到一张表中,同时数据保持业务粒度,确保数据信息无丢失。数据降维:为了提高模型易用性,将常规维度表中的常用属性数据冗余到相应的事实表中,从而在使用的时候避免维表关联的方式,既为数据降维。事实表的设计主要是...

2020-02-18 15:44:22 2538 2

原创 数据仓库维度建模之维表设计

1、代理键维度表中必须有一个能够唯一标识一行记录的列,通过该列维护维度表与事实表之间的关系,一般在维度表中符合条件的业务主键可以当作维度主键。然而当整合多个数据源的维度时,不同数据源的业务主键重复问题如何解决?涉及维度拉链表时,同一主体存在多条记录,业务键重复怎么解决?此时就需要引入代理键,代理键是由数据仓库处理过程中产生的、与业务本身无关的、唯一标识维度表中一条记录并充当维度表主键的列,...

2020-02-18 15:04:28 1538

原创 数据仓库中的ER实体模型和维度模型

一、数据仓库建模的意义一个公司中会有多个业务业务系统,比如:OA系统、订单系统、财务系统、人事系统、仓储系统等,因此需要按照一定的组织结构将所有数据都整合起来,形成一个仓储平台。如果只是通过工具把所有的数据同步到同一个平台,这个过程只是在堆积数据,不仅会因数据冗余造成存储空间的浪费,也会因各系统部数据的差异导致需求指标计算错误。二、ER实体模型在数据系统中,将事物抽象为实体(Entity)...

2020-02-16 16:34:30 6689

原创 关系型数据库设计的三大范式

一、函数依赖1、完全函数依赖假设X,Y是关系R的两个属性集合,X’是X的真子集,若存在X->Y,对于每个X’都有X’!->Y,则称Y完全函数依赖于X。即:通过AB能得出C,但是A或B单独得不出C,那么说C完全依赖于AB。举例:在上图中,通过学号和课程可以确定成绩,但是单用学号和课程无法确定成绩,也就是说成绩完全依赖于学号和课程2、部分函数依赖假设Y函数依赖于X,但不是完...

2020-02-15 14:46:01 535

原创 数据仓库的分层设计

一、数据仓库分层的意义1、明确数据结构数据仓库分层后,每层完成特定的功能,易于开发管理,如果使用过程中有表数据出错,也便于定位2、减少重复开发规范数据分层,创建可复用的中间层数据,能够减少重复计算,提高效率3、屏蔽原始数据将统计数据与业务系统数据解耦,避免受业务系统变更的影响二、数据仓库的层级1、ODS(operation data store) 原始数据层ODS层是贴近数据源...

2020-02-14 17:26:21 457

原创 基于大数据平台的数据仓库

1、数据库(Database)数据库是指将数据以一定的数据模型组织、描述和储存在一起的数据集合,具有尽可能小的冗余度、较高的数据独立性和易扩展性,且在一定范围内为多个用户共享2、数据仓库(DataWarehouse)数据仓库用于实现集成、稳定、反应历史变化、有组织有结构的数据集合,具有以下4个特点:(1)面向主题将企业各业务系统的数据进行综合归并,针对公司不同业务领域建立对应的主题。...

2020-02-14 13:41:58 1043

原创 Hive常用参数调优

以下参数值不是固定值,可结合集群情况适当调整1、并行执行job一个hql可能会转化为多个MR job来执行,如果有些job间没有依赖关系,可以让多个job同时运行,提升执行效率,但如果集群资源较少,不建议开启,否则会导致多个job相互抢占资源,降低整体运行效率set hive.exec.parallel=true;set hive.exec.parallel.thread.number...

2020-02-13 13:31:18 543

原创 Notepad++录制宏设置整行内容复制快捷键

1、开始录制宏打开一个非空文件,将光标置于首行,点击【宏】–>【开始录制】2、录制宏操作按【home】键将光标置于行首,再按【shift】+【end】选中整行内容,按【ctrl】+【c】复制选中内容,最后点击【宏】–>【停止录制】3、保存录制宏点击【宏】–>【保存录制宏】4、设置快捷键在弹出的快捷键设置框中设定复制整行内容的快捷键,此处设定的快捷键为CTRL+...

2020-02-12 16:23:01 1039

原创 Notepad++设置文件默认语言和关键字高亮显示

1、【设置】–>【语言格式设置】2、左侧【语言】框中选择文本语言(此处以SQL为例)3、在【自定义扩展名】中添加文件格式(多个格式之间用空格分隔)此处添加的两种文件格式为hql和txt,保存之后,下次使用Notepad++打开.sql .hql .txt文件时将默认使用SQL语言,同理可按需求设置其他文件格式4、自定义高亮显示关键字(多个关键字用空格分隔)在Notep...

2020-02-12 15:51:05 11225

原创 Notepad++快捷键(精简版)

ctrl+d 复制当前行并粘贴到下一行ctrl+l 删除当前行ctrl+f 查找ctrl+h 替换alt+c 列编辑ctrl+w关闭当前标签ctrl+tab 跳转至下个标签ctrl+u 转为小写ctrl+shift+u 转为大写ctrl+f3 选定并寻找下一个ctrl+shift+f3 选定并寻找上一个ctrl+shift+↑/↓ 上下移动当前行ctrl+n 新建文件ct...

2020-02-12 14:55:30 272

原创 Sqoop_1.4.6安装配置

安装前需先安装配置Hadoop,可参考文章:Hadoop_2.7.2安装配置1、下载安装包方式一、官网下载 :http://sqoop.apache.org方式二、CSDN资源快速下载 :快速下载Sqoop安装包2、上传压缩包将压缩包上传到/usr/local/software/3、解压到/usr/local目录下tar -zxvf sqoop-1.4.6.bin__hadoop...

2020-02-11 14:23:04 133

原创 Tez_0.9.1安装配置

安装Tez前需先安装布署Hive,可参考文章:Hive_1.2.1安装配置1、下载安装包方式一、官网下载: http://tez.apache.org方式二、CSDN资源快速下载 :快速下载Tez_0.9.1安装包2、上传压缩包将压缩包上传到/usr/local/software/目录下并解压到/usr/local/tar -zxvf apache-tez-0.9.1-bin.ta...

2020-02-11 14:16:21 543

原创 Hive_1.2.1安装配置

安装Hive前需先安装Hadoop,可参考文章:Hadoop_2.7.2安装配置1、下载安装包方式一、从官网下载:https://hive.apache.org方式二、从CSDN资源快速下载:快速下载Hive安装包2、上传压缩包将压缩包上传到/usr/local/software/3、解压到/usr/local/目录下tar -zxvf apache-hive-1.2.1-bin...

2020-02-11 14:04:38 1373

Sqoop_1.4.6安装包.rar

资源中包含了Sqoop1.4.6安装包,安装配置说明可参考我的博客,如果安装过程中遇到问题可与我联系解决。

2020-02-11

Hive_1.2.1_Tez_0.9.1安装包.rar

资源中包含了Hive1.2.1和Tez0.9.1安装包,安装配置说明可参考我的博客,如果安装过程中遇到问题可与我联系解决。

2020-02-11

Hadoop_2.7.2安装包.rar

资源中是Hadoop2.7.2版本安装包,安装配置说明可参考我的博客,如果安装过程中遇到问题可与我联系解决。

2020-02-11

Linux_mysql_5.6.24安装包.rar

资源中包含了Linux环境使用RPM方式安装Mysql的RPM包及JDBC驱动,安装配置说明可参考我的博客,如果安装过程中遇到问题可与我联系解决。

2020-02-11

Linux_jdk8_64位.rar

Linux环境,64位,Jdk8,安装配置说明可参考我的博客,如果安装过程中遇到问题可与我联系解决。

2020-02-11

IntelliJ IDEA 集成Scala插件-2017.2.13.rar

该资源包括两部分内容: 1、集成于开发工具IntelliJ IDEA2017.2版本的Scala插件 2、集成安装操作说明文档

2020-01-02

Windows平台下载安装Hadoop.rar

该资源包含三部分内容: 1、Hadoop-2.6.5 2、Windows系统下Hadoop运行所需要的配置文件 3、Hadoop安装、配置操作说明文档

2020-01-01

Maven-3.3.9-附环境变量配置说明.rar

该资源包含两部分内容: 1、官方Apache Maven3.3.9 2、windows系统下环境变量配置说明

2020-01-01

maven-3.6.0-附环境变量配置说明.rar

该资源包含两部分内容: 1、官方Apache Maven3.6.0 2、windows系统下环境变量配置说明

2019-12-31

win64位-jdk8-附有环境变量配置说明.rar

该资源包含两部分内容: 1、官网下载的win64位jdk8 2、windows系统下jdk8的环境变量配置操作步骤

2019-12-31

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除