2018年3月月 发布的文章

hive中的join

一、hive中的join
inner join 等价于 join, 可以理解为 join 是 inner join 的缩写;left join 等价于 left outer join ;right join 等价于 right outer join;
二、
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行

superset SQL生成的研究

superset类似系统,一期实现不要实现这么复杂的SQL拼接:

SELECT state AS state,
       job_date AS __timestamp,
       sum(job_num) AS sum_job_num
FROM
  (select count(1) as job_num,
          state,
          job_date
   from job_info
   group by state,
            job_date) AS expr_qry
INNER JOIN
  (SELECT state AS state__,
          sum(job_num) AS mme_inner__
   FROM
     (select count(1) as job_num,
             state,
             job_date
      from job_info
      group by state,
               job_date) AS expr_qry
   WHERE job_date >= STR_TO_DATE('2017-12-05 00:00:00', '%%Y-%%m-%%d %%H:%%i:%%s')
     AND job_date <= STR_TO_DATE('2018-03-15 16:26:53', '%%Y-%%m-%%d %%H:%%i:%%s')
   GROUP BY state
   ORDER BY mme_inner__ DESC
   LIMIT 50) AS anon_1 ON state = state__
WHERE job_date >= STR_TO_DATE('2017-12-05 00:00:00', '%%Y-%%m-%%d %%H:%%i:%%s')
  AND job_date <= STR_TO_DATE('2018-03-15 16:26:53', '%%Y-%%m-%%d %%H:%%i:%%s')
GROUP BY state,
         job_date
ORDER BY sum_job_num DESC
LIMIT 50000

上边是superset生成的SQL,乍看起来很复杂,经过分析,其实就是通过inner join将两个表的数据连起来。
例如:
表A 表B
id val1 id val2
1 A 1 D
2 B 2 E
3 C 3 F
通过inner join最后会变为横表
id val1 val2
1 A D
2 B E
3 C F
而通过UNION ALL则会变为纵表
id val
1 A
2 B
3 C
1 D
2 E
3 F
http://www.w3school.com.cn/sql/sql_union.asp
http://www.w3school.com.cn/sql/sql_join_inner.asp
INNER JOIN 关键字在表中存在至少一个匹配时返回行。如果 “Persons” 中的行在 “Orders” 中没有匹配,就不会列出这些行。
LEFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行。
RIGHT JOIN 关键字会从右表 (Orders) 那里返回所有的行,即使在左表 (Persons) 中没有匹配的行。
superset的源码
https://github.com/apache/incubator-superset/blob/4250e239a2515be91464c1c0502db5b31ac9ee91/superset/connectors/sqla/models.py

阿里巴巴Java开发规约插件安装

Eclipse版插件支持4.2(Juno,JDK1.8+)及以上版本,我们提供自主的Update Site,通过 Help >> Install New Software 然后输入https://p3c.alibaba.com/plugin/eclipse/update 即可看到安装列表。大家可以通过 Help >> Check for Udates 进行插件新版检测。安装完成后打开java代码,右键菜单里就可以找到选项,运行查看代码质量报告。
详细使用说明:https://yq.aliyun.com/articles/224817
github地址:
https://github.com/alibaba/p3c/tree/master/idea-plugin#run-plugin
 
PMD、FindBug、checkstyle、sonar这些代码检查工具的区别?各自的侧重点是什么?
pmd:基于源代码分析,主要面向安全编码规则,如“避免声明同名变量”,包括风格类、类型使用等等,具备一定的数据流分析和路径分析能力。checkstyle:基于源代码,与pmd类似,但更侧重编码的语法风格,分析深度不及pmd。findbugs:基于字节码分析,大量使用数据流分析技术,侧重运行时错误检测,如空指针引用等,分析深度大于前述两个。sonar:定位是代码质量平台,本身不进行代码分析,但可以集成各个静态分析工具以及其他软件开发测试工具,并基于集成工具的结果数据按照一定的质量模型,如iso-9126,对软件的质量进行评估。
https://www.ibm.com/developerworks/cn/java/j-lo-statictest-tools/
使用效果如图: