Webサービスの応答としてjsonデータを取り出す外部テーブルをHiveに作成しようとしています。エラーJSONデータを保存するためにハイブに外部テーブルを作成する
JSONファイルのデータは、私は、外部表のスキーマを作成したかに基づいて以下の通りである:
{
"location": {
"name": "Paris",
"region": "Ile-de-France",
"country": "France",
"lat": 48.87,
"lon": 2.33,
"tz_id": "Europe/Paris",
"localtime_epoch": 1486792043,
"localtime": "2017-02-11 5:47"
},
"current": {
"last_updated_epoch": 1486792043,
"last_updated": "2017-02-11 05:47",
"temp_c": 0.0,
"temp_f": 32.0,
"is_day": 0,
"condition": {
"text": "Mist",
"icon": "//cdn.apixu.com/weather/64x64/night/143.png",
"code": 1030
},
"wind_mph": 8.1,
"wind_kph": 13.0,
"wind_degree": 330,
"wind_dir": "NNW",
"pressure_mb": 1019.0,
"pressure_in": 30.6,
"precip_mm": 0.0,
"precip_in": 0.0,
"humidity": 74,
"cloud": 0,
"feelslike_c": -4.0,
"feelslike_f": 24.8
}
}
作成し、外部表のコマンドを以下に示し:
:CREATE EXTERNAL TABLE weatherdata (
location STRUCT<
name:STRING,
region:STRING,
country:STRING,
lat:FLOAT,
lon:FLOAT,
tz_id:STRING,
localtime:STRING>,
current STRUCT<
last_updated_epoch:BIGINT,
last_updated:STRING,
temp_c:FLOAT,
temp_f:FLOAT,
is_day:INT,
condition:STRUCT<text:STRING, icon:STRING, code:INT>,
wind_mph:FLOAT, wind_kph:FLOAT,
wind_degree:INT,
wind_dir:STRING,
pressure_mb:FLOAT,
pressure_in:FLOAT,
precip_mm:FLOAT,
precip_in:FLOAT,
humidity:INT,
cloud:INT,
feelslike_c:FLOAT,
feelslike_f:FLOAT>
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe';
私は下のエラーを取得します
FAILED: ParseException line 9:3 cannot recognize input near 'current' 'STRUCT' '<' in column specification
フィールド 'current'を 'curr'としてチェックするだけでこの外部テーブルを作成しようとしましたテーブルが正常に作成されました。明らかなように、上記の 'json'データをこの表にロードすると、 'location'データのみが正常にロードされ、 'current'データはnullと表示されます。 'current'はハイブのキーワードですか?どうした ? この問題の解決にお役立てください。
をバック使用 :STRUCT'を、なぜ何の ' - :そこで以下のようにDDLを使うのか? –
@ cricket_007 ':'は内部構造変数にのみ使用されます。 –