Created 07-28-2022 02:32 PM
I have a directory of say 10 SQL files and out of which I need to run only 5 SQL files. I am trying to achieve this by creating an array of only the five files that I need to execute and trying to call Beeline -f in for loop to execute the files . But the solution does not seem to be working . The SQL can be triggered when I run beeline -f mysqlfile.sql
for eachline in "${testarray[@]}"
do
beeline -f '${eachline}'.sql
done
Created 07-31-2022 06:13 PM
@Caliber ,
Not sure if this is the problem, but beeline has a known issue with terminal settings when running in the background.
Try adding this to your script, before the for loop:
export HADOOP_OPTS=-Djline.terminal=jline.UnsupportedTerminal
Cheers,
André
Created 08-01-2022 12:40 PM
@Caliber The following command should work:
# for hql in {a.hql,b.hql}; do beeline -n hive -p password --showheader=false --silent=true -f $hql; done
Created on 03-06-2024 12:38 AM - edited 03-06-2024 12:38 AM
It seems like there might be an issue with the way you're using single quotes in the loop. The variable eachline should be expanded, but it won't if it's enclosed in single quotes. Try using double quotes around the variable and see if that resolves the issue. Here's the corrected loop:
for eachline in "${testarray[@]}"
do
beeline -f "${eachline}.sql"
done
This way, the value of eachline will be correctly expanded when constructing the command. Also, ensure that the SQL files are present in the correct path or provide the full path if needed. If the issue persists, please provide more details on the error message or behavior you're experiencing for further assistance.