hiveノート-パーティションのリフレッシュ

3003 ワード

1、パーティション表(今回は内部表)を1枚選択し、パーティションデータをローカルに取ります.
[root@hadoop001 hiveData]# hadoop fs -get /user/hive/warehouse/emp_dept_partition/deptno=30/000000_0 emp_dept_partition-deptno30
[root@hadoop001 hiveData]# ls
dept  emp_dept_partition-deptno30  emp.txt

2、このパーティションを削除する
hive> ALTER TABLE emp_dept_partition DROP IF EXISTS PARTITION(deptno=30);
Dropped the partition deptno=30
OK
Time taken: 0.652 seconds
hive> select * from emp_dept_partition where deptno=30;
OK
Time taken: 0.507 seconds

deptno=30 。
[root@hadoop001 hiveData]# hadoop fs -ls /user/hive/warehouse/emp_dept_partition/
Found 2 items
drwxr-xr-x   - root supergroup          0 2018-01-08 20:59 /user/hive/warehouse/emp_dept_partition/deptno=10
drwxr-xr-x   - root supergroup          0 2018-01-08 20:59 /user/hive/warehouse/emp_dept_partition/deptno=20

3、deptno=30のデータをローカルからemp_に戻すdept_partition対応hdfsパス
[root@hadoop001 hiveData]# hadoop fs -mkdir /user/hive/warehouse/emp_dept_partition/deptno=30
[root@hadoop001 hiveData]# hadoop fs -put emp_dept_partition-deptno30 /user/hive/warehouse/emp_dept_partition/deptno=30 
[root@hadoop001 hiveData]# hadoop fs -cat /user/hive/warehouse/emp_dept_partition/deptno=30/emp_dept_partition-deptno30
7499    ALLEN   SALESMAN        7698    1981/2/20       1600.0  300.0
7521    WARD    SALESMAN        7698    1981/2/22       1250.0  500.0
7654    MARTIN  SALESMAN        7698    1981/9/28       1250.0  1400.0
7698    BLAKE   MANAGER 7839    1981/5/1        2850.0  \N
7844    TURNER  SALESMAN        7698    1981/9/8        1500.0  0.0
7900    JAMES   CLERK   7698    1981/12/3       950.0   \N
[root@hadoop001 hiveData]# 

4、パーティション表のデータを検査し、メタデータがまだ追加されていないため、クエリーにデータがないことを発見する.
hive> select * from emp_dept_partition where deptno=30;
OK
Time taken: 0.116 seconds

5、パーティション表情報のリフレッシュ
構文:ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION partition_spec [LOCATION 'location'][, PARTITION partition_spec [LOCATION 'location'], ...];
hive> ALTER TABLE emp_dept_partition ADD IF NOT EXISTS PARTITION (deptno=30);
OK
Time taken: 0.209 seconds
hive>  select * from emp_dept_partition where deptno=30;
OK
7499    ALLEN   SALESMAN        7698    1981/2/20       1600.0  300.0   30
7521    WARD    SALESMAN        7698    1981/2/22       1250.0  500.0   30
7654    MARTIN  SALESMAN        7698    1981/9/28       1250.0  1400.0  30
7698    BLAKE   MANAGER 7839    1981/5/1        2850.0  NULL    30
7844    TURNER  SALESMAN        7698    1981/9/8        1500.0  0.0     30
7900    JAMES   CLERK   7698    1981/12/3       950.0   NULL    30
Time taken: 0.168 seconds, Fetched: 6 row(s)

まとめ:
パーティションテーブルのパーティションのフォルダを直接作成し、対応するパーティションのデータファイルをアップロードすると、これらのデータは手動で追加されるためmysqlには対応するパーティションのメタデータが記録されていないため、hiveは対応する結果をクエリーできません.
hiveでパーティション情報をリフレッシュする必要があります(つまり、メタデータを格納したいデータベースにパーティション資料を追加します).
【@若沢ビッグデータより】