我在我的云中,在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中,键总是一个字符串,但我有两种值,字符串或整数。我希望脚本区分两者并制作两个不同的表。
对这两项修改的任何帮助都会受到批评。 谢谢
答案 0 :(得分:3)
嗨,这可以完成,但这不是一件小事。
1)用于创建无法通过配置单元完成的发电机表,因为Dynamo表由Amazon云管理。我想到的一件事是创建Hive UDF来创建dynamo表,并在运行insert之前在一些虚拟查询中调用它。例如:
SELECT CREATE_DYNO_TABLE() FROM dummy;
虚拟表只有一条记录。
2)您可以将加载拆分为两个查询,在一个查询中,您将使用RLIKE运算符和[0-9] +正则表达式来检测数值,而其他只是否定它。
HTH, 恐龙