hive:パーティション
4317 ワード
パーティションの種類:1、静的なパーティション:データをロードする時にパーティションの値を指定します.2、ダイナミックパーティション:データが不明で、パーティションの値に基づいてパーティションを作成することができます.3、混合パーティション:静的とダイナミックがあります.
注意事項:1、hiveのパーティションは表外フィールドを使用しています.パーティションフィールドは疑似列ですが、クエリーフィルタができます.2、パーティションフィールドは中国語で3、ダイナミックパーティションの使用はあまり推奨されていません.ダイナミックパーティションはmapreduceを使ってデータを検索しますので、パーティションの数が多すぎるとnamenodeとyarnのパフォーマンスがボトルネックになります.ダイナミックパーティションの前に、できるだけパーティションの数を予知する必要があると提案します.4、パーティション属性の変更は、メタデータとhdfsのデータ内容を手動で変更することができます.(変更を保持)
1、静的なパーティション
レベル1のパーティションを作成:
2、パーティションを追加する:
2、ダイナミックパーティション
注意事項:1、hiveのパーティションは表外フィールドを使用しています.パーティションフィールドは疑似列ですが、クエリーフィルタができます.2、パーティションフィールドは中国語で3、ダイナミックパーティションの使用はあまり推奨されていません.ダイナミックパーティションはmapreduceを使ってデータを検索しますので、パーティションの数が多すぎるとnamenodeとyarnのパフォーマンスがボトルネックになります.ダイナミックパーティションの前に、できるだけパーティションの数を予知する必要があると提案します.4、パーティション属性の変更は、メタデータとhdfsのデータ内容を手動で変更することができます.(変更を保持)
1、静的なパーティション
レベル1のパーティションを作成:
create table if not exists t_part1(
uid int,
uname string,
age int
)
partitioned by (dt string)
row format delimited fields terminated by ',';
データをインポート:load data local inpath '/usr/local/hivedata/users.txt' into table t_part1 partition(dt='2018-07-04');
二段階パーティションを作成:create table if not exists t_part2(
uid int,
uname string,
age int
)
partitioned by (year string,month string)
row format delimited fields terminated by ',';
データをロード:load data local inpath '/usr/local/hivedata/users.txt' into table t_part2 partition(year='2018',month=07);
load data local inpath '/usr/local/hivedata/users.txt' into table t_part2 partition(year='2018',month='07');
レベル3のディレクトリを作成:create table if not exists t_part3(
uid int,
uname string,
age int
)
partitioned by (year string,month string,days string)
row format delimited fields terminated by ',';
データをロード:load data local inpath '/usr/local/hivedata/users.txt' into table t_part3 partition(year='2018',month='07',days='04');
クエリー:select * from t_part3;
select * from t_part3 where year = '2018';
select * from t_part3 where year = '2018' and month = '07';
select * from t_part3 where month = '07' and days='04';
パーティションを表示:show partitions t_part2;
パーティションを修正します.1、パーティション名はどうやって修正しますか?現在はパーティション名の変更方法が提供されていません(暴力的に修正し、直接hdfs上のディレクトリ名を修正します).2、パーティションを追加する:
alter table t_part2 add partition(year='2018',month='06');
alter table t_part2 add partition(year='2018',month='06') partition(year='2017',month='12') partition(year='2017',month='11');
パーティションを追加してデータを設定します.alter table t_part2 add partition(year='2017',month='12') location '/user/hive/warehouse/gp1707.db/t_user_info';
alter table t_part2 add partition(year='2017',month='08') location '/user/hive/warehouse/gp1707.db/t_user_info' partition(year='2017',month='09') location '/user/hive/warehouse/gp1707.db/t_user_info';
3、パーティションの記憶経路を変更する:alter table t_part2 partition(year='2017',month='08') set location 'hdfs://hadoop01:9000/user/hive/warehouse/gp1707.db/t_userinfo';
4、パーティションを削除するalter table t_part2 drop partition(year='2017',month='06');
alter table t_part2 drop partition(year='2017',month='09'),partition(year='2018',month=07);
注意:1、パーティションパスを変更する場合は、パスの全称、絶対パスを書く必要があります.2、大量にパーティションを追加したり、大量に削除したりする場合は文法が異なりますが、大量に増やす時は「」スペースを使ってパーティションを分割し、一括削除する時は「カンマ」を使って分割します. 2、ダイナミックパーティション
:
set hive.exec.dynamic.partition=true;( true)
set hive.exec.dynamic.partition.mode=strict/nonstrict;
set hive.exec.max.dynamic.partitions=1000;
set hive.exec.max.dynamic.partitions.pernode=100;
ダイナミックパーティションを作成:create table t_dypart1(
uid int,
uname string,
uage int
)
partitioned by (dt string)
row format delimited fields terminated by ',';
データをロードする:(ロード方式でデータをロードすることはできません)insert into table t_dypart1 partition(dt) select * from t_part1;
ミキシングパーティション:create table t_dypart3(
uid int,
uname string,
uage int
)
partitioned by (year string,month string,days string)
row format delimited fields terminated by ',';
insert into t_dypart3 partition(year='2018',month,days)
select uid,uname,age,month,days from t_part3;