Гнездится за цикл в течение месяца в течение года - PullRequest
0 голосов
/ 25 сентября 2018

В настоящее время я пишу сценарий оболочки, который будет запрашивать у некоторых таблиц кустов количество записей в месяц для списка таблиц, а затем извлекать значения общего количества в виде файла .txt.В настоящее время у меня есть код, который будет запрашивать все таблицы на ежегодной основе, но как лучше сделать так, чтобы он также циклически работал на ежемесячной основе?

Например, сейчас мой сценарий будет циклически проходить каждый год, который я прохожу (year = 2001, 2002,2003, ...), запрашивать мои таблицы и извлекать файлы.Я бы хотел, чтобы он работал циклично в месяц для каждого года, чтобы в идеале было 12 файлов в год, и продолжал бы цикл в течение всех назначенных мной лет.

Пример псевдокода ниже для того, что у меня сейчас есть:

#!/usr/bin/sh    
years=2001,2002,2003,2004

for year in $(echo ${years} | sed "s/,/ /g")
do 
    select_sql="INSERT OVERWRITE LOCAL DIRECTORY <path> ROW FORMAT DELIMITED FIELDS TERMINATED BY '~' select * from tbl where year(date)=$year"
    beeline -u "<jdbc connection>" --hiveconf -e "$select_sql"

done

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Этот вопрос имеет тег bash, но интерпретатор - /usr/bin/sh.

В любом случае, давайте использовать bash.

#!/bin/bash

for clause in "year(date)="{2001,2002,2003,2004}" and month(data)='"{Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec}"'"
do
    select_sql="INSERT OVERWRITE LOCAL DIRECTORY <path> ROW FORMAT DELIMITED FIELDS TERMINATED BY '~' select * from tbl where $clause"
    echo "$select_sql"
    #beeline -u "<jdbc connection>" --hiveconf -e "$select_sql"
done
0 голосов
/ 25 сентября 2018

Вложенный цикл и массив в этом случае могут выглядеть примерно так:

years=2001,2002,2003,2004
months=(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)

for year in $(echo ${years} | sed "s/,/ /g")
do
    for month in "${months[@]}"
    do
        # do the query and file saving here
        echo "$year $month"
    done
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...