この記事では、HIVE パーティショニングを始めるときに落とし穴を回避するために学ばなければならない 5 つの主要な知識を紹介します。一定の参考価値があります。必要な友人は参照してください。お役に立てば幸いです。
最初の概念:
1: 静的パーティショニングは、ディレクトリの下にある多数のファイルを分割することです [ [ファイル]が分類されて保存されており、[ファイル]までしか絞り込めず、内容の絞り込みはできません ただし、1回の操作で指定できるカテゴリ(領域)は1つだけです;
2:動的パーティションの1回の操作で指定できるのは、マルチカテゴリ (エリア);
3: パーティショニングの目的は、単一のテーブルをクエリする際に、クエリの範囲を狭め、単一のテーブルのクエリ効率を向上させることです。 4: パーティションはコマンドラインで指定されるため、静的パーティションの下部では mr プログラムは実行されません (比較的厳格); 動的パーティションは mr プログラムを実行し、対応するフィールドを抽出します (比較的スマート)
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.class2.コンテンツの追加
(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 テーブルを確認すると、すべてのマッピング情報が表示されます
--使用同样的数据,再次追加insert一次数据 hive> insert into table t_students partition (age,class) select * from t_student;データを再度追加すると、メタデータSDS テーブル情報は変更されず、各パーティション パスの下のファイルは 2 つのコピーになります
注:
まず、バケット化する前に、コマンド hive.enforce.bucketiong=true; を実行します。
次に、キーワード「clustered by」を使用して、パーティションのベースとなる列名を指定し、その方法も指定します。ここで指定したバケットは 3 つのバケットに分割されます。
3 番目に、パーティショニングとは異なり、パーティショニングは実際のデータ テーブル ファイル内の列ではなく、指定した疑似列に基づきますが、バケット化は疑似列ではなくデータ テーブル内の実際の列に基づきます。したがって、パーティション化の基準となる列を指定するときは、列のタイプを指定する必要があります。これは、この列がデータ テーブル ファイルに存在しないためです。これは、新しい列を作成するのと同じです。バケット化は、テーブルにすでに存在する列に基づいて行われます。この列のデータ型は明らかにわかっているため、列の型を指定する必要はありません。
以上がHIVE パーティションを使い始めるときに落とし穴を避けるために学ばなければならない 5 つのことの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。