我正在Hadoop边缘节点上运行一个bash shell脚本,该脚本依次调用两个R脚本文件。这些R脚本对当前数据运行分析,然后将具有今天日期的名称格式为“ analysis_YYYYMMDD.csv”的CSV文件保存到HDFS。
我需要能够将此CSV文件作为Hive表使用。我还将这些数据附加到现有表中。就目前而言,我每天获取CSV并在Hive CLI中运行以下代码:
create table schema.analysis_YYYYMMDD(col1 string, col2 string, col3 double)
row format delimited fields terminated by ',' stored as textfile ;
LOAD DATA INPATH 'analysis_YYYYMMDD.csv' OVERWRITE INTO TABLE
schema.analysis_YYYYMMDD;
INSERT INTO TABLE schema.all_analysis SELECT * FROM
schema.analysis_YYYYMMDD;
我想在我的shell脚本中包含此Hive CLI代码,以便删除最后的手动步骤。有关如何进行此操作的任何提示?
答案 0 :(得分:0)
您可能有一个用于创建脚本的模板,并每天将其替换为当日的适当位置。
然后可以使用带有hive
选项的-f
命令行来运行整个脚本文件
#!/bin/bash
curr_dt=$(date +%Y%m%d) #get date in YYYYMMDD format
cat >daily_sql_"${curr_dt}".sql <<'EOL'
create table schema.analysis_YYYYMMDD(col1 string, col2 string, col3 double)
row format delimited fields terminated by ',' stored as textfile ;
LOAD DATA INPATH 'analysis_YYYYMMDD.csv' OVERWRITE INTO TABLE
schema.analysis_YYYYMMDD;
INSERT INTO TABLE schema.all_analysis SELECT * FROM
schema.analysis_YYYYMMDD;
EOL
if [ -n "$curr_dt" ];then #if defined
perl -pi -e "s/YYYYMMDD/$curr_dt/" daily_sql_"${curr_dt}".sql
#replace date format to $curr_dt
fi
if [ -f daily_sql_"${curr_dt}".sql ]
then
hive -f daily_sql_"${curr_dt}".sql
fi