2012-07-11 85 views
-4

我有Five SQLquery,我需要運行,或者Sequentially意味着一個接一個或Independently。目前我所做的是,我需要在一個Putty session中依次運行所有Five SQL query,或者我可以打開五個Putty Session,並在這五個膩子會話中分別輸入一個查詢。所以它非常乏味,我需要手動運行它。所以我想讓這個過程自動化。從腳本運行五SQL查詢

是否有任何方式使用某種腳本,如Perl腳本或Python腳本,從中我可以按順序或獨立運行所有的五個查詢?

查詢在我的情況有點複雜和長,但考慮到上述情況,我以下面的五個查詢爲例 - 而這五個查詢並不相關。還有我使用Hive運行的這五個SQL查詢。

SELECT * FROM Table1; 
SELECT * FROM Table2; 
SELECT * FROM Table3; 
SELECT * FROM Table4; 
SELECT * FROM Table5; 

所以我的問題是我怎麼能在任何腳本語言中做到這一點?另外我不是特定於任何腳本,只是想知道在我的情況下哪個更好。任何滿足我的要求的代碼片段將不勝感激。

我正在使用HiveQL和HiveQL語法與SQL Sytnax相同。

P.S.我是所有腳本語言的新手。

+0

你沒有指定SQL的什麼味道....但是你可以在任何腳本語言 – 2012-07-11 23:47:41

+0

我與HiveQL工作,HiveQL語法是相同的SQL Sytnax。 – ferhan 2012-07-11 23:52:25

+0

如何打開HiveQL會話來運行查詢? – cppcoder 2012-07-12 04:38:14

回答

2

有很多方法可以做到這一點,這是一個非常基本的例子。結果是,在Perl中,您只需按照所需順序放置「execute」命令即可控制執行順序。我假設您熟悉Perl DBI以及如何連接到您的dbase。

#!/usr/bin/perl 
use DBI; 
use strict; 

my $dbh = DBI->connect($your_connect_string) || die qq{Could not connect to $dbase\n};  
my $sql_1 = qq{ select * from table1}; 
my $sql_2 = qq{ select * from table2}; 
my $sql_3 = qq{ select * from table3}; 

my $sth_1 = $dbh->prepare($sql_1); 
my $sth_2 = $dbh->prepare($sql_2); 
my $sth_3 = $dbh->prepare($sql_3); 

$sth_1->execute(); 
$sth_2->execute(); 
$sth_3->execute(); 

while (my $hashref_1 = $sth_1->selectrow_hashref()) { 
...do something 
} 

while (my $hashref_2 = $sth_2->selectrow_hashref()) { 
...do something 
} 

while (my $hashref_3 = $sth_3->selectrow_hashref()) { 
...do something 
} 

$sth_1->finish(); 
$sth_2->finish(); 
$sth_3->finish(); 

$dbh->disconnect(); 

exit;