2017-03-09 1 views
2

私のテーブルには、私はコンパイル時に私はTwitterの分析ハイブクエリ

「エラーなどのエラーを取得し
LOAD DATA INPATH '/user/hue/twitter/tweets/2017/03/08/FlumeData.1489005910193' OVERWRITE INTO TABLE tweets PARTITION (datehour)

を使用して、この表にHDFSからデータをロードし、

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'; 

ですステートメント:FAILED: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'は意味がありません**(3)**パーティションの定義を別の型/形式に変更することを強くお勧めします。 「日付」は理想的である。 'PARTITIONED BY(datehour date)'と 'INTO TABLE tweets PARTITION(datehour = date '2017-03-08')'となります。何らかの理由で 'int'を使用していても、' YYYYMMDD'形式を使用してください。 '20170308'なので、' date_our between 20170301と20170308'のような比較を使うことができます。 –

+0

私は理解しました。私はこの方法でやります。おかあさん – User1

関連する問題