我在Hive中使用内置的JSON serde创建一个外部表,即org.apache.hive.hcatalog.data.JsonSerDe
。我的输入JSON包含一个名为last
的字段,我希望将其映射到表中的不同列名,因为last
是保留关键字。
这可能与SERDEPROPERTIES
有关吗?我可以找到如何使用OpenX Json serde执行此操作的示例,但不能找到配置单元。
目前我正在创建这样的表
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'
答案 0 :(得分:1)
last
是非保留关键字
这里没问题。
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 | ! |
+------------+------------+---------------+
对于保留关键字,使用`(严重重音)进行限定可解决此问题。
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 |
+----------------+---------------+----------------+
答案 1 :(得分: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'