Согласно https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html,
Специальные символы
Специальные символы, кроме подчеркивания (_), не поддерживаются. Дополнительные сведения см. В документации DDL Apache Hive LanguageManual.
Важно
Хотя вы можете успешно создать имена таблиц, представлений, баз данных или столбцов, содержащие специальные символы, отличные от подчеркивания, заключив их в символы обратной кавычки (`), последующие запросы DDL или DML, которые ссылаются на них, могут завершиться ошибкой.
Итак, я попытался создать таблицу, используя файл JSON, хранящийся в ведре S3, и один из ключей в 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)
Теперь вы можете сказать, что согласно предоставленной ссылке, очевидно, что это не сработает, но когда я делаю это через Crawler в AWS Glue, все работает нормально, и я вижу столбец с точками в нем.
Независимо от того, как создаются таблицы, процесс создания таблиц регистрирует набор данных в Athena. Эта регистрация происходит в каталоге данных AWS Glue и позволяет Athena выполнять запросы к данным.
Итак, AWS Athena использует AWS Glue за кулисами, и если сканер Glue может добавлять столбцы, содержащие точки (.) В ключе JSON, почему запрос Athena не может этого сделать.
Может, я что-то упускаю. Итак, если кто-то испытал что-то подобное в прошлом и преодолел проблему, пожалуйста, просветите меня. И если невозможно сделать то, что я пытаюсь сделать, выделите, пожалуйста, и это, чтобы я не тратил время зря.