使用JSON serde映射配置单元中的列名

使用JSON serde映射配置单元中的列名,json,hadoop,hive,Json,Hadoop,Hive,我正在使用配置单元中内置的JSON serde创建一个外部表,即org.apache.Hive.hcatalog.data.JsonSerDe。我的输入JSON包含一个名为last的字段,由于last是一个保留关键字,因此我希望将该字段映射到表中的其他列名 这是否可能与serdeProperty有关?我可以找到如何使用蜂巢的例子,但没有蜂巢的例子 目前我正在像这样创建我的表 CREATE EXTERNAL TABLE my_table ( a string, b string,

我正在使用配置单元中内置的JSON serde创建一个外部表,即
org.apache.Hive.hcatalog.data.JsonSerDe
。我的输入JSON包含一个名为
last
的字段,由于
last
是一个保留关键字,因此我希望将该字段映射到表中的其他列名

这是否可能与
serdeProperty
有关?我可以找到如何使用蜂巢的例子,但没有蜂巢的例子

目前我正在像这样创建我的表

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'

使用“单引号”作为关键字。示例代码

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'

last
是一个非保留的关键字。
这里没有问题




对于保留的关键字,使用`(重重音)进行限定可以解决问题

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




`最后一个错误的符号。不是
,而是
`
是最后一个保留的?应该是(')单引号的样子。我已更正-谢谢你的全面回答。事实上,我在使用AWS Athena时遇到了一个问题-
SELECT*FROM my_table
有效,但
SELECT last FROM my_table
无效。听起来这个问题可能是雅典娜特有的。
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           |
+----------------+---------------+----------------+