Изменение имени столбца во внешней таблице Hive, содержащей данные - PullRequest
2 голосов
/ 25 марта 2019

У меня есть столбец insert_process_id, который я пытаюсь переименовать в process_id. Эта внешняя таблица находится в формате файла паркета. Посоветуйте, пожалуйста, как переименовать этот столбец.

Ответы [ 2 ]

0 голосов
/ 25 марта 2019

Вы можете изменить имя столбца, как показано ниже.

Синтаксис:

ALTER TABLE name CHANGE column_name col_spec .. 

Пример:

  1. Я создал таблицу, как показано ниже.

    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' ;
    
  2. Загруженные данные в таблицу

    LOAD DATA LOCAL INPATH 
    '/home/cloudera/Desktop/HiveTraining/Dataset/patient_details' INTO TABLE Patient_external; 
    
  3. Опишите таблицу

    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  
    
  4. Измените имя столбца с PatientID на Patient_ID

         Alter Table Patient_external change PatientID Patient_ID Int; 
    
  5. Теперь опишем таблицу

        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 
    
0 голосов
/ 25 марта 2019

вы можете использовать следующий синтаксис

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];

Поскольку это внешняя таблица, вы можете удалить ее и заново создать с конкретными изменениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...