受支持的分区投影类型 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

受支持的分区投影类型

表可以具有 enumintegerdate,injected 分区列类型的任意组合。

枚举类型

enum 类型用于其值为枚举集成员(例如,机场代码或 Amazon 区域)的分区列。

在表中定义分区属性,如下所示:

属性名称 示例值 描述
projection.columnName.type

enum

必填项。要用于 columnName 列的投影类型。该值必须是 enum(不区分大小写)才能发出使用枚举类型的信号。允许前导和尾随空格。
projection.columnName.values

A,B,C,D,E,F,G,Unknown

必填项。columnName 列的枚举分区值的逗号分隔列表。任何空格均被视为枚举值的一部分。
注意

作为最佳实践,我们建议限制使用enum基于分区预测到几十个或更少。虽然没有特定的限制enum投影时,表元数据的总大小不能超过Amazon Glue压缩时,限制约为 1MB。请注意,此限制在表格的关键部分(如列名、位置、存储格式和其他部分)之间共享。如果您发现自己在enum投影,请考虑一种替代方法,例如在代理字段中存储为较少数量的唯一值。通过折衷基数,您可以控制enum字段中返回的子位置类型。

整数类型

将整数类型用于其可能的值可被解释为定义的范围内的整数的分区列。投影整数列目前仅限于 Java 有符号长整型值的范围(-263 到 263-1,含这两个值)。

属性名称 示例值 描述
projection.columnName.type

integer

必填项。要用于 columnName 列的投影类型。该值必须是 integer(不区分大小写)才能发出使用整数类型的信号。允许前导和尾随空格。
projection.columnName.range

0,10

-1,8675309

0001,9999

必填项。一个包含两个元素的逗号分隔列表,该列表提供将由对 columName 列进行的查询返回的最小范围值和最大范围值。这些值包含在内,它们可以是负数,并且可以有前导零。允许前导和尾随空格。
projection.columnName.interval

1

5

可选。一个正整数,它指定 columName 列的连续分区值之间的间隔。例如,具有 interval 值“1”的 range 值“1,3”将产生值 1、2 和 3。具有 interval 值“2”的相同 range 值将产生值 1 和 3,并跳过 2。允许前导和尾随空格。默认值为 1。
projection.columnName.digits

1

5

可选。一个正整数,它指定要包含在 columName 列的分区值的最终表示形式中的位数。例如,具有 digits 值“1”的 range 值“1,3”将产生值 1、2 和 3。具有 digits 值“2”的相同 range 值将产生值 01、02 和 03。允许前导和尾随空格。默认值不包含静态位数和前导零。

日期类型

将日期类型用于其值可被解释为定义的范围内的日期(带可选时间)的分区列。

重要

投影日期列在查询执行时以协调世界时 (UTC) 格式生成。

属性名称 示例值 描述
projection.columnName.type

date

必填项。要用于 columnName 列的投影类型。该值必须是 date(不区分大小写)才能发出使用日期类型的信号。允许前导和尾随空格。
projection.columnName.range

201701,201812

01-01-2010,12-31-2018

NOW-3YEARS,NOW

201801,NOW+1MONTH

必填项。一个两元素,逗号分隔的列表,它提供了最小值和最大值range列的值columnName. 这些值包含在内,它们可以使用任何与 Java java.time.* 日期类型兼容的格式。最小值和最大值必须使用相同的格式。.format 属性中指定的格式必须是用于这些值的格式。

此列还可以包含格式为以下正则表达式模式的相对日期字符串:

\s*NOW\s*(([\+\-])\s*([0-9]+)\s*(YEARS?|MONTHS?|WEEKS?|DAYS?|HOURS?|MINUTES?|SECONDS?)\s*)?

允许使用空格,但在日期中,文本将被视为日期字符串的一部分。

projection.columnName.format

yyyyMM

dd-MM-yyyy

dd-MM-yyyy-HH-mm-ss

必填项。基于 Java 日期格式 DateTimeFormatter 的日期格式字符串。可以是任何受支持的 Java.time.* 类型。
projection.columnName.interval

1

5

一个正整数,它指定 columName 列的连续分区值之间的间隔。例如,具有 interval1interval.unitMONTHSrange2017-01,2018-12 将产生值 2017-01、2017-02、2017-03,依此类推。具有 interval2interval.unitMONTHS 的相同 range 值将产生值 2017-01、2017-03、2017-05,依此类推。允许前导和尾随空格。

如果提供的日期的精度为单日或单月,则 interval 是可选的,默认值分别为 1 天或 1 个月。否则,interval 是必需的。

projection.columnName.interval.unit

YEARS

MONTHS

WEEKS

DAYS

HOURS

MINUTES

SECONDS

MILLISECONDS

一个时间单位词,它表示 ChronoUnit 的序列化形式。可能的值为 YEARSMONTHSWEEKSDAYSHOURSMINUTESSECONDSMILLISECONDS。这些值不区分大小写。

如果提供的日期的精度为单日或单月,则 interval.unit 是可选的,默认值分别为 1 天或 1 个月。否则,interval.unit 是必需的。

注入的类型

将注入的类型用于分区列,这些分区列的可能值无法在某个逻辑范围内通过程序生成,而是在查询的 WHERE 子句中作为单个值提供。

请务必记住以下几点:

  • 如果未为每个注入列提供筛选条件表达式,则对注入列进行的查询将失败。

  • 如果列上的筛选条件表达式允许多个值,则对注入列进行的查询将失败。

  • 仅列string类型。

属性名称 描述
projection.columnName.type

injected

必填项。要用于 columnName 列的投影类型。仅string类型。指定的值必须是 injected(不区分大小写)。允许前导和尾随空格。

有关更多信息,请参阅Injection