我在Hive中有一个外部表名为" ddb_betaaccounthhistory "链接到DynamoDB表。
模式是:
CREATE EXTERNAL TABLE ddb_betaaccounthistory (
customer_id STRING,
date_action_id STRING,
`date` BIGINT,
action STRING,
client STRING,
ddbkmsig BINARY,
action_description BINARY,
reason STRING
time_to_live BIGINT)
STORED BY ...
time_to_live在某些行中有一些NULL字段,因为它没有完全填充。
我试图删除所有带有"日期"的项目。属性:1586551523,比这个时间戳早18个月,即2020年4月10日,并保留此日期之后的所有项。
我已经尝试了这个查询。根据我的理解,这个hive查询应该保留在这个unix时间戳1586551523之后创建的项目,并删除其他所有项目:
INSERT OVERWRITE TABLE ddb_betaaccounthistory
SELECT * FROM ddb_betaaccounthistory
WHERE `date` > 1586551523;
我也试过了,它仍然没有从表中删除任何东西。
INSERT OVERWRITE TABLE ddb_betaaccounthistory
SELECT * FROM ddb_betaaccounthistory
WHERE `date` > unix_timestamp() - 47340000;
Date
格式化为unix时间戳。
运行INSERT OVERWRITE语句后,外部表ddb_betaaccounthhistory中的项数保持不变。并且我的DynamoDB表在查询之后没有删除任何项。
当我运行hive查询时,我已经检查了确实有写在我的Dynamo表上被消耗,所以我知道它被正确地链接到Dynamo表。
我的hive查询有问题吗?我不知道为什么INSERT OVERWRITE不从我的表中删除项。
你可以试试吗
INSERT OVERWRITE TABLE ddb_betaaccounthistory
SELECT * FROM ddb_betaaccounthistory
WHERE unix_timestamp(`date`)> 1586551523
我认为列日期是一个时间戳数据类型,您需要转换为unix时间进行比较。