• hbase的rowkey简单设计


    问题:
    需要查询某一用户某时间做了什么,PlatID和vopenid可以保证一个用户唯一,但同一时间同一用户可能日志有多条。
    使用PlatID(int)、vopenid(int)和dtTime(datetime)查询

    1. 保持所有rowkey长度一致
      PlatID总是一位,vopenid不一定,通过加一个很大的值,比如10000000000,保持位数固定
    2. 由于三属性结合不能保证rowid唯一
      在原先rowed上加一定位数的随机数

    体现在sql语句中:

    select concat(concat(concat(concat(PlatID,'_'),concat(10000000000+vopenid,'_')),replace(dtTime,' ','-')), concat('_',100000+ceiling(rand() * 90000))) as id from log;

    通过sqoop导出mysql数据到hbase:

    sqoop import --driver com.mysql.jdbc.Driver --connect "jdbc:mysql://ip:port/dbname" --username root --password root --query "select concat(concat(concat(concat(PlatID,'_'),concat(10000000000+vopenid,'_')),replace(dtTime,' ','-')), concat('_',100000+ceiling(rand() * 90000))) as id,content,dtTime from log where 1=1 and  $CONDITIONS" --hbase-table flog --column-family fl --hbase-row-key id -split-by dtTime -m 1

    可以修改where条件语句,添加指定限制
    此处会有dtTime的冗余,可以选择其他属性替换

    改进:

    select concat(concat(md5(concat(PlatID,vopenid)),unix_timestamp(dtEventTime)), 100000+ceiling(rand() * 90000))
  • 相关阅读:
    企业库连接形式简单例子记录 EnterpriseLibrary.Data
    .net 抽象类(abstract)和接口(interface)区别
    windows service 开发、安装及调试
    asp.net(mvc) 框架
    获取IP地址
    select2 模糊查询远程数据
    设计模式篇——初探命令模式
    初探MVC路由
    初探表达式目录树
    C#实现插入排序法
  • 原文地址:https://www.cnblogs.com/ggzone/p/5170971.html
Copyright © 2020-2023  润新知