2017-06-14 8 views
0

を示すIはハイブアレイ<Struct<>>挿入がヌル

select * from temp; 
をしたときに構造体

create table temp (regionkey smallint, name string, comment string, nations array<struct<n_nationkey:smallint,n_name:string,n_comment:string>>) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '|' 
COLLECTION ITEMS TERMINATED BY ','; 

のアレイはその後、私はテーブルに

LOAD DATA LOCAL INPATH '/Data Sets/region.csv' INTO TABLE temp; 

所望の出力データをロードしたテーブルTEMPを作成しました

4 EUROPE Low sale Business Region [{"n_nationkey":22,"n_name":"Ryan","n_comment":"Reference the site"}] 

しかし、実際の出力は、これは配列や構造体と私の最初の試験だった

4 EUROPE Low sale Business Region [{"n_nationkey":22,"n_name":null,"n_comment":null},{"n_nationkey":null,"n_name":null,"n_comment":null},{"n_nationkey":null,"n_name":null,"n_comment":null}] 

のDATA FILE

4|EUROPE|Low sale Business Region for Training4Exam.com|7,Bulgaria,Reference 
4|EUROPE|Low sale Business Region for HadoopExam.com|19,Belgium,Reference site 
4|EUROPE|Low sale Business Region for Training4Exam.com|22,Ryan,Reference site 

であり、私はこの上の空白にしています。 非常に高く評価されるべき助け。 おかげFYI

+0

試み提供されるユーザを抽出するために154
@paramのtablePropertiesテーブルプロパティに拡張されますregion.csvのサンプルを追加します。おそらくあなたのデータがテーブルレイアウト – hlagos

答えて

1

map keys terminated by ','


create external table temp 
(
    regionkey smallint 
    ,name  string 
    ,comment  string 
    ,nations  array<struct<n_nationkey:smallint,n_name:string,n_comment:string>> 
) 
row format delimited 
fields terminated by '|' 
map keys terminated by ',' 
; 

select * from temp 
; 

+-----------+--------+------------------------------------------------+-----------------------------------------------------------------------+ 
| regionkey | name |     comment      |        nations        | 
+-----------+--------+------------------------------------------------+-----------------------------------------------------------------------+ 
|   4 | EUROPE | Low sale Business Region for Training4Exam.com | [{"n_nationkey":7,"n_name":"Bulgaria","n_comment":"Reference "}]  | 
|   4 | EUROPE | Low sale Business Region for HadoopExam.com | [{"n_nationkey":19,"n_name":"Belgium","n_comment":"Reference site "}] | 
|   4 | EUROPE | Low sale Business Region for Training4Exam.com | [{"n_nationkey":22,"n_name":"Ryan","n_comment":"Reference site"}]  | 
+-----------+--------+------------------------------------------------+-----------------------------------------------------------------------+ 

下位互換性を持たせるには、最初の3つの区切り文字をテーブルのプロパティから指定された値に初期化します。
セパレータのデフォルト数は8です。
hive.serialization.extend.nesting.levelsだけが設定されている場合、セパレータの数は24に拡張されます。
hive.serialization.extend.additional.nesting.levelsが設定されている場合、セパレータの数がセパレータ

https://github.com/apache/hive/blob/master/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazySerDeParameters.java

+0

と一致しないのですが、私もそれを解決しました。 – Dereck

+0

途中で2つのものが見つかりました:**(1)** serde.thriftのバグhttps://github.com/apache/hive/blob/master/serde/if/serde.thrift 'const string COLLECTION_DELIM =" colelction .delim "'( 'colelction'のtypoに注意してください)**(2)**デリミタのドキュメントは問題があります。実際にはフィールド、コレクションアイテム、マップキーではなくレベル1,2,3があり、さらにデフォルトのアスキー4を持つ追加のレベルがあります。 –

+0

バグレポート:https://issues.apache.org/jira/browse/HIVE -16922 –

関連する問題