热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MySQL分区表和HBase的关系是什么

MySQL分区表和HBase的关系是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单

MySQL分区表和HBase的关系是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

  创建 MySQL 分区数据

  DROP TABLE ord_order;

  -- 创建订单分区表

  CREATE TABLE ord_order(

  order_id BIGINT NOT NULL AUTO_INCREMENT COMMENT '订单ID',

  user_id INT NOT NULL COMMENT '用户ID',

  goods_id INT NOT NULL COMMENT '商品ID',

  order_price INT NOT NULL DEFAULT 0 COMMENT '订单实际价格(分)',

  create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',

  PRIMARY KEY(order_id, create_time)

  )

  PARTITION BY LIST (YEAR(create_time)*100 + MONTH(create_time))

  (

  PARTITION p201601 VALUES IN (201601),

  PARTITION p201602 VALUES IN (201602),

  PARTITION p201603 VALUES IN (201603),

  PARTITION p201604 VALUES IN (201604),

  PARTITION p201605 VALUES IN (201605),

  PARTITION p201606 VALUES IN (201606),

  PARTITION p201607 VALUES IN (201607),

  PARTITION p201608 VALUES IN (201608),

  PARTITION p201609 VALUES IN (201609),

  PARTITION p201610 VALUES IN (201610),

  PARTITION p201611 VALUES IN (201611),

  PARTITION p201612 VALUES IN (201612)

  );

  -- 插入相关数据

  INSERT INTO ord_order VALUES

  (NULL, 10000001, 11111111, 1000, '2016-01-13 01:00:10'),

  (NULL, 10000001, 11111112, 2000, '2016-01-13 02:00:20'),

  (NULL, 10000001, 11111113, 3000, '2016-01-13 03:00:30'),

  (NULL, 10000001, 11111114, 4000, '2016-01-13 04:00:40'),

  (NULL, 10000001, 11111115, 5000, '2016-01-13 05:00:50'),

  (NULL, 10000001, 11111111, 1000, '2016-02-13 01:00:10'),

  (NULL, 10000001, 11111112, 2000, '2016-02-13 02:00:20'),

  (NULL, 10000001, 11111113, 3000, '2016-02-13 03:00:30'),

  (NULL, 10000001, 11111114, 4000, '2016-02-13 04:00:40'),

  (NULL, 10000001, 11111115, 5000, '2016-02-13 05:00:50'),

  (NULL, 10000001, 11111111, 1000, '2016-03-13 01:00:10'),

  (NULL, 10000001, 11111112, 2000, '2016-03-13 02:00:20'),

  (NULL, 10000001, 11111113, 3000, '2016-03-13 03:00:30'),

  (NULL, 10000001, 11111114, 4000, '2016-03-13 04:00:40'),

  (NULL, 10000001, 11111115, 5000, '2016-03-13 05:00:50'),

  (NULL, 10000001, 11111111, 1000, '2016-04-13 01:00:10'),

  (NULL, 10000001, 11111112, 2000, '2016-04-13 02:00:20'),

  (NULL, 10000001, 11111113, 3000, '2016-04-13 03:00:30'),

  (NULL, 10000001, 11111114, 4000, '2016-04-13 04:00:40'),

  (NULL, 10000001, 11111115, 5000, '2016-04-13 05:00:50'),

  (NULL, 10000001, 11111111, 1000, '2016-05-13 01:00:10'),

  (NULL, 10000001, 11111112, 2000, '2016-05-13 02:00:20'),

  (NULL, 10000001, 11111113, 3000, '2016-05-13 03:00:30'),

  (NULL, 10000001, 11111114, 4000, '2016-05-13 04:00:40'),

  (NULL, 10000001, 11111115, 5000, '2016-05-13 05:00:50'),

  (NULL, 10000001, 11111111, 1000, '2016-06-13 01:00:10'),

  (NULL, 10000001, 11111112, 2000, '2016-06-13 02:00:20'),

  (NULL, 10000001, 11111113, 3000, '2016-06-13 03:00:30'),

  (NULL, 10000001, 11111114, 4000, '2016-06-13 04:00:40'),

  (NULL, 10000001, 11111115, 5000, '2016-06-13 05:00:50'),

  (NULL, 10000001, 11111111, 1000, '2016-07-13 01:00:10'),

  (NULL, 10000001, 11111112, 2000, '2016-07-13 02:00:20'),

  (NULL, 10000001, 11111113, 3000, '2016-07-13 03:00:30'),

  (NULL, 10000001, 11111114, 4000, '2016-07-13 04:00:40'),

  (NULL, 10000001, 11111115, 5000, '2016-07-13 05:00:50'),

  (NULL, 10000001, 11111111, 1000, '2016-08-13 01:00:10'),

  (NULL, 10000001, 11111112, 2000, '2016-08-13 02:00:20'),

  (NULL, 10000001, 11111113, 3000, '2016-08-13 03:00:30'),

  (NULL, 10000001, 11111114, 4000, '2016-08-13 04:00:40'),

  (NULL, 10000001, 11111115, 5000, '2016-08-13 05:00:50'),

  (NULL, 10000001, 11111111, 1000, '2016-09-13 01:00:10'),

  (NULL, 10000001, 11111112, 2000, '2016-09-13 02:00:20'),

  (NULL, 10000001, 11111113, 3000, '2016-09-13 03:00:30'),

  (NULL, 10000001, 11111114, 4000, '2016-09-13 04:00:40'),

  (NULL, 10000001, 11111115, 5000, '2016-09-13 05:00:50'),

  (NULL, 10000001, 11111111, 1000, '2016-10-13 01:00:10'),

  (NULL, 10000001, 11111112, 2000, '2016-10-13 02:00:20'),

  (NULL, 10000001, 11111113, 3000, '2016-10-13 03:00:30'),

  (NULL, 10000001, 11111114, 4000, '2016-10-13 04:00:40'),

  (NULL, 10000001, 11111115, 5000, '2016-10-13 05:00:50'),

  (NULL, 10000001, 11111111, 1000, '2016-11-13 01:00:10'),

  (NULL, 10000001, 11111112, 2000, '2016-11-13 02:00:20'),

  (NULL, 10000001, 11111113, 3000, '2016-11-13 03:00:30'),

  (NULL, 10000001, 11111114, 4000, '2016-11-13 04:00:40'),

  (NULL, 10000001, 11111115, 5000, '2016-11-13 05:00:50'),

  (NULL, 10000001, 11111111, 1000, '2016-12-13 01:00:10'),

  (NULL, 10000001, 11111112, 2000, '2016-12-13 02:00:20'),

  (NULL, 10000001, 11111113, 3000, '2016-12-13 03:00:30'),

  (NULL, 10000001, 11111114, 4000, '2016-12-13 04:00:40'),

  (NULL, 10000001, 11111115, 5000, '2016-12-13 05:00:50');

  -- 查看分区p201601数据

  SELECT * FROM ord_order PARTITION(p201601);

  -- 组合成的 row key

  SELECT CONCAT(user_id, 10000000000-UNIX_TIMESTAMP(create_time), goods_id)

  FROM ord_order PARTITION(p201601);

  结合HBase咯

  创建HBase表 ord_order

  由于版本兼容的问题,这边我需要先创建好HBase对应的表。不然会报不能自动创建 column family 的错误。

  使用 hbase shell 创建 ord_order 表

 hbase(main):033:0> create 'ord_order', {NAME => 'cf1'}

  使用 Sqoop 将MySQL的ord_order 表的 p201601 分区的数据导入HBase表。

  /usr/local/sqoop/bin/sqoop import \

  --connect jdbc:mysql://192.168.137.11:3306/test \

  --username HH \

  --password oracle \

  --query 'SELECT CONCAT(user_id, 10000000000-UNIX_TIMESTAMP(create_time), goods_id) AS order_id, order_price, create_time FROM ord_order PARTITION(p201601) WHERE $CONDITIONS' \

  --hbase-table ord_order \

  --hbase-create-table \

  --hbase-row-key order_id \

  --split-by order_id \

  --column-family cf1 \

  -m 1

  导入成功后就可以在MySQL上面将相关分区删除,并且创建之后需要的分区:

  ALTER TABLE ord_order

  ADD PARTITION (PARTITION p201701 VALUES IN (201701));

  ALTER TABLE ord_order DROP PARTITION p201601;

  查看Hbase中导入的数据

  hbase(main):001:0> scan 'ord_order'

  ROW COLUMN+CELL

  10000001854736755011111115 column=cf1:create_time, timestamp=1479224942888, value=2016-01-13 05:00:50.0

  10000001854736755011111115 column=cf1:order_price, timestamp=1479224942888, value=5000

  10000001854737116011111114 column=cf1:create_time, timestamp=1479224942888, value=2016-01-13 04:00:40.0

  10000001854737116011111114 column=cf1:order_price, timestamp=1479224942888, value=4000

  10000001854737477011111113 column=cf1:create_time, timestamp=1479224942888, value=2016-01-13 03:00:30.0

  10000001854737477011111113 column=cf1:order_price, timestamp=1479224942888, value=3000

  10000001854737838011111112 column=cf1:create_time, timestamp=1479224942888, value=2016-01-13 02:00:20.0

  10000001854737838011111112 column=cf1:order_price, timestamp=1479224942888, value=2000

  10000001854738199011111111 column=cf1:create_time, timestamp=1479224942888, value=2016-01-13 01:00:10.0

  10000001854738199011111111 column=cf1:order_price, timestamp=1479224942888, value=1000

  5 row(s) in 0.5390 seconds

  ROW KEY 设计详解

  HBase中的row key为 user_id, 10000000000-UNIX_TIMESTAMP(create_time), goods_id 3个字段组成。

  这边值得注意的是 10000000000-UNIX_TIMESTAMP(create_time), 这样设计的原因是为了让订单能按时间的倒序排列, 这样就符合 越新的数据越先显示

  如: 现在需要对用户 10000001 的订单进行分页, 每页两条数据, 并且按时间的倒序排序(最新订单最先显示)

  hbase(main):003:0> scan 'ord_order', {COLUMNS=>['cf1:order_price'], ROWPREFIXFILTER=>'10000001', LIMIT=>2}

  ROW COLUMN+CELL

  10000001854736755011111115 column=cf1:order_price, timestamp=1479224942888, value=5000

  10000001854737116011111114 column=cf1:order_price, timestamp=1479224942888, value=4000

  点击下一页的数据:

  hbase(main):004:0> scan 'ord_order', {COLUMNS=>['cf1:order_price'], LIMIT=>3, STARTROW=>'10000001854737116011111114'}

  ROW COLUMN+CELL

  10000001854737116011111114 column=cf1:order_price, timestamp=1479224942888, value=4000

  10000001854737477011111113 column=cf1:order_price, timestamp=1479224942888, value=3000

  10000001854737838011111112 column=cf1:order_price, timestamp=1479224942888, value=2000

  3 row(s) in 0.0260 seconds

  上面获得了三行数据,在实际展现的时候去除第一行就好了,实际展示如下:

  10000001854737477011111113 column=cf1:order_price, timestamp=1479224942888, value=3000

  10000001854737838011111112 column=cf1:order_price, timestamp=1479224942888, value=2000

  点击上一页

  hbase(main):008:0> scan 'ord_order', {COLUMNS=>['cf1:order_price'], LIMIT=>3, STARTROW=>'10000001854737477011111113', REVERSED=>true}

  ROW COLUMN+CELL

  10000001854737477011111113 column=cf1:order_price, timestamp=1479224942888, value=3000

  10000001854737116011111114 column=cf1:order_price, timestamp=1479224942888, value=4000

  10000001854736755011111115 column=cf1:order_price, timestamp=1479224942888, value=5000

  3 row(s) in 0.0640 seconds

  上面同样获得了三条数据,我们需要去除第一行,让后按数据集合倒序显示

  10000001854737116011111114 column=cf1:order_price, timestamp=1479224942888, value=4000

  10000001854736755011111115 column=cf1:order_price, timestamp=1479224942888, value=5000

  ↓↓↓↓↓ 上面两行是集合数据 下面两行数倒序遍历集合的数据(也是最终显示的数据)

  10000001854736755011111115 column=cf1:order_price, timestamp=1479224942888, value=5000

  10000001854737116011111114 column=cf1:order_price, timestamp=1479224942888, value=4000

