Amazon QLDB 中的 Amazon Ion 数据格式参考 - Amazon Quantum Ledger Database (Amazon QLDB)

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

Amazon QLDB 中的 Amazon Ion 数据格式参考

Amazon QLDB 使用一种数据表示法模型,该模型将 Amazon Ion 与一部分 PartiQL类型的子集统一起来。本节提供了 Ion 文档数据格式的参考概述,其与 PartiQL 的集成是分开的。

在 Amazon QLDB 中使用 PartiQL 查询 Ion

有关在 QLDB 中使用 PartiQL 查询 Ion 数据的语法和语义,请参阅 Amazon QLDB PartiQL 参考中的使用 PartiQL 查询 Ion

有关在 QLDB 分类账中查询和处理 Ion 数据的代码示例,请参阅和Amazon Ion 代码示例使用 Amazon Ion

什么是 Amazon Ion?

Ion 是一种开源、类型丰富、自我描述的分层数据序列化格式,最初由 Amazon 内部开发。它基于抽象数据模型,允许您存储结构化和非结构化数据。它是 JSON 的超集,这意味着任何有效的 JSON 文档也是有效的 Ion 文档。本指南假设有 JSON 的基准理论。如果您还不熟悉 JSON,请参阅 JSON 简介了解更多信息。

你可以用人类可读的文本形式或二进制编码的形式交替标注 Ion 文档。与 JSON 一样,文本表单易于读写,支持快速原型设计。二进制编码在保存、传输和解析方面更紧凑和高效。离子处理器可在两种格式之间进行转码,以表示完全相同的数据结构集,而不会丢失任何数据。此功能允许应用程序针对不同的用例优化其数据处理方式。

注意

Ion 数据模型严格基于值,不支持引用。因此,数据模型可以表示可以嵌套至任意深度的数据层次结构,但不能表示有向图。

Ion 规格

请参阅 Amazon GitHub 网站上的 Ion 规范文档,了解 Ion core 数据类型的完整列表,以及完整的描述和值格式化细节。

为了简化应用程序开发,Amazon Ion 提供了可处理 Ion 数据的客户端库。有关显示处理 Ion 数据的常见用例的通用代码示例,请参阅 GitHub 上的 Amazon Ion Cookbook

兼容 JSON

与 JSON 类似的是,您可以使用一组原始数据类型和一组递归定义的容器类型编写 Amazon Ion 文档。Ion 包含以下传统 JSON 数据类型:

  • null: 一个通用的非类型空值(空)。此外,如下一节所述,Ion 支持每种基元类型使用不同的空类型。

  • bool: 布尔值。

  • string:Unicode 文本文字。

  • list:有序的异构值集合。

  • struct:名称/值对的无序集合。与 JSON 一样,struct允许每个名称有多个值,但通常不鼓励这样操作。

JSON 扩展

数字类型

Amazon Ion 将数字严格定义为以下number类型之一,而非模棱两可的 JSON 类型:

  • int:任意大小的有符号整数。

  • decimal:任意精度的十进制编码实数。

  • float:二进制编码的浮点数 (64 位 IEEE)。

解析文档时,Ion 处理器会按以下方式分配数字类型:

  • int:带有小数点但没有指数的数字(例如,100200)。

  • decimal: 没有指数或小数点的数字(例如,0.00001200.0)。

  • float: 带指数的数字,例如科学记数法或 E 记数法 (例如2e03.1e-4)。

新数据类型

Amazon Ion 添加了以下数据类型:

  • timestamp:任意精度的日期/时间/时区时刻。

  • symbol:Unicode 符号原子(例如标识符)。

  • blob:用户定义编码的二进制数据。

  • clob:用户定义编码的文本数据。

  • sexp:具有应用程序定义语义的有序值集合。

Null 类型

除了 JSON 定义的通用空类型外,Amazon Ion 还支持每种原始类型使用不同的空类型。这表明在保持严格的数据类型的同时缺乏价值。

null null.null // Identical to untyped null null.bool null.int null.float null.decimal null.timestamp null.string null.symbol null.blob null.clob null.struct null.list null.sexp

Ion 文本示例

// Here is a struct, which is similar to a JSON object. { // Field names don't always have to be quoted. name: "fido", // This is an integer. age: 7, // This is a timestamp with day precision. birthday: 2012-03-01T, // Here is a list, which is like a JSON array. toys: [ // These are symbol values, which are like strings, // but get encoded as integers in binary. ball, rope ], }

API 参考