在包含数据的配置单元外部表中更改列名

cld4siwp  于 2021-05-27  发布在  Hadoop
关注(0)|答案(2)|浏览(281)

我有一个列insert\u process\u id,我正试图将其重命名为process\u id。此外部表是Parquet文件格式。请告知如何重命名此列。

cbjzeqam

cbjzeqam1#

您可以如下更改列名。
语法:

ALTER TABLE name CHANGE column_name col_spec ..

例子:
我已经创建了如下表。

CREATE EXTERNAL Table IF NOT EXISTS Patient_external(
PatientID int, Name String, City String, Number String )
COMMENT 'Data about patient from Apollo Hospital'
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS PARQUET 
LOCATION '/user/training/external/data' ;

已将数据加载到表中

LOAD DATA LOCAL INPATH 
'/home/cloudera/Desktop/HiveTraining/Dataset/patient_details' INTO TABLE Patient_external;

描述表格

describe formatted Patient_external;

col_name                data_type               comment             

**patientid**             int                                         

name                    string                                      
city                    string                                      
number                  string                                      

Detailed Table Information       
 Database:              default                  
 Owner:                 cloudera                 
 CreateTime:            Mon Mar 25 10:57:23 PDT 2019     
 LastAccessTime:        UNKNOWN                  
 Protect Mode:          None                     
 Retention:             0                        
 Location:          
  hdfs://quickstart.cloudera:8020/user/training/external/data    
 Table Type:            EXTERNAL_TABLE           
 Table Parameters:       
        COLUMN_STATS_ACCURATE   false               
        EXTERNAL                TRUE                
        comment                 Data about patient from Apollo Hospital
        numFiles                0                   
       numRows              -1                  
       rawDataSize          -1                  
     totalSize              0                   
transient_lastDdlTime   1553536643          

  Storage Information        
     SerDe Library:          
      org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe    
     InputFormat:            
          org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat  
     OutputFormat:           
         org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat

将列名从patientid更改为patientid

Alter Table Patient_external change PatientID Patient_ID Int;

现在描述一下table

describe formatted Patient_external;

 col_name               data_type               comment             

**patient_id**            int                                         

name                    string                                      
city                    string                                      
number                  string                                      

Detailed Table Information       
 Database:              default                  
 Owner:                 cloudera                 
 CreateTime:            Mon Mar 25 10:57:23 PDT 2019     
 LastAccessTime:        UNKNOWN                  
 Protect Mode:          None                     
 Retention:             0                        
 Location:          
  hdfs://quickstart.cloudera:8020/user/training/external/data    
 Table Type:            EXTERNAL_TABLE           
 Table Parameters:       
        COLUMN_STATS_ACCURATE   false               
        EXTERNAL                TRUE                
        comment                 Data about patient from Apollo Hospital
        numFiles                0                   
       numRows              -1                  
       rawDataSize          -1                  
     totalSize              0                   
transient_lastDdlTime   1553536643          

  Storage Information        
     SerDe Library:          
      org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe    
     InputFormat:            
          org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat  
     OutputFormat:           
         org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat
csbfibhn

csbfibhn2#

可以使用以下语法

ALTER TABLE table_name [PARTITION partition_spec] CHANGE [COLUMN] col_old_name col_new_name column_type
  [COMMENT col_comment] [FIRST|AFTER column_name] [CASCADE|RESTRICT];

由于这是一个外部表,您可以删除该表,然后通过特定的更改重新创建。

相关问题