从Shell创建Hive表-动态表名称

时间:2018-12-15 18:34:37

标签: bash hadoop hive

我正在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代码,以便删除最后的手动步骤。有关如何进行此操作的任何提示?

1 个答案:

答案 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