0

5 つの固定幅列を持つ固定幅ファイルがあります。これがファイルの構造です。{col1:3char, col2:35char, col3:3char, col4:11char, col5:4char}. サンプルファイルはこちら

111  SagarKhatavkar                     030       9999ABIT

112  VishalKataria                      028       9999ABIT

113  GauravSomvanshi                    032       9999ABIT

114  SonalKartekiya                     029       9999ABIT

したがって、他の投稿で提案されているように、私は正規表現を使用しています。これが私が作成したDDLです。

CREATE TABLE emp (emplid STRING, name STRING, age String, salary String, dept STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
     "input.regex" = "(.{4})(.{35})(.{3})(.{11})(.{4})", 
     "output.format.string" = "%1$s %2$s %3$s %4$s %5$s"
     )

load from local を使用してこのテーブルのデータをロードすると、すべての値が NULL になります。

load data local inpath '/home/test1/emp.txt' into table emp;

Running select on the table
hive> select * from emp;

OK

NULL    NULL    NULL    NULL    NULL

NULL    NULL    NULL    NULL    NULL

NULL    NULL    NULL    NULL    NULL

NULL    NULL    NULL    NULL    NULL

Time taken: 0.959 seconds, Fetched: 4 row(s)

DDL の何が問題なのか教えてください。2.4.2.0-258 バージョンの Hive を使用しています。

4

1 に答える 1

0

私は問題を手に入れました。最初の列のデータに問題がありました。ファイルには、正確な 57 バイトがあるはずです。そうしないと、行全体が NULL としてマークされます。

于 2016-12-06T06:26:31.743 に答える