【问题标题】:Amazon Athena partition with colon(:) is not working带有冒号 (:) 的 Amazon Athena 分区不起作用
【发布时间】:2022-04-28 20:21:50
【问题描述】:

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

第 1 步:创建表

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 维修表 my_info

第四步:查询数据 选择 * FROM my_info

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

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

第 2 步中没有 ':'

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

然后我就能得到结果了。

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

【问题讨论】:

    标签: presto amazon-athena


    【解决方案1】:

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

    S3 路径名有一些restrictions on the characters that can be used:

    键名中的以下字符可能需要额外的代码 处理并且可能需要进行 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 或完全省略。

    【讨论】:

    • 感谢内森的回复。我可以看到 S3 中的文件夹,因为您提到 Athena/Presto 可能没有实现这些。
    【解决方案2】:

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

    此外,如果您使用 timestamp 作为分区类型而不是字符串,请确保在 CREATE TABLE 语句中使用“java.sql.Timestamp compatible format”作为documented

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      • 2017-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多