zoukankan      html  css  js  c++  java
  • 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))
  • 相关阅读:
    主机无法ping通网关,但可以ping通局域网内的其他主机
    linux下安装mysql
    国内python源
    在vue中引入element-ui时报错
    在windows上部署vue
    linux上部署vue开发环境
    vue插件之vue-router路由基本使用
    vue监听属性变化
    vue过滤器
    vue组件的使用
  • 原文地址:https://www.cnblogs.com/ggzone/p/10121175.html
Copyright © 2011-2022 走看看