繁体   English   中英

带有冒号 (:) 的 Amazon Athena 分区不工作

[英]Amazon Athena partition with colon(:) is not working

在 Athena 中创建分区时,我尝试使用 (yyyy-MM-ddTHH:mm:ssZ) 格式的日期,然后我无法查询数据

第一步:创建表

CREATE EXTERNAL TABLE my_info (
         id STRING,
         name STRING
) PARTITIONED BY (
        part string
) STORED AS ORC LOCATION 's3://bucket1/data' tblproperties ("orc.compress"="SNAPPY"); 

第 2 步:创建如下文件夹并添加文件。

S3://bucket1/data/part=2019-11-12T14:15:16Z

第三步:刷新分区 MSCK REPAIR TABLE my_info

第四步:查询数据 SELECT * FROM my_info

有了这个我无法查询任何数据

如果我将文件夹更改为格式 (yyyy-MM-ddTHH)

在第 2 步中没有“:”

s3://bucket1/data/part=2019-11-12T14

然后我就能得到结果。

关于为什么这不起作用的任何想法。

这是因为当您创建分区表时,分区是作为 S3 路径的一部分实现的,例如对于s3://bucket1/data/part=2019-11-12T14:15:16Z part=2019-11-12T14:15:16Z部分是 Athena 在查询数据时将其解释为分区的 S3 路径。

S3 路径名对可以使用的字符有一些限制

键名中的以下字符可能需要额外的代码处理,并且可能需要进行 URL 编码或引用为 HEX。 其中一些是不可打印的字符,您的浏览器可能无法处理它们,这也需要特殊处理:

Ampersand ("&")  
Dollar ("$")  
ASCII character ranges 00–1F hex (0–31 decimal) and 7F (127 decimal)  
'At' symbol ("@")  
Equals ("=")  
Semicolon (";")  
Colon (":")  
Plus ("+")  
Space – Significant sequences of spaces may be lost in some uses (especially multiple spaces)  
Comma (",")  
Question mark ("?")  

在这种情况下,Presto/Athena 可能没有解释路径中的冒号。 要解决此问题,您可以在时间戳中使用替代分隔字符,例如part=2019-11-12--14-15-16或完全省略它。

看来您可以使用 URL 编码的冒号 (%3A)。

此外,如果您使用timestamp而不是字符串作为分区类型,请确保使用 CREATE TABLE 语句中 记录的“java.sql.Timestamp 兼容格式”。

所以最终的 url 将是s3://bucket1/data/part=2019-11-12 14%3A15%3A16/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM