2

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

我想将该数据导出到包含“键”和“值”列的 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 种值,字符串或整数。我希望脚本能够区分两者并制作两个不同的表格。

对这两个修改的任何帮助都将得到应用。谢谢

4

1 回答 1

3

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

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

 SELECT CREATE_DYNO_TABLE() FROM dummy;

虚拟表只有一条记录。

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

HTH,迪诺

于 2013-06-27T07:47:28.130 回答