Hive - Modifier la table
Ce chapitre explique comment modifier les attributs d'une table, comme changer son nom de table, changer les noms de colonne, ajouter des colonnes et supprimer ou remplacer des colonnes.
Instruction Alter Table
Il est utilisé pour modifier une table dans Hive.
Syntaxe
L'instruction prend l'une des syntaxes suivantes en fonction des attributs que nous souhaitons modifier dans une table.
ALTER TABLE name RENAME TO new_name
ALTER TABLE name ADD COLUMNS (col_spec[, col_spec ...])
ALTER TABLE name DROP [COLUMN] column_name
ALTER TABLE name CHANGE column_name new_name new_type
ALTER TABLE name REPLACE COLUMNS (col_spec[, col_spec ...])
Renommer en… Instruction
La requête suivante renomme la table de employee à emp.
hive> ALTER TABLE employee RENAME TO emp;
Programme JDBC
Le programme JDBC pour renommer une table est le suivant.
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;
public class HiveAlterRenameTo {
private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";
public static void main(String[] args) throws SQLException {
// Register driver and create driver instance
Class.forName(driverName);
// get connection
Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/userdb", "", "");
// create statement
Statement stmt = con.createStatement();
// execute statement
stmt.executeQuery("ALTER TABLE employee RENAME TO emp;");
System.out.println("Table Renamed Successfully");
con.close();
}
}
Enregistrez le programme dans un fichier nommé HiveAlterRenameTo.java. Utilisez les commandes suivantes pour compiler et exécuter ce programme.
$ javac HiveAlterRenameTo.java
$ java HiveAlterRenameTo
Production:
Table renamed successfully.
Déclaration de changement
Le tableau suivant contient les champs de employee table et il montre les champs à modifier (en gras).
Nom de domaine | Convertir à partir du type de données | Changer le nom du champ | Convertir en type de données |
---|---|---|---|
eid | int | eid | int |
name | Chaîne | ename | Chaîne |
un salaire | Float | un salaire | Double |
la désignation | Chaîne | la désignation | Chaîne |
Les requêtes suivantes renomment le nom de la colonne et le type de données de colonne à l'aide des données ci-dessus:
hive> ALTER TABLE employee CHANGE name ename String;
hive> ALTER TABLE employee CHANGE salary salary Double;
Programme JDBC
Ci-dessous, le programme JDBC pour modifier une colonne.
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;
public class HiveAlterChangeColumn {
private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";
public static void main(String[] args) throws SQLException {
// Register driver and create driver instance
Class.forName(driverName);
// get connection
Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/userdb", "", "");
// create statement
Statement stmt = con.createStatement();
// execute statement
stmt.executeQuery("ALTER TABLE employee CHANGE name ename String;");
stmt.executeQuery("ALTER TABLE employee CHANGE salary salary Double;");
System.out.println("Change column successful.");
con.close();
}
}
Enregistrez le programme dans un fichier nommé HiveAlterChangeColumn.java. Utilisez les commandes suivantes pour compiler et exécuter ce programme.
$ javac HiveAlterChangeColumn.java
$ java HiveAlterChangeColumn
Production:
Change column successful.
Instruction Add Columns
La requête suivante ajoute une colonne nommée dept à la table des employés.
hive> ALTER TABLE employee ADD COLUMNS (
dept STRING COMMENT 'Department name');
Programme JDBC
Le programme JDBC pour ajouter une colonne à une table est donné ci-dessous.
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;
public class HiveAlterAddColumn {
private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";
public static void main(String[] args) throws SQLException {
// Register driver and create driver instance
Class.forName(driverName);
// get connection
Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/userdb", "", "");
// create statement
Statement stmt = con.createStatement();
// execute statement
stmt.executeQuery("ALTER TABLE employee ADD COLUMNS " + " (dept STRING COMMENT 'Department name');");
System.out.prinln("Add column successful.");
con.close();
}
}
Enregistrez le programme dans un fichier nommé HiveAlterAddColumn.java. Utilisez les commandes suivantes pour compiler et exécuter ce programme.
$ javac HiveAlterAddColumn.java
$ java HiveAlterAddColumn
Production:
Add column successful.
Remplacer l'instruction
La requête suivante supprime toutes les colonnes du employee table et la remplace par emp et name Colonnes:
hive> ALTER TABLE employee REPLACE COLUMNS (
eid INT empid Int,
ename STRING name String);
Programme JDBC
Ci-dessous, le programme JDBC à remplacer eid colonne avec empid et ename colonne avec name.
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;
public class HiveAlterReplaceColumn {
private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";
public static void main(String[] args) throws SQLException {
// Register driver and create driver instance
Class.forName(driverName);
// get connection
Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/userdb", "", "");
// create statement
Statement stmt = con.createStatement();
// execute statement
stmt.executeQuery("ALTER TABLE employee REPLACE COLUMNS "
+" (eid INT empid Int,"
+" ename STRING name String);");
System.out.println(" Replace column successful");
con.close();
}
}
Enregistrez le programme dans un fichier nommé HiveAlterReplaceColumn.java. Utilisez les commandes suivantes pour compiler et exécuter ce programme.
$ javac HiveAlterReplaceColumn.java
$ java HiveAlterReplaceColumn
Production:
Replace column successful.