如何使用配置单元脚本删除aws中s3 bucket中的000000文件

42fyovps  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(376)

我已经创建了一个工作配置单元脚本,将数据从dynamodb备份到aws中s3 bucket中的一个文件。下面显示了一个代码段

INSERT OVERWRITE DIRECTORY '${hiveconf:S3Location}' 
SELECT *
FROM DynamoDBDataBackup;

当我运行配置单元脚本时,它可能会删除旧文件并创建一个新文件,但是如果备份过程中出现错误,我猜它会回滚到旧数据,因为发生错误时文件仍然存在。
每天我们都想备份,但我需要知道是否发生了错误,所以我想先删除前几天的备份,然后再创建备份。如果失败,那么文件夹中没有我们可以自动检测到的文件。
文件名自动命名为000000
在我的Hive脚本中,我尝试过失败:

delete FILE '${hiveconf:S3Location}/000000'

delete FILE '${hiveconf:S3Location}/000000.0'

也许文件名错了。我没有对该文件设置任何权限。
我刚试过这个,但失败了

SET dynamodb.endpoint= ${DYNAMODBENDPOINT}; 
SET DynamoDBTableName = "${DYNAMODBTABLE}";
SET S3Location = ${LOCATION};

DROP TABLE IF EXISTS DynamoDBDataBackupPreferenceStore;

CREATE TABLE IF NOT EXISTS DynamoDBDataBackupPreferenceStore(UserGuid STRING,PreferenceKey STRING,DateCreated STRING,DateEmailGenerated STRING,DateLastUpdated STRING,ReceiveEmail STRING,HomePage STRING,EmailFormat STRING,SavedSearchCriteria STRING,SavedSearchLabel STRING),   
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'

'位置'${hiveconf:s3location},tblproperty(“dynamodb.table.name”=${hiveconf:dynamodbtablename},“dynamodb.column.mapping”=“userguid:userguid,首选项erencekey:preferencekey,da公司tecreated:datecreated,日期电子邮件generated:dateemailgenerated,达泰拉stupdated:datelastupdated,记录eiveemail:receiveemail,homepage:homepage,嗯ailformat:emailformat,保存的搜索hcriteria:savedsearchcriteria,已保存archlabel:savedsearchlabel");

mcdcgff0

mcdcgff01#

您可以使用配置单元表命令直接管理文件
首先,如果要使用配置单元外部控制的外部数据,请在创建表时使用external命令

set S3Path='s3://Bucket/directory/';

CREATE EXTERNAL TABLE IF NOT EXISTS S3table
( data STRING
)
ROW FORMAT DELIMITED
       FIELDS TERMINATED BY ','
   LOCATION ${hiveconf:S3Path};

现在可以将数据插入此表

INSERT OVERWRITE TABLE S3table
    SELECT data
    FROM DynamoDBtable;

这将在s3中的目录位置内创建文本文件。注意,根据数据大小和大小写的数目,可能有多个文本文件。文件名也是随机的guid元素,即03d3842f-7290-4a75-9c22-5cdb8cdd201b\u000000

DROP TABLE S3table;

删除表只会中断到文件的链接
现在如果您想管理这个目录,您可以创建一个表来控制s3目录(注意没有 external (命令)

CREATE TABLE IF NOT EXISTS S3table
( data STRING
)
ROW FORMAT DELIMITED
       FIELDS TERMINATED BY ','
   LOCATION ${hiveconf:S3Path};

如果您现在发出drop table命令,则会立即删除文件夹中的所有文件

DROP TABLE S3table;

我建议您创建一个非外部表,然后删除它并继续执行脚本的其余部分。如果遇到错误,作业完成后将有一个空目录
希望这能满足你的需要

相关问题