HIVE脚本 - 将文件名指定为S3位置

时间:2012-07-25 21:06:15

标签: amazon-s3 hive

我正在使用以下脚本将数据从DynamoDB导出到S3:

CREATE EXTERNAL TABLE TableDynamoDB(col1 String, col2 String)
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES (
"dynamodb.table.name" = "TableDynamoDB",
"dynamodb.column.mapping" = "col1:col1,col2:col2"
);

CREATE EXTERNAL TABLE TableS3(col1 String, col2 String)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION 's3://myBucket/DataFiles/MyData.txt';

INSERT OVERWRITE TABLE TableS3
SELECT * FROM TableDynamoDB;

在S3中,我想将输出写入给定的文件名(MyData.txt) 但它目前的工作方式是上面脚本创建的文件夹名称为' MyData.txt' 然后在此文件夹下生成一个带有随机名称的文件。

是否可以使用HIVE在S3中指定文件名?

谢谢!

1 个答案:

答案 0 :(得分:2)

一些事情:

  • hadoop有两种不同的方式可以将数据写入s3。这个wiki更详细地描述了这些差异。由于您使用的是“s3”方案,因此您可能会看到一个块编号。
  • 通常,M / R作业(和配置单元查询)要将其输出写入多个文件。这是并行处理的工件。实际上,hadoop中的大多数命令/ API都可以非常无缝地处理目录,所以你不应该让它过多地给你带来麻烦。此外,您可以在目录上使用hadoop fs -getmerge之类的内容来读取单个流中的所有文件。
  • AFAIK,由于上述原因,外部配置单元表的DDL中的LOCATION参数始终被视为目录。