Hive 使用文件名从配置单元表中删除记录

Hive 使用文件名从配置单元表中删除记录,hive,Hive,我有一个用例,其中我从一堆csv文件构建了一个配置单元表。在将csv信息写入配置单元表时,我将INPUT\u FILE\u NAME(名称的一部分)分配给其中一列。当我想更新相同文件名的记录时,我需要在再次写入之前删除csv文件的记录 我使用下面的查询,但失败 CREATE EXTERNAL TABLE T_TEMP_CSV( F_FRAME_RANK BIGINT, F_FRAME_RATE BIGINT, F_SOURCE STRING

我有一个用例,其中我从一堆csv文件构建了一个配置单元表。在将csv信息写入配置单元表时,我将
INPUT\u FILE\u NAME
(名称的一部分)分配给其中一列。当我想更新相同文件名的记录时,我需要在再次写入之前删除
csv
文件的记录

我使用下面的查询,但失败

CREATE EXTERNAL TABLE T_TEMP_CSV(    
        F_FRAME_RANK BIGINT,
        F_FRAME_RATE BIGINT,
        F_SOURCE STRING,
        F_PARAMETER STRING,
        F_RECORDEDVALUE STRING,
        F_VALIDITY INT,
        F_VALIDITY_INTERPRETATION STRING)         
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ';'       
    location '/user/baamarna5617/HUMS/csv'
    TBLPROPERTIES ("skip.header.line.count"="2"); 


DELETE FROM T_RECORD       
  WHERE T_RECORD.F_SESSION = split(reverse(split(reverse(T_TEMP_CSV.INPUT__FILE__NAME),"/")[0]), "[.]")[0] 
         from T_TEMP_CSV;
T\u记录
表中有一个名为
F\u SESSION
的列,该列是使用上述拆分方法分配给
输入文件名
的一部分。我希望在删除这些记录时使用相同的方法。有人能告诉我这个问题哪里出了错吗

我可以使用以下语法成功删除记录

 DELETE FROM T_RECORD 
    WHERE F_SESSION = 68;

我需要从
INPUT\u FILE\u NAME

中获取68,为什么不直接删除该文件?它比从表中删除记录快得多。在我们的用例中,我已经从hdfs中存储的一堆csv文件(比如A、B、C)中创建了一个内部表。有时,我们会从客户处收到一份修改过的文件,我们需要更新该文件的内部表。因此,我考虑从内部表中删除A的记录并插入。因此,我采用了这种方法。好的,首先删除文件A,然后添加新记录(添加新文件A或插入)。这比更新快。我了解到删除文件不会删除托管表中的数据。我已经创建了一个托管表。您建议创建外部表?托管或外部,删除文件将删除其在任何表中的记录。因为记录数据存储在文件中。托管和外部之间的区别:删除外部表不会删除文件。Drop托管表将删除文件。为什么不删除该文件?它比从表中删除记录快得多。在我们的用例中,我已经从hdfs中存储的一堆csv文件(比如A、B、C)中创建了一个内部表。有时,我们会从客户处收到一份修改过的文件,我们需要更新该文件的内部表。因此,我考虑从内部表中删除A的记录并插入。因此,我采用了这种方法。好的,首先删除文件A,然后添加新记录(添加新文件A或插入)。这比更新快。我了解到删除文件不会删除托管表中的数据。我已经创建了一个托管表。您建议创建外部表?托管或外部,删除文件将删除其在任何表中的记录。因为记录数据存储在文件中。托管和外部之间的区别:删除外部表不会删除文件。Drop托管表将删除文件。