MAPJOINメモ
table_m : 10000件
table_a : 1000件
table_b : 1000件
select count(*) from table_m m
join table_a a on (m.link1=a.id)
join table_b b on (m.link2=b.id)
Time taken: 42.128 seconds
- MapJoin
メモリにハッシュテーブルを持ってMapフェーズのみでJoinをしてくれる
select / *+ MAPJOIN(table_a,table_b) */ count(*)
from table_m m
join table_a a on (m.link1=a.id)
join table_b b on (m.link2=b.id)
--result
Time taken: 27.502 seconds
環境変数を設定することで
指定サイズまでのテーブルは自動でMapJoinしてくれる
set hive.auto.convert.join=true;
set hive.smalltable.filesize=10000;
MySQL :: MySQL 4.1 リファレンスマニュアル :: 5.2.8 MySQL による ORDER BY の最適化
ジョブ関連メモ
ジョブをバックグラウンドで実行
(ジョブ) &
ログアウト後も実行させ続ける
nohup (ジョブ) &
実行途中でバックに移す
Ctrl + Z
# bg
Linuxコマンド集 - 【 nohup 】 ログアウトした後もコマンドを実行し続ける:ITpro
Linuxコマンド集 - 【 & 】 コマンドをバックグラウンドで実行する:ITpro
hadoopジョブの確認
hadoop job -list
$ hadoop job -list
1 jobs currently running
JobId State StartTime UserName Priority SchedulingInfo
job_201404160730_4623 1 1401699760610 hadoop NORMAL NA
hadoopジョブのkill
hadoop job -kill (ジョブID)
XMinメモ
- ForceArray
配列前提で値を取っていく時
要素数1の場合、配列として読まれないのでForceArrayする
my $data = $xml->XMLin($target_file,ForceArray => ['playlist']);
while ($i<$MAX) {
my $Id = $data->{'List'}[$i]->{'Item'}->{'Id'};
$i++;
- 値チェック
空の要素がある場合リファレンスを返すのでスカラーであることを確認する
#xml
<List>
<Item>
<Id>1</Id>
<Value>test1</Value>
</Item>
<Item>
<Id></Id>
<Value>test2</Value>
#Dumper
$VAR1 = {
'Item' => [
{
'Value' => 'test1',
'Id' => '1'
},
{
'Value' => 'test2',
'Id' => {}
},
#perl
unless (ref $data->{'List'}[$i]->{'Item'}->{'Id'}){
...
}else{
# error
}
ESCAPE BY
MySQLでテーブルに一部データが正常に登録されていない
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.2.5 LOAD DATA INFILE 構文
\はデフォルトのエスケープ文字として読まれているらしい
LOAD DATA LOCAL INFILE 'FILEPATH'
INTO TABLE TABLE
FIELDS ESCAPED BY ''
(col_name,...)
ESCAPE BYで指定してやる
シーケンスファイルテーブルにテキストファイルをloadする方法
シーケンスファイルフォーマットで作ったテーブルにテキストファイルを入れたい時
CREATE TABLE table (
val1 string,
val2 string
)
STORED AS SEQUENCEFILE
likeしてalter tableすればスキーマをハードコードせずに済む
CREATE TABLE work_table LIKE table;
ALTER TABLE work_table SET FILEFORMAT TEXTFILE;
ALTER TABLE work_table SET SERDEPROPERTIES ( 'field.delim' = '\t' );
ALTER TABLE work_table SET SERDEPROPERTIES ( 'line.delim' = '\n' );
ALTER TABLE work_table SET SERDEPROPERTIES ( 'serialization.format' = '\t' );
#work_tableに一旦load
#tableにwork_tableをinsert
特殊文字のエスケープシーケンス
HIVEで文字列を|区切りにしたい時
SPLIT('a|bb|ccc','¥¥|')
でHIVEコマンドは動くんだけど
hive -e " SPLIT('a|bb|ccc','¥¥|') "
の時うまく動かない
結局
hive -e " SPLIT('a|bb|ccc','¥¥¥|') "
で¥3つつけるとうまいこといけました
詳しいことはわからんけど、hiveにコマンド渡す時、更にエスケープシーケンスが要るってことですかね