簡體   English   中英

即使在 escaping 帶有反引號(`)的點之后,在 Amazon Athena 中創建列名包含點 (.) 的表時也會出錯

[英]Error in creating table with column name containing dot (.) in Amazon Athena even after escaping the dot with backticks(`)

根據https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html

特殊字符

不支持下划線 (_) 以外的特殊字符。 有關詳細信息,請參閱 Apache Hive 語言手冊 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 執行此操作時,一切正常,我可以看到其中帶有點的列。

根據https://docs.aws.amazon.com/athena/latest/ug/understanding-tables-databases-and-the-data-catalog.html

無論表是如何創建的,表創建過程都會將數據集注冊到 Athena。 此注冊發生在 AWS Glue 數據目錄中,並使 Athena 能夠對數據運行查詢。

因此,AWS Athena 在幕后使用 AWS Glue,如果 Glue 的爬蟲能夠在 JSON 鍵中添加包含點 (.) 的列,為什么 Athena 的查詢無法做到這一點。

也許我錯過了一些東西。 所以,如果有人在過去經歷過這樣的事情並解決了這個問題,請賜教。 如果不可能做我想做的事,也請強調這一點,這樣我就不會一直浪費我的時間。

您需要在整個事物周圍使用反引號,而不僅僅是在特殊字符周圍。 以下應該工作

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/';

一般來說,我建議用反引號將所有列名括起來。

此外,如果您的 AWS Glue Crawler 在類似的數據上運行良好,那么您可以查找它使用SHOW CREATE TABLE創建的架構

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM