使用 Amazon Ion SerDe 属性 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 Amazon Ion SerDe 属性

本主题包含有关 Athena 中 CREATE TABLE 语句的 SerDe 属性信息。有关 Amazon Ion SerDe 属性用法的更多信息和示例,请参阅 GitHub 上 Amazon Ion Hive SerDe 文档中的 SerDe 属性

指定 Amazon Ion SerDe 属性

若要在 CREATE TABLE 语句中指定 Amazon Ion Hive SerDe 的属性,请使用 WITH SERDEPROPERTIES 子句。由于 WITH SERDEPROPERTIESROW FORMAT SERDE 子句的子字段,因此您必须首先指定 ROW FORMAT SERDE 和 Amazon Ion Hive SerDe 类路径,如以下语法所示。

... ROW FORMAT SERDE 'com.amazon.ionhiveserde.IonHiveSerDe' WITH SERDEPROPERTIES ( 'property' = 'value', 'property' = 'value', ... )

请注意,如果要使用 ROW FORMAT SERDE,尽管需要 WITH SERDEPROPERTIES 子句,但您可以使用 STORED AS ION 或者更长的 INPUTFORMATOUTPUTFORMAT 语法来指定 Amazon Ion 格式。

Amazon Ion SerDe 属性

以下是可以在 Athena 中的 CREATE TABLE 语句中使用的 Amazon Ion SerDe 属性。

ion.encoding

可选

默认:BINARY

值:BINARYTEXT

此属性声明添加的新值是否序列化为 Amazon Ion 二进制或者 Amazon Ion 文本格式。

以下 SerDe 属性示例指定 Amazon Ion 文本格式。

'ion.encoding' = 'TEXT'
ion.fail_on_overflow

可选

默认:true

值:truefalse

Amazon Ion 允许任意大的数字类型,而 Hive 则不允许。默认情况下,如果 Amazon Ion 值不适合 Hive 列,SerDe 将失败,但是您可以使用 fail_on_overflow 配置选项让值溢出而不是失败。

可以在表或列级别设置此属性。若要在表级别指定属性,请按以下示例指定 ion.fail_on_overflow。这将为所有列设置默认行为。

'ion.fail_on_overflow' = 'true'

若要控制特定列,请在 ionfail_on_overflow 之间指定列名称,以句点分隔,如以下示例所示。

'ion.<column>.fail_on_overflow' = 'false'
ion.path_extractor.case_sensitive

可选

默认:false

值:truefalse

确定是否将 Amazon Ion 字段名称视为区分大小写。false 时,SerDe 忽略解析 Amazon Ion 字段名称的大小写。

例如,假设您有一个 Hive 表架构,其定义小写 alias 字段和包含 alias 字段和 ALIAS 字段的 Amazon Ion 文档,如以下示例所示。

-- Hive Table Schema alias: STRING -- Amazon Ion Document { 'ALIAS': 'value1'} { 'alias': 'value2'}

以下示例显示区分大小写设置为 false 时的 SerDe 属性和生成的提取表:

-- Serde properties 'ion.alias.path_extractor' = '(alias)' 'ion.path_extractor.case_sensitive' = 'false' --Extracted Table | alias | |----------| | "value1" | | "value2" |

以下示例显示区分大小写设置为 true 时的 SerDe 属性和生成的提取表:

-- Serde properties 'ion.alias.path_extractor' = '(alias)' 'ion.path_extractor.case_sensitive' = 'true' --Extracted Table | alias | |----------| | "value2" |

在第二种情况下,区分大小写设置为 true 并且路径提取器指定为 alias 时,将忽略 ALIAS 字段的 value1

ion.<column>.path_extractor

可选

默认:NA

值:带搜索路径的字符串

使用给定列的指定搜索路径创建路径提取器。路径提取器将 Amazon Ion 字段映射到 Hive 列。如果未指定路径提取器,则 Athena 在运行时根据列名动态创建路径提取器。

以下示例路径提取器将 example_ion_field 映射到 example_hive_column

'ion.example_hive_column.path_extractor' = '(example_ion_field)'

有关路径提取器和搜索路径的更多信息,请参阅 使用路径提取器

ion.timestamp.serialization_offset

可选

默认:'Z'

值:OFFSET,其中 OFFSET 表示为 <signal>hh:mm。示例值:01:00+01:00-09:30Z(UTC,与 00:00 相同)

Apache Hive 时间戳没有内置时区,并且存储为 UNIX 纪元的偏移量,而 Amazon Ion 时间戳则有偏移量。序列化到 Amazon Ion 时,使用此属性指定偏移量。

以下示例添加一小时的偏移量。

'ion.timestamp.serialization_offset' = '+01:00'
ion.serialize_null

可选

默认:OMIT

值:OMITUNTYPEDTYPED

Amazon Ion SerDe 可以配置为序列化或省略具有空值的列。您可以选择写出强类型空值(TYPED)或无类型空值(UNTYPED)。基于默认的 Amazon Ion 到 Hive 类型映射确定强类型空值。

以下示例指定强类型空值。

'ion.serialize_null'='TYPED'
ion.ignore_malformed

可选

默认:false

值:truefalse

true 时,如果 SerDe 无法读取格式错误的条目或整个文件,则忽略条目或整个文件。有关更多信息,请参阅 GibHub 上文档中的忽略格式错误

ion.<column>.serialize_as

可选

默认:列的默认类型。

值:包含 Amazon Ion 类型的字符串

确定序列化值的 Amazon Ion 数据类型。由于 Amazon Ion 和 Hive 类型并不总是具有直接映射关系,因此一些 Hive 类型具有多个用于序列化的有效数据类型。若要将数据序列化为非默认数据类型,请使用此属性。有关类型映射的更多信息,请参阅 GitHub 上的 Amazon Ion 类型映射页面。

默认情况下,二进制 Hive 列序列化为 Amazon Ion Blob,但也可以序列化为 Amazon Ion Clob(字符大对象)。以下示例将列 example_hive_binary_column 序列化为 Clob。

'ion.example_hive_binary_column.serialize_as' = 'clob'