我心中的选择:
点火DESCRIBE TABLE;
点火SELECT 1 FROM TABLE;
如果表不存在,这些查询将失败。
哪种方式更好?还是有其他好方法吗?
答案 0 :(得分:0)
在许多情况下,我们可能不确定表存在于哪个数据库中,因此通常我们会循环遍历所有数据库。为节省时间,您可以使用以下脚本。
用您的直线字符串替换$ BEELINE_CONN_STRING,您可以将其保存为脚本并将table_name作为参数传递。要使您的搜索特定于某些数据库,您还可以将以下代码中的show databases
更改为show database like <your preferred database string>
,或将其作为参数传递给脚本。
table_name=${1}
for database in `$BEELINE_CONN_STRING --showHeader=false --outputformat=tsv2 --silent=true -e "show databases;" 2> /dev/null `
do
result=`$BEELINE_CONN_STRING --silent=true --showHeader=false --outputformat=tsv2 -e "use $database;show tables like '*$table_name*';" 2> /dev/null `
if [[ "test_append"$result"" != "test_append" ]];
then
echo "Table $result exists in $database"
else
echo "Table not found in $database"
fi
done
示例输出类似于
Table not found in yourdb
Table www_table exists in mydb