說明
最近在做集群資料遷移,需要把hive所有的表同步至新的集群。
指令碼
#! /bin/bash
mkdir -p /opt/hive/tables/tablesddl
hive -e "show databases;"
> /opt/hive/databases.txt
echo
"cat database"
cat /opt/hive/databases.txt
cat /opt/hive/databases.txt |
while
read database
doecho
"use $;"
>>/opt/hive/tables/tablesddl/$_tablesddl.txt
sed -i "1 i\create database if not exists $;" /opt/hive/tables/tablesddl/$_tablesddl.txt
hive -e "use $database; show tables;"
> /opt/hive/tables/$_tables.txt
cat /opt/hive/tables/$_tables.txt |
while
read table
doecho
"$table"
hive -e "use $database; show create table $table"
>> /opt/hive/tables/tablesddl/$_tablesddl.txt
echo
";">> /opt/hive/tables/tablesddl/$_tablesddl.txt
done
sed -i 's/create table/create table if not exists/g' /opt/hive/tables/tablesddl/$_tablesddl.txt
done
然後通過hive 執行 /opt/hive/tables/tablesddl/$_tablesddl.txt 這個檔案就可以了,每個檔案代表 乙個庫裡面所有的表。
ls /opt/hive/
tables
/tablesddl/
*.txt |
while
read line
do# hive -f $line #這種方式如果中間建表錯誤,就會中斷,導致後面的表不能建立
beeline -u jdbc:hive2: -n data -p az -f $line --force=true
done
shell指令碼的方式批量匯出hive建表語句
最近遇到的乙個工作任務。由於公司集群不支援使用hive命令,只能使用beeline命令。通過beeline e 或 beeline f 匯出的結果,會包含一些其他多餘的資訊,不好過濾。同時beeline e 只能跟一條sql語句。於是使用spark sql來完成指令碼編寫。第一版spark sql ...
hive新集群批量建表
工作中,遇到hive集群搬遷,從a集群,遷到b集群,相應的資料表也要隨之遷移,但hive表一般都比較多,下面實現批量處理方式 1.獲得待搬遷的資料表清單table list.txt。hive e use zx zz show tables table list.txt2.處理建表語句。執行命令,在每...
hive建庫建表與資料匯入匯出
hive建表 hive分內部表與外部表,建立內部表時,會將資料移動到資料倉儲指向的路徑 若建立外部表,僅記錄資料所在的路徑,不對資料的位置做任何改變。在刪除表的時候,內部表的元資料和資料會被一起刪除,而外部表只刪除元資料,不刪除資料。這樣外部表相對來說更加安全些,資料組織也更加靈活,方便共享源資料。...