hiveノート-パーティションのリフレッシュ
1、パーティション表(今回は内部表)を1枚選択し、パーティションデータをローカルに取ります.
2、このパーティションを削除する
3、deptno=30のデータをローカルからemp_に戻すdept_partition対応hdfsパス
4、パーティション表のデータを検査し、メタデータがまだ追加されていないため、クエリーにデータがないことを発見する.
5、パーティション表情報のリフレッシュ
構文:ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION partition_spec [LOCATION 'location'][, PARTITION partition_spec [LOCATION 'location'], ...];
まとめ:
パーティションテーブルのパーティションのフォルダを直接作成し、対応するパーティションのデータファイルをアップロードすると、これらのデータは手動で追加されるためmysqlには対応するパーティションのメタデータが記録されていないため、hiveは対応する結果をクエリーできません.
hiveでパーティション情報をリフレッシュする必要があります(つまり、メタデータを格納したいデータベースにパーティション資料を追加します).
【@若沢ビッグデータより】
[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でパーティション情報をリフレッシュする必要があります(つまり、メタデータを格納したいデータベースにパーティション資料を追加します).
【@若沢ビッグデータより】