2017-01-19 6 views

答えて

0

定義テーブル名:

declare -a table_names=("Table_1;['t1']" "Table_2;['t1','t2']") 

'TABLE_1は' TABLE_NAME

'T1' ですcolumn_familyです。

反復各テーブルに基づい

for i in "${table_names[@]}" 
do 

done 

';'を分割します。ここで最初の値はテーブル名 &第2の値は列ファミリになります。

set -- "$i" 
IFS=";"; declare -a table_name_info=($*) 

表は、ログファイルに結果を格納存在するか確認してください&。

echo "exists '${table_name_info[0]}'" | hbase shell > log 2>&1 

「テーブルは存在します」というメッセージを検索します。存在する場合、ステータスは0として返されます。ステータスが0の場合、テーブルはすでに存在します。

cat log | grep -q 'Table '${table_name_info[0]}' does exist' 

if [ $? = 0 ]; then 
    ## log message 
else 
    ## write script to create a table 
fi 

ここでは完全なスクリプトコード検索:

hbase_shell_script.shを

#!/bin/sh 

echo "Running the <$0> file" 

## table names 
declare -a table_names=("Table_1;['t1']" "Table_2;['t1','t2']") 

function tableExists { 
    echo "Table <$1> already exists." 
} 

function createTable { 
    echo "Table <$1> does not exist." 
    echo "Creating the Table <$1>" 

    echo "create '$1', $2" | hbase shell > log 2>&1 
    cat log | grep -q '0 row(s) in' 

    if [ $? = 0 ]; then 
     echo "Table <$1> created successfully." 
    else 
     echo "Table <$1> is not created." 
    fi 
} 


## iterating table names and checking table already exists. if does not exist creating table. 
for i in "${table_names[@]}" 
do 
     ## splitting the table based on ';'. First argument will be 'table_name' and second argument will be 'column_families' 
     set -- "$i" 
     IFS=";"; declare -a table_name_info=($*) 

     echo "" 
     echo "Checking the table <${table_name_info[0]}> exists or not" 
     echo "" 

     echo "exists '${table_name_info[0]}'" | hbase shell > log 2>&1 
     cat log | grep -q 'Table '${table_name_info[0]}' does exist' 

     if [ $? = 0 ]; then 
      tableExists ${table_name_info[0]} 
     else 
      createTable ${table_name_info[0]} ${table_name_info[1]} 
     fi 
done 

## deleting the log file. 
rm -rf log 
echo "" 
echo "done." 

exit 
関連する問題