在之前的博文中提到,hive的表資料是能夠同步到impala中去的。
一般impala是提供實時查詢操作的,像比較耗時的入庫操作我們能夠使用hive。然後再将資料同步到impala中。另外,我們也能夠在hive中建立一張表同一時候映射hbase中的表。實作資料同步。
以下。筆者依次進行介紹。
首先,我們在hive指令行運作show databases;能夠看到有以下幾個資料庫:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5iMmNDZmdjM3ATNzYWMlFDNhZzY0IjMmVzM4ETZ0kzM18CXxAzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL4M3Lc9CX6MHc0RHaiojIsJye.png)
然後,我們在impala相同運作show databases;能夠看到:
眼下的資料庫都是一樣的。
以下,我們在hive裡面運作create database qyk_test;建立一個資料庫,例如以下:
然後,我們使用qyk_test這個資料庫建立一張表,運作create table user_info(id bigint, account string, name string, age int) row format delimited fields terminated by ‘\t’;例如以下:
此時。我們已經在hive這邊建立好了,然後直接在impala這邊運作show databases;能夠看到:
連qyk_test這個資料庫都沒有。
接下來。我們在impala運作INVALIDATE METADATA;然後再查詢能夠看到:
資料庫和表都會同步過來。
好了,筆者來做個總結:
假設在hive裡面做了新增、删除資料庫、表或者資料等更新操作,須要運作在impala裡面運作INVALIDATE METADATA;指令才幹将hive的資料同步impala。
假設直接在impala裡面新增、删除資料庫、表或者資料。會自己主動同步到hive,無需運作不論什麼指令。
首先,我們在hbase中建立一張表create ‘user_sysc’, {NAME => ‘info’},然後,我們在hive中運作
建立一張外部表指向hbase中的表,然後,我們在hive運作insert into table user_sysc select id,name from user_info;入一步份資料到user_sysc能夠看到:
然後。我們在hbase裡面運作scan ‘user_sysc’能夠看到:
接下來,我們在hbase裡面運作deleteall ‘user_sysc’, ‘11’删掉一條資料。例如以下:
然後。我在hive裡面查詢看看。例如以下:
說明自己主動同步過來了。是以,僅僅要建立hive表時。與hbase中的表做了映射。表名和字段名能夠不一緻,之後不管在hbase中新增删除資料還是在hive中。都會自己主動同步。
假設在hive裡面是建立的外部表須要在hbase中先建立。内部表則會在hbase中自己主動建立指定的表名。
由于hive不支援删除等操作。而hbase裡面比較友善,是以我們能夠採用這樣的方式。