关于MySQL分区表和HBase的关系是什么问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程笔记行业资讯频道了解更多相关知识。


推荐阅读
  • 一个建表一个执行crud操作建表代码importandroid.content.Context;importandroid.database.sqlite.SQLiteDat ... [详细]
  • MySQL初级篇——字符串、日期时间、流程控制函数的相关应用
    文章目录:1.字符串函数2.日期时间函数2.1获取日期时间2.2日期与时间戳的转换2.3获取年月日、时分秒、星期数、天数等函数2.4时间和秒钟的转换2. ... [详细]
  • Spring Data JdbcTemplate 入门指南
    本文将介绍如何使用 Spring JdbcTemplate 进行数据库操作,包括查询和插入数据。我们将通过一个学生表的示例来演示具体步骤。 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 机器学习算法:SVM(支持向量机)
    SVM算法(SupportVectorMachine,支持向量机)的核心思想有2点:1、如果数据线性可分,那么基于最大间隔的方式来确定超平面,以确保全局最优, ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 本文介绍了如何使用Flume从Linux文件系统收集日志并存储到HDFS,然后通过MapReduce清洗数据,使用Hive进行数据分析,并最终通过Sqoop将结果导出到MySQL数据库。 ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 实验九:使用SharedPreferences存储简单数据
    本实验旨在帮助学生理解和掌握使用SharedPreferences存储和读取简单数据的方法,包括程序参数和用户选项。 ... [详细]
  • 通过使用Sqoop导入工具,可以精确控制并高效地将表数据的特定子集导入到HDFS中。具体而言,可以通过在导入命令中添加WHERE子句来指定所需的数据范围,从而在数据库服务器上执行相应的SQL查询,并将查询结果高效地存储到HDFS中。这种方法不仅提高了数据导入的灵活性,还确保了数据的准确性和完整性。 ... [详细]
  • Python错误重试让多少开发者头疼?高效解决方案出炉
    ### 优化后的摘要在处理 Python 开发中的错误重试问题时,许多开发者常常感到困扰。为了应对这一挑战,`tenacity` 库提供了一种高效的解决方案。首先,通过 `pip install tenacity` 安装该库。使用时,可以通过简单的规则配置重试策略。例如,可以设置多个重试条件,使用 `|`(或)和 `&`(与)操作符组合不同的参数,从而实现灵活的错误重试机制。此外,`tenacity` 还支持自定义等待时间、重试次数和异常处理,为开发者提供了强大的工具来提高代码的健壮性和可靠性。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
author-avatar
lucky燕子加加加
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有