我一直在关注这篇关于如何使用Hive分析推特数据的文章:
我已经设置了flume来收集twitter数据并写入HDFS。我已经设置了一个指向相同HDFS位置的配置单元表。
当我在配置单元中运行类似这样的命令时:从推文中选择entities.user_mentions.screen_name;
我得到的响应如下: OK Time Time: 0.16秒。
无论我运行什么查询,我都得不到任何结果。
由于我不熟悉配置单元,我是希望在配置单元命令行中看到结果,还是必须从mySQL中挖掘结果。mySQL是metastore。
我正在做一个社交网络类型的项目,就像大多数社交网络一样,一个用户馈送将显示你的朋友在网站上做的事情。
因此,假设我有一个包含这些字段的MySQL表;
// user_actions
auto_id = auto increment ID
type = a number (1 = photo upload, 2 = friend added, 3 = status post, 4 = so other action, etc..)
user_id = The id of the user who did the action
datetime = date and time
我有张桌子
CREATE TABLE `acme`.`partitioned_table` (
`id` INT NULL,
`client_id` INT NOT NULL,
`create_datetime` INT NOT NULL,
`some_val` VARCHAR(45) NULL);
我想对这个表进行分区,使每个客户端的数据基于client_id存储在自己的分区中,并且每个分区只能包含基于create_datetime的1周数据。这样我们就可以根据每个客户的保留政策,每周减少一周的数据。
例如,一些客户希望有3个月的数据,而另一些客户可能有更长的数据保留策略。
让我们通过散列(稍微修改一下MySQL版本的)来分析最简单的解析示例:
CREATE TABLE t1 (
id INT,
year_col INT
);
ALTER TABLE t1
PARTITION BY HASH(year_col)
PARTITIONS 8;
假设我们有上百万的记录。问题是--如果有一个特定的查询(例如SELECT * FROM t1 WHERE year_col = 5),那么MySQL如何知道要查找哪个分区?有8个分区。我猜哈希函数是计算出来的,MySQL识别出它与分区键匹配,然后MySQL知道是哪一个。但是SELECT * FR
我正在考虑划分一个具有增长潜力的mySQL表。现在的桌子是这样的
DROP TABLE IF EXISTS `uidlist`;
CREATE TABLE IF NOT EXISTS `uidlist` (
`uid` varchar(9) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
`chcs` varchar(16) NOT NULL DEFAULT '',
UNIQUE KEY `uid` (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=ascii;
哪里
uid是以小写字母
这里有几个分区优化的MySQL DB表,如下所示:
ALTER TABLE radpostauth PARTITION BY HASH(id) PARTITIONS 32;
通过升级do MySQL 5.7,错误日志中开始出现以下警告:
The partition engine, used by table 'y.radpostauth', is deprecated and
will be removed in a future release. Please use native partitioning instead.
我有一个想法,我可以做一个ALTER TABLE
使用列表对MySQL中的表进行分区时,如何为剩余项生成分区?
例如:
CREATE TABLE tbl
(
ID integer
)
PARTITION BY LIST (ID)
(
PARTITION P1 values in (1),
PARTITION P2 values in (2),
PARTITION P3 values in (3),
PARTITION Pother values in (<all remaining values of ID>)
);
在Oracle中,我使用values in (default),但这在MySQL
我很好奇MySQL是如何实现它的范围列分区的,特别是MySQL如何从SQL中提取值,以便与分区值范围进行比较。
例如,创建如下表:
CREATE TABLE t (a INT, b INT, c INT)
PARTITION BY RANGE COLUMNS(a, b) (
PARTITION p0 VALUES LESS THAN (10, 10),
PARTITION p1 VALUES LESS THAN (10, 15),
PARTITION p1 VALUES LESS THAN (20, 20),
PARTITION p2 VALUES LESS THAN (MAX
mysql> SELECT *
FROM history_uint h
WHERE h.itemid='1825689'
ORDER BY h.clock DESC
LIMIT 2 OFFSET 0 ;
Empty set (0.00 sec)
解释:
id: 1
select_type: SIMPLE
table: h
partitions: 2016_02_18,p2016_02_19,p2016_02_21,p2016_02_22,
由于有将近10亿行,我们必须在每个SSD中将单个分区划分为SSD,其中大约有4个分区。
表的当前模式:
CREATE TABLE IF NOT EXISTS `a` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`special_key` varchar(20) NOT NULL DEFAULT '0',
`data1` varchar(20) NOT NULL,
`data2` varchar(20) NOT NULL,
`updated` datetime NOT NULL DEFAULT CUR
我正在洗脱剂引擎中实现对mysql的分区支持。
如果需要,我需要将模型中的分区描述与实际的数据库内容和alter进行比较。要提取有关表的所有分区信息,我使用information_schema.partitions
ALTER TABLE foo PARTITION BY RANGE (is_archive)
(
PARTITION p0 VALUES LESS THAN 1,
PARTITION p1 VALUES LESS THAN MAXVALUE
);
SELECT * FROM information_schema.partitions WHERE table_schema =
如何重新划分Oracle DB中的现有表?
例如,在MySQL中,您可以使用ALTER TABLE从头开始重新定义分区:
/* MySQL code, not Oracle DB */
ALTER TABLE t1
PARTITION BY HASH(id)
PARTITIONS 8;
我已经在谷歌上搜索了一段时间,但在Oracle中找不到提供此功能的任何内容。
但是它必须是可能的,因为它是正在进行的分区管理的基本功能。
在我的例子中,我正在构建一个历史快照表,并根据快照日期范围进行分区。
每天,我都需要为新的一天添加一个分区,但也需要合并旧的快照分区,因为我们只保存前几个季度