[英]External Hive Table with Partition not reading the file
我創建了如下所示的外部配置單元表並嘗試讀取該位置中的文件。
樣本輸入:
c1,c2,c3,c4,c5
ass,adda,ada,er,asa
asdasd,asd,asas,qwqw,dfdf
帶分區的擴展表
create external table tablename(field3 varchar(50), field4 varchar(50), filed5 varchar(50))
partitioned by (field1 varchar(50), field2 varchar(50))
ROW FORMAT DELIMITED
fields terminated by ','
lines terminated by '\n'
location '/path/to/Folder/'
tblproperties ("skip.header.line.count"="1");
文件夾位置只有一個 csv 文件,它有 5 列和 1k 行
在我嘗試運行select
查詢時創建表后,沒有顯示任何結果。
然后我嘗試創建外部表而不像下面這樣分區,並在運行select
查詢時獲取輸出。
create external table tablename(field1 varchar(50), field2 varchar(50),field3 varchar(50), field4 varchar(50), filed5 varchar(50))
ROW FORMAT DELIMITED
fields terminated by ','
lines terminated by '\n'
location '/path/to/Folder/'
tblproperties ("skip.header.line.count"="1");
我不知道我在哪里做錯了。 我對蜂巢很陌生。 所以請幫助我。
據我所知,當您將其他非 hive 數據/表中的數據加載到 hive 時,hive 會采用源數據中的字段順序。 因此,如果對 hive 表進行了分區,則只能將源數據中的最后一列用作分區。
在您的情況下,我不確定為什么您沒有得到任何輸出,盡管輸出會是錯誤的,因為您的分區表中的field1
將是field4
而field2
將是field5
。
我知道的唯一間接方法(不好)是先創建非分區表,然后將數據從非分區表復制到分區表。 如果它占用了大量空間(盡管稍后您將刪除未分區的表),那么我猜您需要更改源數據以獲取分區字段。
使用以下命令Msck repair table <db_name>.<table_name>
,如果有關表的元數據尚不存在,則會將有關 hive 表的元數據添加到 hive Metastore。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.