根据https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html,
特殊的角色
不支持下划线 (_) 以外的特殊字符。有关更多信息,请参阅 Apache Hive LanguageManual DDL 文档。
重要的
尽管您可以成功地创建包含除下划线以外的特殊字符的表、视图、数据库或列名称,方法是将它们括在反引号 (`) 字符中,但引用它们的后续 DDL 或 DML 查询可能会失败。
因此,我尝试使用存储在 S3 存储桶中的 JSON 文件创建一个表,并且 JSON 中的一个键包含多个点(。),根据链接上给出的信息,应该没问题我使用了反引号(`)逃避它。
CREATE EXTERNAL TABLE json_table (
id string,
version string,
com`.`org`.`dto`.`Customer string )
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ('ignore.malformed.json' = 'true')
LOCATION 's3://narendra-damodardas-modi-test-data/';
但它给出了以下错误:
line 1:8: no viable alternative at input 'create external' (service: amazonathena; status code: 400; error code: invalidrequestexception; request id: ef586f31-2515-4faa-a9fe-3a0e418235d2)
现在,您可能会说,根据提供的链接,很明显它不会起作用,但是当我通过 AWS Glue 中的 Crawler 执行此操作时,一切正常,我可以看到其中带有点的列。
无论表是如何创建的,表创建过程都会将数据集注册到 Athena。此注册发生在 AWS Glue 数据目录中,并使 Athena 能够对数据运行查询。
因此,AWS Athena 在幕后使用 AWS Glue,如果 Glue 的爬虫能够在 JSON 键中添加包含点 (.) 的列,那么为什么 Athena 的查询无法做到这一点。
也许我错过了一些东西。所以,如果有人在过去经历过这样的事情并解决了这个问题,请赐教。如果不可能做我想做的事,也请强调这一点,这样我就不会一直浪费我的时间。