- Subscribe to RSS Feed
- Mark as New
- Mark as Read
- Bookmark
- Subscribe
- Printer Friendly Page
- Report Inappropriate Content
Created on 06-14-2017 05:17 PM
Goal:
This article provides script to extract the DDLs for all tables and partition in a given hive database. This scripts comes handy when migrating/creating Hive Tables from one cluster to another.
You can modify and loop this script by passing all the databases via command line.
#!/bin/bash hiveDBName=testdbname; showcreate="show create table " showpartitions="show partitions " terminate=";" tables=`hive -e "use $hiveDBName;show tables;"` tab_list=`echo "${tables}"` rm -f ${hiveDBName}_all_table_partition_DDL.txt for list in $tab_list do showcreatetable=${showcreatetable}${showcreate}${list}${terminate} listpartitions=`hive -e "use $hiveDBName; ${showpartitions}${list}"` for tablepart in $listpartitions do partname=`echo ${tablepart/=/=\"}` echo $partname echo "ALTER TABLE $list ADD PARTITION ($partname\");" >> ${hiveDBName}_all_table_partition_DDL.txt done done echo " ====== Create Tables ======= : " $showcreatetable ## Remove the file rm -f ${hiveDBName}_extract_all_tables.txt hive -e "use $hiveDBName; ${showcreatetable}" >> ${hiveDBName}_extract_all_tables.txt
Created on 02-19-2020 09:15 AM
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
Well you can write a small Unix script to do that. Here are the steps breaukp.
Step 1: Get the list of all the databases, commands for that is and redirect the output to any temporary file (e.g. /tmp/databases)
hive -e "show databases;" >> /tmp/databases
Step 2: Loop through each database to get the list of tables by using "show tables" and redirect the output to temporary file (e.g. /tmp/tables)
for f in `cat /tmp/databases`
do
echo "Database name is $f , Table Names are as below:"
hive -e "show tables;" >> /tmp/tables
done
Created on 08-07-2020 03:19 PM
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
Great way to simplify it. Believe you missed a 'use $f;' from Step 2 though, otherwise you're just getting the same tables over and over.
E.g.
for f in `cat /tmp/databases`
do
echo "Database name is $f , Table Names are as below:"
hive -e "use $f; show tables;" >> /tmp/tables
done