2017-03-09 105 views
2

我的表,Twitter的分析蜂巢查詢

CREATE EXTERNAL TABLE twitter.tweets (id BIGINT,created_at STRING,source STRING,favorited BOOLEAN, retweeted_status STRUCT<text:STRING,user:STRUCT<screen_name:STRING,name:STRING>,retweet_count:INT>,entities STRUCT<urls:ARRAY<STRUCT<expanded_url:STRING>>, user_mentions:ARRAY<STRUCT<screen_name:STRING,name:STRING>>, 
hashtags:ARRAY<STRUCT<text:STRING>>>,text STRING,user STRUCT<screen_name:STRING,name:STRING,friends_count:INT,followers_count:INT,statuses_count:INT,verified:BOOLEAN,utc_offset:INT,time_zone:STRING>,in_reply_to_screen_name STRING) 
PARTITIONED BY (datehour INT) 
ROW FORMAT SERDE 'com.cloudera.hive.serde.JSONSerDe' 
LOCATION '/twitter'; 

我利用HDFS的數據加載到這個表
LOAD DATA INPATH '/user/hue/twitter/tweets/2017/03/08/FlumeData.1489005910193' OVERWRITE INTO TABLE tweets PARTITION (datehour)

我得到一個錯誤的

「錯誤而編譯聲明:失敗:SemanticException org.apache.hadoop.hive.ql.metadata.HiveException:MetaException(消息:無效 分區鍵值&值;鍵[datehour],值[])」

我不明白什麼作爲分隔部的值寫入

回答

0

LOAD DATA INPATH移動文件,僅此而已。
如果您的所有記錄來自同一時間(例如23),則使用 -
...INTO TABLE tweets PARTITION (datehour=23)
如果沒有,您必須使用其他技術,例如外部表。

+0

謝謝..在看到你的答案之前,我添加了PARTITION(datehour = 08032017)我下載了鳴叫的日期。它的工作,並希望這也是正確的.. – User1

+0

**(1)**'datehour'是隻有日期和沒有時間的列的一個奇怪的名字。 **(2)**因爲分區列是int類型的,所以'08032017'前面的'0'沒有意義**(3)**我強烈建議將分區定義更改爲另一種類型/格式。 '日期'是理想的,例如'分隔(datehour日期)'和'INTO TABLE tweet PARTITION(datehour = date'2017-03-08')''。即使你因爲某種原因使用'int',也可以使用'YYYYMMDD'格式,例如'20170308'所以你可以使用'datehour之間的20170301到20170308'之間的比較' –

+0

ok我明白了。我會這樣做.. Thankyou – User1