Amazon Glacier
开发人员指南 (API 版本 2012-06-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

SELECT 命令

Amazon S3 Select 和 Amazon Glacier Select 仅支持 SELECT SQL 命令。SELECT 支持以下 ANSI 标准子句:

  • SELECT list

  • FROM 子句

  • WHERE 子句

  • LIMIT子句 (仅限 Amazon S3 Select)

注意

Amazon S3 Select 和 Amazon Glacier Select 查询目前不支持子查询或联接。

SELECT 列表

SELECT 列表指定希望查询返回的列、函数和表达式。列表表示查询的输出。

SELECT * SELECT projection [ AS column_alias | column_alias ] [, ...]

第一个带 * (星号) 的表单按原样返回每个传递 WHERE 子句的行。第二个表单使用用户定义的输出标量表达式投影 为每列创建一行。

FROM 子句

Amazon S3 Select 和 Amazon Glacier Select 支持以下形式的 FROM 子句:

FROM table_name FROM table_name alias FROM table_name AS alias

其中 table_nameS3Object (适用于 Amazon S3 Select)、ARCHIVEOBJECT (适用于 Amazon Glacier Select) 之一,指代正被查询的档案。对于来自传统关系数据库的用户,可以将其视为一个数据库架构,其中包含一个表的多个视图。

按照标准 SQL,FROM 子句将会创建在 WHERE 子句中筛选并在 SELECT 列表中投影的行。

WHERE 子句

WHERE 子句遵循以下语法:

WHERE condition

WHERE 子句根据 condition 筛选行。condition 是具有布尔结果的表达式。只有 condition 计算结果为 TRUE 的行才会在结果中返回。

LIMIT 子句 (仅限 Amazon S3 Select)

LIMIT 子句遵循以下语法:

LIMIT number

LIMIT 子句根据 number 限制您希望查询返回的记录数。

注意

Amazon Glacier 不支持 LIMIT 子句。

属性访问

SELECTWHERE 子句可以使用以下部分的任一方法引用记录数据,具体取决于将查询的文件是否采用 CSV 或 JSON 格式。

CSV

  • 列编号 – 您可以引用列名为 _N 的行的第 N 列,其中 N 是列位置。位置计数从 1 开始。例如,第一列名为 _1,第二列名为 _2

    您可以通过 _Nalias._N 引用列。例如,_2myAlias._2 都是有效的,都可用于引用 SELECT 列表中的列和 WHERE 子句。

  • 列标头 – 对于具有标头行的 CSV 格式的对象,可在 SELECT 列表和 WHERE 子句中使用这些标头。尤其在传统 SQL 的 SELECTWHERE 子句表达式中,可以通过 alias.column_namecolumn_name 引用列。

JSON (仅限 Amazon S3 Select)

  • 文档 – 可将 JSON 文档字段作为 alias.name 进行访问。还可以访问嵌套字段;例如,alias.name1.name2.name3

  • 列表 – 可以将零基索引和 [] 运算符配合使用以访问 JSON 列表中的元素。例如,可以通过 alias[1] 访问列表中第二个元素。可以结合字段以 alias.name1.name2[1].name3 的形式访问列表元素。

  • 示例:将此 JSON 对象视为示例数据集:

    {"name": "Susan Smith", "org": "engineering", "projects": [ {"project_name":"project1", "completed":false}, {"project_name":"project2", "completed":true} ] }

    示例 #1:以下查询返回这些结果:

    Select s.name from S3Object s
    {"name":"Susan Smith"}

    示例 #2:以下查询返回这些结果:

    Select s.projects[0].project_name from S3Object s
    {"project_name":"project1"}

标头/属性名称区分大小写

借助 Amazon S3 Select 和 Amazon Glacier Select,您可以使用双引号指示区分大小写的列标头 (对于 CSV 对象) 和属性 (对于 JSON 对象) 。如果不是有双引号,对象标头/属性不区分大小写。如果出现歧义,则会抛出错误。

以下示例是:1) 包含指定列标头和 FileHeaderInfo 设置为“用于”查询请求的 CSV 格式的 Amazon S3 或 Amazon Glacier 对象;或 2) 包含指定属性的 JSON 格式的 Amazon S3 对象。

示例 #1:将查询的对象具有标头/属性“NAME”。

  • 以下表达式从对象成功返回值 (无引号:不区分大小写):

    SELECT s.name from S3Object s
  • 以下表达式导致出现 400 错误 MissingHeaderName (包含引号:区分大小写):

    SELECT s."name" from S3Object s

示例 #2:将查询的 Amazon S3 对象具有一个包含“NAME”的标头/属性和另一个包含“name”的标头/属性。

  • 以下表达式导致出现 400 错误 AmbiguousFieldName (无引号:不区分大小写,但有两个匹配项):

    SELECT s.name from S3Object s
  • 以下表达式从对象成功返回值 (引号:区分大小写,因此可以解析歧义)。

    SELECT s."NAME" from S3Object s

将保留关键字作为用户定义的术语

Amazon S3 Select 和 Amazon Glacier Select 具有一组保留关键字,执行用于查询对象内容的 SQL 表达式时需要使用这组关键字。保留关键字包含函数名称、数据类型、运算符等。在某些情况下,诸如列标头 (用于 CSV 文件) 或属性 (用于 JSON 对象) 之类的用户定义的术语可能与保留关键字发生冲突。发生这种情况时,必须使用双引号指示您特意使用与保留关键字冲突的用户定义的术语。否则将会导致出现 400 解析错误。

有关保留关键字的完整列表,请参阅保留关键字

以下示例是:1) 包含指定列标头和 FileHeaderInfo 设置为“用于”查询请求的 CSV 格式的 Amazon S3 或 Amazon Glacier 对象;或 2) 包含指定属性的 JSON 格式的 Amazon S3 对象。

示例:将查询的对象具有名为“CAST”的标头/属性,这是保留关键字。

  • 以下表达式从对象成功返回值 (引号:利用用户定义的标头/属性):

    SELECT s."CAST" from S3Object s
  • 以下表达式导致出现 400 解析错误 (无引号:与保留关键字发生冲突):

    SELECT s.CAST from S3Object s

标量表达式

WHERE 子句和 SELECT 列表中,您可以使用 SQL 标量表达式 (返回标量值的表达式)。它们具有以下形式:

  • literal

    SQL 文本。

  • column_reference

    column_namealias.column_name 形式引用列。

  • unary_op expression

    其中 unary_op 一元是一个 SQL 一元运算符。

  • expression binary_op expression

    其中 binary_op 是一个 SQL 二元运算符。

  • func_name

    其中 func_name 是要调用的标量函数的名称。

  • expression [ NOT ] BETWEEN expression AND expression

  • expression LIKE expression [ ESCAPE expression ]