【问题标题】:command line arguments in hive ( .hql) files from a bash script来自 bash 脚本的 hive (.hql) 文件中的命令行参数
【发布时间】:2015-11-12 19:45:55
【问题描述】:

我有一个运行其他几个 bash 脚本和 hql 文件的主 bash 脚本。 hql 文件具有配置单元查询。蜂巢查询有一个 where 子句,它位于日期字段上。我正在尝试自动化流程,我需要根据今天的日期(从主 bash 脚本获得)更改 where 子句。

例如,.hql 文件如下所示: 这是selectrows.hql

DROP TABLE IF EXISTS tv.events_tmp;
CREATE TABLE tv.events_tmp
(   origintime STRING,
 deviceid STRING,
 clienttype STRING,
 loaddate STRING)
 ROW FORMAT DELIMITED FIELDS TERMINATED BY '\u0001'
 LINES TERMINATED BY '\n'
 STORED AS TEXTFILE LOCATION 'hdfs://nameservice1/data/full/events_tmp';

INSERT INTO TABLE tv.events_tmp SELECT origintime, deviceid, clienttype, loaddate FROM tv.events_tmp WHERE origintime >= '2015-11-02 00:00:00' AND origintime < '2015-11-03 00:00:00';

由于今天是 2015-11-11,我希望能够将 date - 9 daysdate-8 days 从 bash 脚本传递给 .hql 脚本。有没有办法将这两个变量从 bash 脚本传递到 .hql 文件。

所以主 bash 脚本如下所示:

#!/bin/bash
# today's date
prodate=`date +%Y-%m-%d`
echo $prodate
dateneeded=`date -d "$prodate - 8 days" +%Y-%m-%d`
echo $dateneeded

# CREATE temp table
beeline -u 'jdbc:hive2://datanode:10000/;principal=hive/datanode@HADOOP.INT.BELL.CA' -d org.apache.hive.jdbc.HiveDriver -f /home/automation/tv/selectrows.hql
echo "created table"

提前致谢。

【问题讨论】:

  • hql 文件是否用作其他命令的参数/输入?执行该命令/等。支持变量?如果不是,您始终可以在.hql 文件中使用占位符@DATE1@ 等,然后在运行时替换它们(使用sed 等)。
  • 嗨,Etan,请看,我更新了一些信息
  • 这很好,但没有回答我的问题。它确实表明占位符解决方案可以工作。

标签: bash hql command-line-arguments


【解决方案1】:

您可以使用beeline -e 选项使用字符串执行查询。然后将日期参数传递给字符串。

#!/bin/bash
# today's date
prodate=`date +%Y-%m-%d`
echo $prodate
dateneeded8=`date -d "$prodate - 8 days" +%Y-%m-%d`
dateneeded9=`date -d "$prodate - 9 days" +%Y-%m-%d`
echo $dateneeded8
echo $dateneeded9

hql="
DROP TABLE IF EXISTS tv.events_tmp;
CREATE TABLE tv.events_tmp
(   origintime STRING,
 deviceid STRING,
 clienttype STRING,
 loaddate STRING)
 ROW FORMAT DELIMITED FIELDS TERMINATED BY '\u0001'
 LINES TERMINATED BY '\n'
 STORED AS TEXTFILE LOCATION 'hdfs://nameservice1/data/full/events_tmp';

INSERT INTO TABLE tv.events_tmp SELECT origintime, deviceid, clienttype, loaddate FROM tv.events_tmp WHERE origintime >= '"

echo "$hql""$dateneeded9""' AND origintime < '""$dateneeded8""';"

# CREATE temp table
beeline -u 'jdbc:hive2://datanode:10000/;principal=hive/datanode@HADOOP.INT.BELL.CA' -d org.apache.hive.jdbc.HiveDriver -e "$hql""$dateneeded9""' AND origintime < '""$dateneeded8""';"
echo "created table"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 2013-01-14
    • 2016-09-12
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    相关资源
    最近更新 更多