2013-06-27 117 views
2

我在我的雲中的S3存儲桶中使用包含某些數據的CSV文件。使用Hive創建DynamoDB表

我想將這些數據導出到帶有「key」和「value」列的DynamoDB表中。

這裏是目前蜂巢劇本我寫了:

CREATE EXTERNAL TABLE FromCSV(key string, value string) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ', ' 
LOCATION 's3://mybucket/output/';      

CREATE EXTERNAL TABLE hiveTransfer(col1 string, col2 string) 
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' 
TBLPROPERTIES ("dynamodb.table.name" = "InvertedIndex", 
"dynamodb.column.mapping" = "col1:key,col2:value"); 

INSERT OVERWRITE TABLE hiveTransfer SELECT * FROM FromCSV; 

現在,基本上劇本的作品。儘管我想對此腳本做如下修改:

1)腳本只在DynamoDB中已存在表「InvertedIndex」的情況下有效,我希望腳本自行創建新表,然後將其數據就像它已經做的那樣。

2)在CSV中,鍵總是一個字符串,但我有2種值,字符串或整數。我希望腳本區分兩者並製作兩個不同的表格。

任何有關這兩項修改的幫助都將受到關注。 謝謝

回答

3

嗨,這可以實現,但它不是微不足道的情況。

1)創建無法由配置單元完成的動態表,因爲Dynamo表由Amazon雲管理。我想到的一件事是創建Hive UDF來創建動態表,並在運行插入之前在一些虛擬查詢中調用它。例如:

SELECT CREATE_DYNO_TABLE() FROM dummy; 

其中,虛擬表只有一個記錄。

2)你可以將加載分成兩個查詢,在一個查詢中你將使用RLIKE運算符和[0-9] +正則表達式來檢測數值和其他的否定。

HTH, Dino

+0

迪諾,非常感謝你:)!你能給我寫一個我需要的第二種查詢的例子嗎? (也許根據我的腳本)... – DanielY

+0

SELECT * from FromCSV WHERE value RLIKE'[0-9] +' –

+0

聽起來不錯謝謝你dino :) – DanielY

相關問題