ホームページ  >  記事  >  バックエンド開発  >  HIVE パーティションを使い始めるときに落とし穴を避けるために学ばなければならない 5 つのこと

HIVE パーティションを使い始めるときに落とし穴を避けるために学ばなければならない 5 つのこと

坏嘻嘻
坏嘻嘻オリジナル
2018-09-15 11:11:101740ブラウズ

この記事では、HIVE パーティショニングを始めるときに落とし穴を回避するために学ばなければならない 5 つの主要な知識を紹介します。一定の参考価値があります。必要な友人は参照してください。お役に立てば幸いです。

HIVE パーティショニング入門

hive パーティショニング

最初の概念:
1: 静的パーティショニングは、ディレクトリの下にある多数のファイルを分割することです [ [ファイル]が分類されて保存されており、[ファイル]までしか絞り込めず、内容の絞り込みはできません ただし、1回の操作で指定できるカテゴリ(領域)は1つだけです;
2:動的パーティションの1回の操作で指定できるのは、マルチカテゴリ (エリア);
3: パーティショニングの目的は、単一のテーブルをクエリする際に、クエリの範囲を狭め、単一のテーブルのクエリ効率を向上させることです。 4: パーティションはコマンドラインで指定されるため、静的パーティションの下部では mr プログラムは実行されません (比較的厳格); 動的パーティションは mr プログラムを実行し、対応するフィールドを抽出します (比較的スマート)

デモの手順:

1. 学生パーティション テーブルを作成します

95001, Li Yong ,男性,20,CS

95002,Liu Chen,女性,19,IS
95003 、Wang Min、女性、22、MA
95004、Zhang Li、男性、19、IS
95005、Liu Gang、男性、18、MA
95006、Sun Qing、男性、23、CS

--分区表创建create table t_students(id int,name string,sex string)
partitioned by (age int,class string)row format delimited fields terminated by ',' ;

作成後、成功したか確認

hive> set hive.cli.print.header=true;hive> select * from t_students;OK
t_students.id   t_students.name t_students.sex  t_students.age  t_students.class

2.コンテンツの追加

(1)load

--静态分区load data local inpath '/root/logs/students.txt' into table t_students partition (age=19,class='MA');

(2)insert

Hiveでの挿入は主に選択クエリ ステートメントと組み合わせて使用​​します。

--动态分区set hive.exec.dynamic.partition=true;set hive.exec.dynamic.partition.mode=nonstrict;insert overwrite table t_students  partition (age,class) 
select * from t_student;

実行後、メタデータ SDS テーブルを確認すると、すべてのマッピング情報が表示されます


HIVE パーティションを使い始めるときに落とし穴を避けるために学ばなければならない 5 つのこと

--使用同样的数据,再次追加insert一次数据
hive> insert into table t_students  partition (age,class) select * from t_student;

データを再度追加すると、メタデータSDS テーブル情報は変更されず、各パーティション パスの下のファイルは 2 つのコピーになります


HIVE パーティションを使い始めるときに落とし穴を避けるために学ばなければならない 5 つのこと

ハイブ バケット化

バケット化は、相対パーティションをより細かく分割したものです。バケット化では、特定の列属性のハッシュ値に基づいてデータ コンテンツ全体をバケットに分割します。名前属性を 3 つのバケットに分割する場合は、名前属性値のハッシュ値を 3 で変調してデータを分割する必要があります。モジュロ結果に従ってバケットに分割されます。たとえば、モジュロ結果が 0 のデータ レコードはファイルに保存され、モジュロ値が 1 のデータはファイルに保存され、モジュロ値が 2 のデータ レコードはファイルに保存されます。

注:
まず、バケット化する前に、コマンド hive.enforce.bucketiong=true; を実行します。
次に、キーワード「clustered by」を使用して、パーティションのベースとなる列名を指定し、その方法も指定します。ここで指定したバケットは 3 つのバケットに分割されます。
3 番目に、パーティショニングとは異なり、パーティショニングは実際のデータ テーブル ファイル内の列ではなく、指定した疑似列に基づきますが、バケット化は疑似列ではなくデータ テーブル内の実際の列に基づきます。したがって、パーティション化の基準となる列を指定するときは、列のタイプを指定する必要があります。これは、この列がデータ テーブル ファイルに存在しないためです。これは、新しい列を作成するのと同じです。バケット化は、テーブルにすでに存在する列に基づいて行われます。この列のデータ型は明らかにわかっているため、列の型を指定する必要はありません。

以上がHIVE パーティションを使い始めるときに落とし穴を避けるために学ばなければならない 5 つのことの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。