tencent cloud

フィードバック

Selectコマンド

最終更新日:2022-05-19 15:04:59

    概要

    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オブジェクトのすべての列が返されます。2番目の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列目の番号が_1であれば、2列目の番号は_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」という2つのヘッダーがあるため、照会コマンドの設定が不明確であり、エラー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 ]
    お問い合わせ

    カスタマーサービスをご提供できるため、ぜひお気軽にお問い合わせくださいませ。

    テクニカルサポート

    さらにサポートが必要な場合は、サポートチケットを送信して弊社サポートチームにお問い合わせください。24時間365日のサポートをご提供します。

    電話サポート(24 時間365日対応)