2017-04-03 4 views
0

パーティションを使用してHiveテーブルにデータをロードしようとしています。ハイブの現在の日付に等しいパーティション列

コードは以下の通りである:

CREATE EXTERNAL TABLE URL(url STRING, clicks INT) 
COMMENT 'Unique Clicks per URL' 
PARTITIONED BY(dt STRING) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t' 
LINES TERMINATED BY '\n' 
STORED AS TEXTFILE 
LOCATION '/mypath/URL'; 

LOAD DATA INPATH '/inputpath/' INTO TABLE URL 
PARTITION (dt=date_format(CURRENT_TIMESTAMP, "yyyy.MM.dd HH:mm:ss")); 

私は次のエラーのgettinています:

FAILED: ParseException line 4:14 cannot recognize input near 
'date_format' '(' 'CURRENT_TIMESTAMP' in constant 

を私は

SET hive.exec.dynamic.partition.mode=nonstrict; 

を使用してみましたが、何も変わっていません。

なぜ機能しないのですか? パーティションの列として現在の日付を設定するにはどうすればよいですか?

ありがとうございます。

ロレンツォ

+0

からの変数は、あなたの質問に答えることは非常にイライラさせられたとして。 Hiveの作業を続ける前に、いくつかのドキュメント/チュートリアルを読むことを強くお勧めします。 –

答えて

0

なぜあなたはそれらの上に外部表を作成することができたときにファイルを移動しますか?
LOAD DATA INPATHは、「そのまま」のファイル(HDFSメタデータ操作)をテーブルの位置に移動するだけです。

明らかに日付であるときにパーティション列を文字列として定義するのはなぜですか?

CREATE EXTERNAL TABLE URL ... PARTITIONED BY(dt DATE) ... 

なぜあなたは、非ISO形式(YYYY.MM.DD)を使用しようとしていますか? (

1.
は定数を使用します。パーティション情報がデータの一部ではないようですので

ISO日付形式を使用すると、3つのオプションを持っているYYYY-MM-DD


です関数を含む式は許されません)。

LOAD DATA INPATH '/inputpath/' INTO TABLE URL PARTITION (dt=date '2017-03-04'); 

2.
URLに似て、URL_STG、追加のテーブルを作成しますが、パーティションがなく、動的にパーティションを挿入するためにそれを使用。

set hive.exec.dynamic.partition.mode=nonstrict; 

insert into URL select *,current_date from URL_STG; 

3.

サプライ日CLI

hive --hivevar dt=$(date +"%Y-%m-%d") -e \ 
'LOAD DATA INPATH '\''/inputpath/'\'' INTO TABLE URL PARTITION (dt=date '\''${hivevar:dt}'\'')' 
+0

あなたの返事をありがとう。残念ですが、残念ですが、ハイブを使い始めたばかりですが、どうしてそれがイライラしているのか分かりません。あなたの質問について: 1)データを移動する必要があります。これは、より大きなスクリプトの一部であり、次の「繰り返し」のためにデータを含むフォルダをクリアする必要があるからです。 2) "文字列"は、dateformats、unixtimestampなどを使用して何時間も失敗してしまったところで終わってしまいました。申し訳ありません。 3)特別な理由はなく、単にコピー/過去を認識していないので、ISOの情報に感謝します。 関数から定数を定義することはできますか? ありがとう – lorenzotenti

+0

パーティション列の種類は文字列です。パーティション列の名前は '' date ''を表す 'dt'です。実際の値は、タイムスタンプ(秒レベルまで)です。フォーマットはISOではありません。エラーでパーティション宣言のために定数以外のものを使用すること。動的パーティションは 'load data inpath'とは関係ありません。あなたはこの投稿にどこから対処し始めますか? :-) ...そしていいえ、リテラル以外のものを使うことはできません –

関連する問題