sqoop 报错 for input string \N 是因为 hive 用\N 存 NULL, 这样就需要 设置input-null-string '\\\\N' input-null-non-string '\\\\N'
sqoop import --connect jdbc:oracle:thin:@//10.95.98.145:1521/zxin -e "select * from MPRODUCT_DOWNLOAD_RECORD09 where $cond and \$CONDITIONS" --target-dir '/user/zhongjw/mproduct_download_record09' --fields-terminated-by '\t' --lines-terminated-by '\n' --null-string ' ' --null-non-string '0' -m 20 --split-by 'ENDTIME' --username ZXDBM_REPORT --password 20v#bao#10
如果使用sqoop 导入可以先将表设计为innodb 并发导入 然后将表改成myisam(锁表,不支持并发导入)
分区字段必须包含在联合主键中
alter table muser_openclient
partition by RANGE (log_time)
(
PARTITION p201301 VALUES LESS THAN (20130200),
PARTITION p201302 VALUES LESS THAN (20130300),
PARTITION p201303 VALUES LESS THAN (20130400),
PARTITION p201304 VALUES LESS THAN (20130500)
);
mysql> show variables like ‘key_buffer_size‘;+-----------------+------------+
| Variable_name | Value |
+-----------------+------------+
| key_buffer_size | 536870912 |
+-----------------+------------+
分配了512MB内存给key_buffer_size,我们再看一下key_buffer_size的使用情况:
mysql> show global status like ‘key_read%‘;
+------------------------+-------------+
| Variable_name | Value |
+------------------------+-------------+
| Key_read_requests | 27813678764 |
| Key_reads | 6798830 |
+------------------------+-------------+
一共有27813678764个索引读取请求,有6798830个请求在内存中没有找到直接从硬盘读取索引
通常来说,在MyISAM里读写操作是串行的,但当对同一个表进行查询和插入操作时,为了降低锁竞争的频率,根据concurrent_insert的设置,MyISAM是可以并行处理查询和插入的:
当concurrent_insert=0时,不允许并发插入功能。
当concurrent_insert=1时,允许对没有洞洞的表使用并发插入,新数据位于数据文件结尾(缺省)。
当concurrent_insert=2时,不管表有没有洞洞,都允许在数据文件结尾并发插入。
show profile是由Jeremy Cole捐献给MySQL社区版本的。默认的是关闭的,但是会话级别可以开启这个功能。开启它可以让MySQL收集在执行语句的时候所使用的资源。为了统计报表,把profiling设为1
mysql> SHOW PROFILES\G
show profile for query 2
mysql 字符串字段分区
alter table sdk_flowadd_sum_tmp_v1
PARTITION by range columns(log_day)
(
partition p20130731 values less than('20130731'),
partition p20130801 values less than('20130801'),
partition p20130802 values less than('20130802'),
partition p20130803 values less than('20130803'),
partition p20130804 values less than('20130804'),
partition p20130805 values less than('20130805')
)
ALTER TABLE sdk_flowadd_sum_tmp_v1 ADD PARTITION (PARTITION p20130806 VALUES LESS THAN ('20130806'))
mysql char 类型 超过 150个字节 如果group by 无论多少数据 都会在磁盘上创建临时文件 将定性能
create table day_table (id int, content string) partitioned by (dt string);
动态分区
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
INSERT OVERWRITE TABLE target PARTITION (dt)
SELECT id,user_id,app_id,time,ip,substr(time,0,10) FROM origin
可以将老数据load 到hive表中后, 然后在用insert select 方式给老数据创建分区。
在处理好老数据分区后,用静态分区:
create table partuserview(userid string,hourid string,cityid string,fronturl string,contentype int) partitioned by (dt string) row format delimited fields terminated by '\t';
load data local inpath '/home/xincl/hive-0.6.0/data/userview.txt' into table partuserview partition(dt='20101110');
创建bucket表语句:
> create table butuserview(userid string,hourid string,cityid string,fronturl string,contentype int) clustered by (hourid) into 12 buckets row format delimited fields terminated by '\t';
上面指定使用hourid来做bucket,有12个bucket。用hourid的hashcode MOD bucket个数。
sqoop 引用分区:
sqoop import --connect jdbc:postgresql://ip/db_name --username user_name --table table_name --hive-import -m 5 --hive-table hive_table_name (--hive-partition-key partition_name --hive-partition-value partititon_value);
修改字段类型:
ALTER TABLE MUSER_BASICINFO_CPA CHANGE USERINDEX USERINDEX bigint;