我有一個關于在 Hadoop 中創建表的問題。我通過以下方式創建外部表:
CREATE EXTERNAL HADOOP TABLE SCHEMA.TABLENAME (
ID BIGINT NOT NULL,
CODE INTEGER,
"VALUE" DOUBLE
STORED AS ORC
TBLPROPERTIES ('bigsql.table.io.doAs'='false',
'bucketing_version'='2',
'orc.compress'='ZLIB',
'orc.create.index'='true')
創建此表后,我運行 Jenkins 作業(使用 sqoop 行程)將 70.000.000 條記錄加載到此表中。然后我需要洗掉這個表,所以我運行:
DROP TABLE SCHEMA.TABLENAME
稍后我想創建一個與前一個同名的表,但我需要它為空。我做了和之前一樣的查詢,我做了:
CREATE EXTERNAL HADOOP TABLE SCHEMA.TABLENAME (
ID BIGINT NOT NULL,
CODE INTEGER,
"VALUE" DOUBLE
STORED AS ORC
TBLPROPERTIES ('bigsql.table.io.doAs'='false',
'bucketing_version'='2',
'orc.compress'='ZLIB',
'orc.create.index'='true')
但是當我以這種方式創建表時,它里面又多了 70.000.000 條記錄,盡管我沒有運行任何作業來填充它。這就是為什么我有兩個問題:
- 當我洗掉并使用舊名稱創建表時,它是否從舊表中恢復記錄?
- 如何在 bigsql/hive 中洗掉(或截斷)表,以便我有一個舊名稱的空表。
我正在使用 bigsql 和配置單元。
uj5u.com熱心網友回復:
洗掉外部表不會洗掉存盤的資料,只會洗掉 Hive Metastore 中的元資料。
參考托管表與外部表
關鍵點...
- 當檔案已經存在或位于遠程位置時使用外部表
- 即使表被洗掉,檔案也應該保留
EXTERNAL如果您希望能夠 DROP 和/或 TRUNCATE,請創建一個托管表(從您的查詢中洗掉)。
或者讓您的 Jenkins 作業hadoop fs -rm -skipTrash在匯入之前運行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/529543.html
標籤:sqlHadoop蜂巢
上一篇:在腳本中實作多執行緒/并行處理
下一篇:Scala:提取檔案路徑的一部分
