3

次のような JSON ファイルから外部テーブルを作成しようとしています。

{"id": "0010001", "my$entities": [{"a": "foo", "b": "bar"}]}

これは HDFS 上のファイルであり、私はそれを制御できません。

私はrcongiu の JSON serdeを使用していて、次のようなステートメントを書きました。

create external table json3(  id STRING,
my$entities STRING ) 
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION '/my/path/to/dir/';

しかしその後、ハイブ シェルは不平を言い続けました。

列タイプの 'ities' 'STRING' ')' 付近の入力を認識できません

問題の原因はドル記号「$」だと思います。今のところ、バッククォート(`)とバックスラッシュを使用してエスケープしようとしましたが、うまくいきませんでした。元のデータを変更せずにこれを回避する方法があるかどうか知りたいですか?

4

1 に答える 1

2

Hive 列名に $ 記号を使用することはできませんが、my$entities他の有効な名前にマップすることはできます。例えば:

create external table json3(  id STRING,
myentities STRING ) 
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ( "mapping.myentities" = "my$entities" )  
LOCATION '/my/path/to/dir/';

ここで、Hive 列名myentityは JSON 属性にマップされますmy$entity
参考:Hive-JSON-Serde readme

于 2013-05-02T12:35:24.853 に答える