Select 命令

最后更新时间:2019-10-25 16:11:01

    概述

    COS Select 功能仅支持 SELECT SQL 查询指令,以便检索所需的部分数据,减少传输的数据量。这样可以减少成本,同时降低请求延时。以下是 SELECT 查询支持的标准子句:

    • SELECT 语句
    • WHERE 子句
    • LIMIT 子句

    注意:

    COS Select 当前暂不支持子句查询或者 joins。

    SELECT 语句

    SELECT 语句可以实现从 COS 对象中检索到您所希望看到的数据,您可以以列的名称、函数或者表达式等维度进行查询,并以一个列表的形式返回查询结果。SELECT 语句调用格式如下:

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

    第一句 SELECT 语句带有*(星号),将返回 COS 对象中的所有列。第二句 SELECT 语句使用用户自定义输出标量表达式,projection为每列创建自定义名称的输出列表。

    WHERE 子句

    WHERE 子句使用以下语法:

    WHERE condition

    WHERE 子句通过 condition 进行过滤。condition 是一种可以返回布尔结果的表达式,只有返回值为 TRUE 的行才会在结果中输出。

    LIMIT 子句

    LIMIT 子句使用以下语法:

    LIMIT number

    LIMIT 子句限制每次查询返回的记录数量,您可以通过 number 参数指定这个限制。

    访问属性

    SELECT 和 WHERE 子句可以通过以下任意方式选择查询的字段,您可以根据文件格式是 CSV 还是 JSON 进行选择。

    CSV

    • 列编号:您可以通过 _N指定查询第 N 列的数据。对于任意一份 CSV 文件,列编号从1开始递增。如第一列编号为_1 ,第二列编号为_2 。在 SELECT 和 WHERE 子句中,通过_N或者alias._N指定需要查询的列均为合法的方式。
    • 列表头:如果待查询的 CSV 文件中有表头, SELECT 和 WHERE 子句中可以通过这些表头指定需要查询的列。在 SQL 语句中,您可以在 SELECT 和 WHERE 子句中通过alias.column_name 或者column_name的方式指定。

    JSON

    • 文档(Document):您可以通过alias.name的方式访问 JSON 文档。嵌套数组则可以通过如alias.name1.name2.name3的方式访问。
    • 列表(List):您可以通过索引访问列表中的元素,索引从0开始编号,并使用[]操作符。例如,您可以通过alias[1]访问 JSON 列表中的第2个元素。如果您需要访问嵌套数组,也可以通过如alias.name1.name2[1].name3这样的方式进行访问。

    示例
    以下为该示例的数据样本:

    {
        "name": "Leon",
        "org": "Tencent",
        "projects":
            [
             {"project_name":"project1", "completed":true},
             {"project_name":"project2", "completed":false}
            ]
    }
    • 示例 1:以下为在数据样本中查询 name 的 SQL 语句和查询结果:
      Select s.name from COSObject s
      {"name":"Leon"}
    • 示例 2:以下为在数据样本中查询 project_name 的 SQL 语句和查询结果:
      Select s.projects[0].project_name from COSObject s
      {"project_name":"project1"}

    表头和属性名称的大小写敏感性

    您可以使用双引号来标注 CSV 文件的表头和 JSON 文件的属性名称是否大小写敏感。如果不添加双引号,则说明表头/属性名是大小写不敏感的。在您设定不明确的情况下,COS Select 可能会抛出异常。

    • 示例 1:查询表头/属性名称中有"NAME"的对象。
      以下 SQL 示例未使用双引号,表明是大小写不敏感的,由于表中有这个表头,所以最终会成功返回数值。

      SELECT s.name from COSObject s

      以下 SQL 示例使用双引号,表明是大小写敏感的。由于表中实际上未包含这个表头,所以最终会返回400错误SQLParsingError

      SELECT s."name" from COSObject s
    • 示例 2:查询表头/属性名称中有"NAME"和"name"的对象。
      以下 SQL 示例未使用双引号,表明是大小写不敏感的,由于表中同时存在"NAME"和"name"两个表头,查询指令设定不明确,会抛出异常 AmbiguousFieldName。

      SELECT s.name from COSObject s

      以下 SQL 示例使用了双引号,表明是大小写敏感的,由于表中已经存在"NAME"这个表头,会成功返回查询结果。

      SELECT s."NAME" from COSObject s

    使用保留字段作为用户自定义字段

    COS Select 的 SQL 表达式具有一些保留字段,包含了函数名称,数据类型,操作符等。在某些情况下,用户可能会使用这些保留字段作为 CSV 文件的列表头或者 JSON 文件的属性名称,这时候可能与保留字段存在冲突。在这种情况下,您可以使用双引号来表明您正在使用自定义字段,否则 COS 将返回400 parse error

    如您需要查阅完整的保留字段列表,请参见 保留字段

    • 示例:待查询的对象的表头/属性名称具有一个保留字段"CAST"。
      以下 SQL 示例使用了双引号表明 CAST 是用户自定义字段,将成功返回查询结果。
      SELECT s."CAST" from COSObject s
      以下 SQL 示例未使用双引号表明 CAST 是用户自定义字段,COS 将作为保留字段处理,将返回400 parse error
      SELECT s.CAST from COSObject s

    标量表达式

    在 SELECT 语句和 WHERE 子句中,您可以使用 SQL 标量表达式(返回标量的表达式)。目前 COS Select 支持以下形式:

    • literal:SQL 文本。
    • column_reference:column_name 或者 alias.column_name。
    • unary_op expression: SQL 一元运算符。
    • expression binary_op expression:SQL 二元运算符。
    • func_name:被调用的标量函数的名称。
    • expression [ NOT ] BETWEEN expression AND expression
    • expression LIKE expression [ ESCAPE expression ]

    Was this page helpful?

    本页内容是否解决了您的问题?

    • 完全没帮助
    • 文档较差
    • 文档一般
    • 文档不错
    • 文档很好
    反馈
    帮助