Wie kann ich die create-Anweisung für eine vorhandene Hive-Tabelle abrufen / generieren?

90

Angenommen, Sie haben bereits "Tabelle" in Hive. Gibt es wie bei anderen Datenbanken eine schnelle Möglichkeit, die Anweisung "CREATE" für diese Tabelle abzurufen?

Rolando
quelle

Antworten:

199

Ab Hive 0.10 implementiert dieser Patch-967 Folgendes: SHOW CREATE TABLE"Zeigt die CREATE TABLEAnweisung an, mit der eine bestimmte Tabelle erstellt wird, oder die CREATE VIEWAnweisung, mit der eine bestimmte Ansicht erstellt wird."

Verwendung:

SHOW CREATE TABLE myTable;
Lukas Vermeer
quelle
25

Schritte zum Generieren Erstellen Sie Tabellen-DDLs für alle Tabellen in der Hive-Datenbank und exportieren Sie sie in eine Textdatei, um sie später auszuführen:

Schritt 1) ​​Erstellen Sie eine .sh-Datei mit dem folgenden Inhalt, z. B. hive_table_ddl.sh

#!/bin/bash
rm -f tableNames.txt
rm -f HiveTableDDL.txt
hive -e "use $1; show tables;" > tableNames.txt  
wait
cat tableNames.txt |while read LINE
   do
   hive -e "use $1;show create table $LINE;" >>HiveTableDDL.txt
   echo  -e "\n" >> HiveTableDDL.txt
   done
rm -f tableNames.txt
echo "Table DDL generated"

Schritt 2) Führen Sie das obige Shell-Skript aus, indem Sie 'db name' als Parameter übergeben

>bash hive_table_dd.sh <<databasename>>

Ausgabe :

Alle create table-Anweisungen Ihrer Datenbank werden in die HiveTableDDL.txt geschrieben

Aditya
quelle
1
wie wir sicherstellen können, dass die Buckets und das Speicherformat in eine neue Tabelle repliziert werden.
YouAreAwesome
Sie sollten auch nach jeder Anweisung ein Semikolon anhängen, damit das Skript ausgeführt werden kann, indem Sie hive -f HiveTableDDL.txt sagen.
Muton
Dieses Skript schlägt für mich mit dem folgenden Fehler fehl: Fehler beim Kompilieren der Anweisung: FAILED: ParseException-Zeile 1:18 kann Eingaben in der Nähe von '|' nicht erkennen. '|' im Tabellennamen führe ich dieses Skript mit beeline aus, da HDP 3.0 den Hive-Shell-Zugriff nicht unterstützt
Abhinav
@cfeduke Dieses Skript gibt den Speicherort der Hive-Tabellen an. Wie überspringe ich einen Teil des Standorts, um diese ddls an einem anderen Ort auszuführen? Änderungen an mehr als 1000 Tabellen sind nicht möglich
user1
2

Beschreiben Formatiert / Erweitert zeigt die Datendefinition der Tabelle in Hive an

hive> describe Formatted dbname.tablename;
user2637464
quelle