2016-08-09 9 views
2

私はハイブを始めたばかりです。誰かがこの要件で私を助けてくれますか?ハイブテーブルから動的にパーティションを削除する方法は?

私の要件は、パーティションを動的に削除することです。私はさまざまな地域(SQLは以下:ALTER TABLE FROM)の結果となるSQLを持っていました。今私は、私のハイブテーブルでパーティション化された領域を削除したい、私のSQLによって返されます。

私は、以下の方法で試してみました

'1:21:13 [ALTER - 0 row(s), 0.008 secs] [Error Code: 40000, SQL State: 42000] Error while compiling statement: FAILED: ParseException 
line 1:77 cannot recognize input near 'tab' '.' 'region' in constant 
... 1 statement(s) executed, 0 row(s) affected, exec/fetch time: 0.008/0.000 sec [0 successful, 0 warnings, 1 errors] 

は、誰かが私を助けてくださいでした:

ALTER TABLE <TableName> PARTITION(region=tab.region) 
FROM 
select tab.region from 
(SELECT * from Table1) tab join 
(select filename from Table2) tab1 
on tab1.filename = tab.filename 

それは以下の例外をスローするのか?事前に

おかげ

答えて

1

シェルスクリプト:

$ cat test 
#!/bin/sh 

IFS=$'\n' 

#get partitions 
part=`hive -e "select tab.region from (SELECT * from Table1) tab join (select filename from Table2) tab1 on tab1.filename = tab.filename"` 

for p in $part 
do 

    partition=`echo $p|cut -d '=' -f2` 

    echo Drooping partitions .... $partition 

    #drop partitions 
    hive -e "ALTER TABLE test_2 DROP PARTITION(region=\"$partition\")" 

done 

出力:

$ ./test 
OK 
Time taken: 1.343 seconds, Fetched: 2 row(s) 
Drooping partitions .... 2016-07-26 15%3A00%3A00 
Dropped the partition region=2016-07-26 15%3A00%3A00 
OK 
Time taken: 2.686 seconds 
Drooping partitions .... 2016-07-27 
Dropped the partition region=2016-07-27 
OK 
Time taken: 1.612 seconds 

更新:~~>実行SH HQLからエルスクリプト(これは単なるPOCは、あなたのREQに応じて変更を行います。) を使用して! <command> - Executes a shell command from the Hive shell.

test_1.sh:

#!/bin/sh 
echo " This massage is from $0 file" 

ハイブ-test.hql:

! echo showing databases... ; 
show databases; 

! echo showing tables...; 
show tables; 

! echo runing shell script...; 
! /home/cloudera/test_1.sh 

出力:

$ hive -v -f hive-test.hql 
showing databases... 

    show databases 
OK 
default 
retail_edw 
sqoop_import 
Time taken: 0.997 seconds, Fetched: 3 row(s) 
showing tables... 

    show tables 
OK 
scala_departments 
scaladepartments 
stack 
stackover_hive 
Time taken: 0.062 seconds, Fetched: 4 row(s) 
runing shell script... 
This massage is from /home/cloudera/test_1.sh file 
+0

お返事ありがとうございます。シェルスクリプトを使用してその作業。しかし、私たちはoozieを使って.hqlを起動しています。上記のhqlは大規模なhqlファイルの真中にあります。だから私はこの可能性はhqlで処理することができます任意の可能性がある?シェルスクリプトを使わずに – user2531569

+2

@ user2531569私はhqlがその動的になるとは思わない。私はあなたが何かのようなものになるのではないかと思います。既存のhqlスクリプトを半分にカットし、oozieを前半に実行させ、oozieにシェルスクリプトを実行させ、最後に半分を実行させます。 –

+1

@ user2531569 - 私はDennisに同意します - [あなたはoozieからシェルスクリプトを実行できます](https://oozie.apache.org/docs/3.2.0-incubating/DG_ShellActionExtension.html)**または**シェルを実行できます'hql'からのスクリプト - 詳細については私の更新された答えを見てください... –

関連する問題