使用Hive创建DynamoDB表

时间:2013-06-27 06:50:20

标签: amazon-web-services amazon-s3 hive amazon-dynamodb

我在我的云中,在S3存储桶中,包含一些带有一些数据的CSV文件。

我想将这些数据导出到一个DynamoDB表中,其中列为" key"和"价值"。

这是我写的当前配置单元脚本:

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)该脚本仅在表" InvertedIndex"已存在于DynamoDB中,我希望脚本能够自己创建新表,然后按原样放置数据。

2)在CSV中,键总是一个字符串,但我有两种值,字符串或整数。我希望脚本区分两者并制作两个不同的表。

对这两项修改的任何帮助都会受到批评。 谢谢

1 个答案:

答案 0 :(得分:3)

嗨,这可以完成,但这不是一件小事。

1)用于创建无法通过配置单元完成的发电机表,因为Dynamo表由Amazon云管理。我想到的一件事是创建Hive UDF来创建dynamo表,并在运行insert之前在一些虚拟查询中调用它。例如:

 SELECT CREATE_DYNO_TABLE() FROM dummy;

虚拟表只有一条记录。

2)您可以将加载拆分为两个查询,在一个查询中,您将使用RLIKE运算符和[0-9] +正则表达式来检测数值,而其他只是否定它。

HTH, 恐龙