3

我正在使用以下脚本将数据从 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 中指定文件名?

谢谢!

4

1 回答 1

2

一些东西:

  • hadoop 可以通过两种不同的方式将数据写入 s3。这个wiki更详细地描述了这些差异。由于您使用的是“s3”方案,因此您可能会看到一个块号。
  • 通常,M/R 作业(和配置单元查询)将希望将其输出写入多个文件。这是并行处理的产物。实际上,hadoop 中的大多数命令/API 都非常无缝地处理目录,因此您不应该让它过多地打扰您。此外,您可以使用诸如hadoop fs -getmerge目录之类的东西来读取单个流中的所有文件。
  • AFAIK,由于上述原因,外部配置单元表的 DDL 中的 LOCATION 参数始终被视为目录。
于 2012-07-26T00:21:56.417 回答