我已经创建了一个工作配置单元脚本,将数据从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");
1条答案
按热度按时间mcdcgff01#
您可以使用配置单元表命令直接管理文件
首先,如果要使用配置单元外部控制的外部数据,请在创建表时使用external命令
现在可以将数据插入此表
这将在s3中的目录位置内创建文本文件。注意,根据数据大小和大小写的数目,可能有多个文本文件。文件名也是随机的guid元素,即03d3842f-7290-4a75-9c22-5cdb8cdd201b\u000000
删除表只会中断到文件的链接
现在如果您想管理这个目录,您可以创建一个表来控制s3目录(注意没有
external
(命令)如果您现在发出drop table命令,则会立即删除文件夹中的所有文件
我建议您创建一个非外部表,然后删除它并继续执行脚本的其余部分。如果遇到错误,作业完成后将有一个空目录
希望这能满足你的需要