2015-11-11 4 views
0

У меня есть основной скрипт bash, выполняющий несколько других сценариев bash и hql-файлов. Файлы hql имеют запросы на улей. В запросах улья есть предложение where, и оно находится в поле даты. Я пытаюсь автоматизировать процесс, и мне нужно, чтобы предложение where изменилось на основе сегодняшней даты (которая получена из основного сценария bash).аргументы командной строки в файлах hive (.hql) из сценария bash

Например .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 days и date-8 days к .hql сценария из сценария bash. Есть ли способ передать эти две переменные из сценария bash в файл .hql.

Так что главный Баш скрипт выглядит следующим образом:

#!/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/[email protected]' -d org.apache.hive.jdbc.HiveDriver -f /home/automation/tv/selectrows.hql 
echo "created table" 

заранее спасибо.

+0

Является ли файл hql используемым в качестве аргумента/ввода для какой-либо другой команды? Эта команда/etc. поддерживающие переменные? Если нет, вы всегда можете использовать заполнители '@ DATE1 @' и т. Д. В файле '.hql', а затем заменить их во время выполнения (с помощью' sed' и т. Д.). –

+0

Привет, Этан, посмотри, я обновил некоторую информацию – user1189851

+0

Это хорошо, но не отвечает на мои вопросы. Это указывает на то, что решение для замены заполнителя будет работать. –

ответ

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/[email protected]' -d org.apache.hive.jdbc.HiveDriver -e "$hql""$dateneeded9""' AND origintime < '""$dateneeded8""';" 
echo "created table"