2015-11-13 26 views
0

我想從配置單元中另一個表的某些元數據創建表。我正在使用配置單元。使用與另一個表相同的列創建HIVE中的表?

是否HIVE有一個表的元數據類似的訪問,讓我創建使用的另一列的表:

我從this疑問,metatdata可以從該表由INFORMATION_SCHEMA.COLUMNS在SQL檢索知道表?從本質上講,我複製了一個沒有所有元組的表。

這是最好的事情我至今:

create table <table_name>((select <table_name> from INFORMATION_SCHEMA.COLUMNS)) row format delimited fields by '|';

回答

1

您可以嘗試CTAS語法:

CREATE TABLE new_table_name 
AS 
SELECT * 
FROM old_table_name 
WHERE 1 = 2; 
+0

對於大數據,這是比較慢,雖然,對不對?它仍然必須貫穿每一行。 – Sother

+0

@其他看'WHERE 1 = 2'。它始終是**,所以你得到空表 – lad2025

+0

,但我不認爲sql評估它的方式。我認爲它仍然檢查每一行。 – Sother

4

您可以使用LIKE所以新表得到的結構,但不數據。

Hive documentation

CREATE TABLE yourtable 
LIKE table2; 
+0

非常好!我不知道這是存在的。這應該是正確的答案。它更簡潔。 –

0

我相信這將這樣的伎倆:

DROP TABLE IF EXISTS schema.New_Table;  
CREATE TABLE New_Table  
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\034' LINES TERMINATED BY '\012' 
STORED AS TEXTFILE location '/IC/New_Table' 
AS 
select * 
from Old_Table; 
+0

'\ 034'做什麼? – Sother

+0

它指定分隔符。 '\ 034'是我相信'\ x1c'的serde代碼。我想如果你拿出那部分它只是默認爲默認的delim。如果您不想輸入任何數據,請添加where 1 = 2。運行以下命令查看old_table使用的內容。 「show create table Old_Table」。這將顯示舊錶使用的分隔符,您也可以將它們用於新表。 –

+0

還要防止通過每條記錄執行此操作:「select * from old_table limit 1;」 –

相關問題