检查表是否存在,并将数据加载到hbase和hive表中

r1zhe5dt  于 2021-06-02  发布在  Hadoop
关注(0)|答案(3)|浏览(407)

我有hdfs的数据。我想把数据加载到hbase和hive表中。我编写了一个bash shell脚本,其中我编写了一个pig脚本来将数据从hdfs加载到hbase,还编写了一个hive脚本来将数据从hdfs加载到hive表,这两个脚本工作得非常好。在这里,我的hdfs数据文件具有相同的结构,我正在将所有数据文件加载到单个hbase和hive表中。
现在我的查询假设是,如果我在hdfs目录中接收到更多的数据文件,并且如果我再次运行shell脚本,它将使用相同的名称再次创建hbase和hive表,并告知表已经存在。如何编写一个hive和hbase查询,以便第一次检查表是否存在,如果表不存在,则第一次创建表并将数据从hdfs加载到hbase和hive表。如果表已经存在,那么它只会将数据插入到现有的hbase和hive表中。它不应该覆盖表中的所有数据。如何做到这一点?
下面是我的脚本文件:myscript.sh

echo "create 'goodtable','gt'" | hbase shell    
pig -f a.pig -param input=/user/user/d/
hive -f h.hql

其中a.pig:

G = LOAD '$input' USING PigStorage(',') as (c1:chararray, c2:chararray,c3:chararray,c4:chararray,c5:chararray);
STORE G INTO 'hbase://goodtable' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('gt:name gt:state gt:phone_no gt:gender');

h、 总称:

create external table hive_table(
id int,
name string,
state string,
phone_no int,
gender string) row format delimited fields terminated by ',' stored as textfile;
LOAD DATA INPATH '/user/user/d/' INTO TABLE hive_table;
bqjvbblv

bqjvbblv1#

我只想为hbase添加一个示例,因为之前已经介绍了hive:

if [[ $(echo "exists 'goodtable'" | hbase shell | grep 'not exist') ]]; 
then 
    echo "create 'goodtable','gt'" | hbase shell;   
fi
zfciruhq

zfciruhq2#

@visakh是正确的-您可以通过输入hbase shell并键入: exists '<tablename> 为了在不以交互方式进入hbase shell的情况下执行此操作,可以创建一个简单的ruby脚本,如下所示:

exists 'mytable'
   exit

假设您将其保存到一个名为tabletest.rb的文件中。然后可以通过调用 hbase shell tabletest.rb . 这将创建以下输出,然后您可以从shell脚本中解析这些输出:

Table tableisthere does exist                                                           
    0 row(s) in 0.9830 seconds

Table tableisNOTthere does not exist                                                           
    0 row(s) in 0.9830 seconds

为“一体机”脚本添加更多详细信息:
或者,您可以在ruby中创建一个更高级的脚本,检查表是否存在,然后在需要时创建它—这是在ruby脚本中调用hbaseadmin java api完成的。

conf = HBaseConfiguration.new
hbaseAdmin = HBaseAdmin.new(conf)

if !hbaseAdmin.tableExists('mytable')
    hbaseAdmin.createTable('mytable',...)
end
f4t66c6m

f4t66c6m3#

为了 HIVE ,可以添加命令 IF NOT EXISTSCREATE TABLE 声明。请参阅文档
我在这方面没有多少经验 Hbase 但我相信你可以 EXISTS table_name 命令检查表是否存在,然后 create 这张table不存在。看到这里了吗

相关问题