2017-03-01 8 views
1

Hiveで組み込みのJSON serdeを使用して外部表を作成しています。つまり、org.apache.hive.hcatalog.data.JsonSerDeです。私の入力JSONにはlastというフィールドがあります。lastは予約済みのキーワードなので、テーブルの別の列名にマップしたいと思います。ハイブの列名とJSONのserde

これはSERDEPROPERTIESとは可能ですか?私はOpenX Json serdeでこれを行う方法の例を見つけることができますが、ハイブ1ではできません。

現在、私はキーワードのためにこの

CREATE EXTERNAL TABLE my_table (
    a string, 
    b string, 
    last string) 
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' 
LOCATION 's3://my-bucket/my-folder/data' 

答えて

1

last非予約キーワードです。
ここに問題はありません。 について

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-Keywords,Non-reservedKeywordsandReservedKeywords

hive> dfs -cat /user/hive/warehouse/my_table/*; 
{"a":"hello","b":"world","last":"!"} 

create external table my_table 
(
    a  string 
    ,b  string 
    ,last string 
) 
    row format serde 'org.apache.hive.hcatalog.data.JsonSerDe' 
    location '/user/hive/warehouse/my_table' 
; 

select * from my_table 
; 

+------------+------------+---------------+ 
| my_table.a | my_table.b | my_table.last | 
+------------+------------+---------------+ 
| hello  | world  | !    | 
+------------+------------+---------------+ 

キーワード予約s、資格はとなります。(Graveアクセント)は問題を解決します。

hive> dfs -cat /user/hive/warehouse/my_table_2/*; 
{"and":"X","or":"Mix","not":"Drix"} 

create external table my_table_2 
(
    `and` string 
    ,`or` string 
    ,`not` string 
) 
    row format serde 'org.apache.hive.hcatalog.data.JsonSerDe' 
    location '/user/hive/warehouse/my_table_2' 
; 

select * from my_table_2 
; 

+----------------+---------------+----------------+ 
| my_table_2.and | my_table_2.or | my_table_2.not | 
+----------------+---------------+----------------+ 
| X    | Mix   | Drix   | 
+----------------+---------------+----------------+ 
+0

私は訂正しました - 包括的な答えをありがとうございます。私はAWS Athenaを使用しているときに実際に問題に遭遇しています - 「SELECT * FROM my_table」は動作しますが、「SELECT last FROM my_table」は動作しません。この問題のような音はAthenaに固有のものかもしれません。 – tobycoleman

0

使用「単一引用符のように私のテーブルを作成しています。サンプルコード

CREATE EXTERNAL TABLE my_table (
    a string, 
    b string, 
    'last' string) 
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' 
LOCATION 's3://my-bucket/my-folder/data' 
+1

最後の\ '文字列 –

+0

間違ったシンボル' \。 '' 'ではなく' \ '' –

+0

は最後に予約されていますか? – franklinsijo

関連する問題