如果你的Hive表是Managed Table(托管表),而不是External Table(外部表),则在加载数据时,Hive可能会移动或删除原始文件。如下为托管表
sql
CREATE TABLE my_table (
name STRING,
age INT
)
PARTITIONED BY (name)
STORED AS PARQUET
LOCATION 'oss://your-bucket/path/to/table';
如果你想要保留OSS上的原始数据,可以使用外部表而不是托管表。外部表只是对数据的引用,加载数据时并不会移动或删除原始文件。在前面的例子中,你可以使用CREATE EXTERNAL TABLE
来创建外部表。
CREATE EXTERNAL TABLE your_table_name (
column1 data_type,
column2 data_type,
...
)
STORED AS TEXTFILE
LOCATION 'oss://your-bucket/your-prefix/';
创建表之后向其中导入数据:
LOAD DATA INPATH 'oss://your-bucket/your-prefix/' INTO TABLE your_table_name;
使用外部表后,加载数据时不会删除原始数据。但是,如果你已经使用了托管表,并且原始数据被删除,那么除非你有备份,否则将无法恢复这些数据。
如果你已经使用的是托管表,而不是外部表,你可能需要在加载数据之前备份原始数据,以避免数据丢失。如果你尚未执行LOAD DATA
命令,你可以通过将表更改为外部表来避免删除原始数据。但是,请注意,这种更改可能需要谨慎,因为它会影响表的元数据和存储位置。