zeppelin+kylin+hive+hbase+hadoop+sqoop解决方案之sql问题

大致说下架构,hadoop的mapreduce实现基础计算,kylin实现数据统计分析,sqoop把mysql数据同步到hive中

hive和hbase服务于kylin,hive是数据仓库为kylin提供数据,hbase存放kylin生成的cube。zeppelin通过kylin提供的接口进行大数据可视化展示。

1、整个过程中mysql\hive\kylin三处用到了sql,但标准不一样这是比较搞脑子的地方。

1)mysql,我就不多讲了,各种函数处理数据十分灵活。

2)hive sql,灵活度比关系型数据库差些,不过也还好。https://www.iteblog.com/archives/2258.html#i-7

3)kylin在insight和api会调用自己的一套sql标准,官网说“- 可扩展超快OLAP引擎: Kylin是为减少在Hadoop上百亿规模数据查询延迟而设计- Hadoop ANSI SQL 接口: Kylin为Hadoop提供标准SQL支持大部分查询功能”,但是网上也么找到具体的函数使用说明,我根据报错信息,得出大概支持下列sql函数:

"UNION" 
 "INTERSECT" 
 "EXCEPT" 
 "MINUS" 
 "ORDER" 
 "LIMIT" 
 "OFFSET" 
 "FETCH" 
 "STREAM" 
 "DISTINCT" 
 "ALL" 
 "*" 
 "+" 
 "-" 
 "NOT" 
 "EXISTS" 
  
  
  
  
  
  
  
 "TRUE" 
 "FALSE" 
 "UNKNOWN" 
 "NULL" 
  
  
  
 "DATE" 
 "TIME" 
 "TIMESTAMP" 
 "INTERVAL" 
 "?" 
 "CAST" 
 "EXTRACT" 
 "POSITION" 
 "CONVERT" 
 "TRANSLATE" 
 "OVERLAY" 
 "FLOOR" 
 "CEIL" 
 "CEILING" 
 "SUBSTRING" 
 "TRIM" 
 "RUNNING" 
 "PREV" 
 "NEXT" 
  
 "MULTISET" 
 "ARRAY" 
 "SPECIFIC" 
  
  
  
  
  
 "ABS" 
 "AVG" 
 "CARDINALITY" 
 "CHAR_LENGTH" 
 "CHARACTER_LENGTH" 
 "COALESCE" 
 "COLLECT" 
 "COVAR_POP" 
 "COVAR_SAMP" 
 "CUME_DIST" 
 "COUNT" 
 "CURRENT_DATE" 
 "CURRENT_TIME" 
 "CURRENT_TIMESTAMP" 
 "DENSE_RANK" 
 "ELEMENT" 
 "EXP" 
 "FIRST_VALUE" 
 "FUSION" 
 "GROUPING" 
 "HOUR" 
 "LAST_VALUE" 
 "LN" 
 "LOCALTIME" 
 "LOCALTIMESTAMP" 
 "LOWER" 
 "MAX" 
 "MIN" 
 "MINUTE" 
 "MOD" 
 "MONTH" 
 "NULLIF" 
 "OCTET_LENGTH" 
 "PERCENT_RANK" 
 "POWER" 
 "RANK" 
 "REGR_SXX" 
 "REGR_SYY" 
 "ROW_NUMBER" 
 "SECOND" 
 "SQRT" 
 "STDDEV_POP" 
 "STDDEV_SAMP" 
 "SUM" 
 "UPPER" 
 "USER" 
 "VAR_POP" 
 "VAR_SAMP" 
 "YEAR" 
 "CURRENT_CATALOG" 
 "CURRENT_DEFAULT_TRANSFORM_GROUP" 
 "CURRENT_PATH" 
 "CURRENT_ROLE" 
 "CURRENT_SCHEMA" 
 "CURRENT_USER" 
 "SESSION_USER" 
 "SYSTEM_USER" 
 "NEW" 
 "CASE" 
 "CURRENT" 
 "CURSOR" 
 "ROW" 
 "(" 

kylin相较于hivesql,很多实用功能都不能用,这就使得我们在整个实施过程中数据的处理和建模就要格外小心了。

说明

mysql

hive

kylin

日期转字符

select cast(current_date AS char);

select cast(current_date AS STRING);

select cast(current_date AS varchar);

字符串截取

select substr('20160106112134432',1,8);

select SUBSTRING('20160106112134432',1,8);

select substr('20160106112134432',1,8);

select SUBSTRING('20160106112134432',1,8);

select SUBSTRING('20160106112134432',1,8);

字符串合并

select concat('aa','bb')

select concat('aa','bb')

select concat('aa','bb')

日期加减

select ADDDATE(current_date,1);

select date_add(current_date,-1);

日期格式转换

select DATE_FORMAT(current_time,"%Y%m%d %H:%i:%s")

select from_unixtime(unix_timestamp(current_date),'yyyyMMdd') from dual;


2、具体的解决方案:

1)提前想好kylin中的数据类型,在sqoop从mysql导数据的时候,查询语句就要把数据格式转换好。

2)hive view的使用,适用于业务变动比较大的时候。我创建了一个视图v_params,只有一行一列数据,该数据中存放了各类参数通过|分隔。kylin没有日期计算函数,所以我要获取当前日期及过去几天的信息实现折线图显示,只能通过视图方式在hive中计算好后,每天凌晨刷新数值写到kylin中。

你可能感兴趣的:(大数据,Linux,shell)