ルールクエリの作成
    • PDF

    ルールクエリの作成

    • PDF

    Article Summary

    Classic/VPC環境で利用できます。

    ルールクエリの作成ルールおよびルールクエリの作成時に使用できる組み込み関数の説明をします。

    ルールクエリ作成のルール

    IoT機器から送信されたメッセージの内容に、特定のルールクエリを作成します。ルールクエリを作成するには、基本的な SQL構文を理解している必要があります。また、SELECT構文だけをサポーしているため、SELECT - FROM - WHEREの順に作成する必要があります。

    ルールクエリ作成のルールは、次の通りです。

    SELECT [<トピック Alias>.<メッセージ JSON Key1>, <トピック Alias>.<メッセージ JSON Key2>, ...] FROM "[トピック]" AS [トピック Alias] WHERE [条件]
    

    ルールクエリ作成の例は、次の通りです。

    例1)

    • メッセージ構造

      {
        "deviceId": "1",
        "deviceType": "illumination",
        "buildingId": "N1001",
        "roomId": "001",
        "light": 75,
        "battery": 3.3,
        "eventTime": "2020-01-01 00:00:00"
      }
      
    • 照明の明るさが 50lux未満であるデータのメッセージ内の全フィールドを抽出するクエリ

      SELECT * FROM "apt/+/sensor/light" AS t WHERE t.light < 50
      
    • 特定の建物の照明の明るさが50lux未満であるデータのメッセージ内の特定フィールドのみを抽出するクエリ

      SELECT t.light, t.buildingId, t.roomId, t.eventTime FROM "apt/#" AS t WHERE t.buildingId = 'N1001' AND t.light < 50
      

    例2)

    • メッセージ構造

      {
        "deviceId": "device_1",
        "deviceType": "temperature",
        "value": 35,
        "battery": 9,
        "date": "2016-12-15",
        "time": "15:12:00"
      }
      
    • battery値の残量が10%未満の場合を検査するためのクエリ

      SELECT * FROM "factory/room1/temperature" AS t WHERE t.battery < 10
      
    • 機器を区分することができる機器の ID値(deviceId)、バッテリー値(battery)のように特定のフィーのみを抽出するクエリ

      SELECT t.deviceId, t.battery FROM "factory/room1/temperature" AS t WHERE t.battery < 10
      
    参考

    ルールクエリ FROMのトピックの最大長さは255Byte(UTF-8 エンコーディング)であり、7段階まで使用できます。

    SELECT/WHERE節

    SELECT/WHEREに関しての詳細は、次の通りです。

    • 一般的な SQLクエリと同様に作成でき、SELECT * FROM ...のように *(アスタリスク)の使用ができます。
    • GROUP BY、ORDER BY、DISTINCT、JOIN、UNION、UNION ALL、INTERSECT、LIMITなど複数のデータを処理するクエリはサポートしていません。
    • SUBQUERYはサポートしていません。
    • MQTTに送信した JSONメッセージの Key(ex: light, buildingId、...)を使用して特定の Keyに対応する値をクエリ結果として選択することができます。
    • 組み込み関数または算術演算式など、JSONフィールド Keyをそのまま使用しない場合、Aliasを使用して、結果の値として使用する JSONフィールド Keyを指定することをお勧めします。Aliasがない場合、クエリの結果の JSONフィールド Keyは、SELECT節での位置に基づき _1, _2, ..., _nのように出力されます。

    例)

    • クエリ

      SELECT t.productId, t.weight AS gram, t.weight / 1000.0, t.weight * 0.0352, t.weight / 1000.0 AS kg,  t.weight * 0.0352 AS oz FROM "scm/warehouse/001" AS t
      
    • 結果、t.weight / 1000.0t.weight * 0.0352には Aliasがないので、SELECT節の3番目の位置は'_3'、4番目の位置は'_4'で表示されます。

      {
      "productId":"23",
      "gram":1500,
      "_3":1.5,
      "_4":52.8,
      "kg":1.5,
      "oz":52.8
      }
      
    参考

    Cloud IoT Coreでサポートされているルールクエリ組み込み関数については、ルールクエリ組み込み関数をご参照ください。

    FROM節

    FROM節の詳細は、次の通りです。

    • 1つの MQTTトピックのみ可能です。
    • トピック名の最大文字数は255文字です。
    • "(Double Quotes)を利用して、トピックを括って表現しなければなりません。
    • SELECTまたは WHERE節に、トピック名と同じ JSONフィールド Keyがある場合、トピックは必ず Alias(別名)を指定しなければならず、[トピック Alias].[JSONフィールド Key]の形式で作成する必要があります。
    • トピックのレベルは、/(スラッシュ)で区切らなければなりません。
    • トピックは、英文字、数字、空白、!@$%^&()_-={[}]?></`'の文字が可能です。
    • .(ピリオド)、*(アスタリスク)、"(Double Quotes)はトピックに含めることができません。
    • トピックは、/または//にはなり得ません。
    • マルチレベルのワイルドカード#(ハッシュタグ)は、最終的なレベルでのみ使用できます。
    • 単一レベルのワイルドカード+(プラス)は、最終的なレベルで使用できます。
    • ワイルドカードは、該当レベルで単独で使用され、他の文字と一緒に使用できません。
    • ルールに既に登録されているメッセージ再発行アクションがある場合、メッセージの再発行アクションによって、再度ルールクエリになり得るトピックでの設定はできません。

    文字列

    関数、比較文などの文字列を使用する場合、'(Single Quote)で括らなければなりません。

    例) JSONメッセージの deviceTypeフィールドの値と文字列の sensor比較

    SELECT * FROM "factory/room1/temparature" WHERE deviceType = 'sensor'
    

    JSONフィールド Key

    クエリで JSONフィールド Keyを使用しますが、入力メッセージに該当する JSONフィールド Keyがない場合は、クエリエラーが発生します。クエリエラーはエラーアクションで確認できます。

    例) JSONメッセージの device、voltフィールドの値がないエラーが発生

    SELECT device FROM "factory/room1/temparature" WHERE volt = 1.5
    
    {
      "lux": 1
    }
    

    "(Double Qutoes) を利用して、JSONフィールド Keyを使用していることを明確に表示できます。次のような場合、必ずフィールド Keyを "(Double Qutoes) で括る必要があります。

    • JSONフィールド Keyの大文字と小文字を区別する必要がある場合で JSONメッセージが次のような場合、クエリでは deviceTypeは大文字小文字を区別しないので、"(Double Qutoes) で括らないとき、どの JSONフィールド Keyを選択すべきか不明なためにエラーが発生します。

      {
        "deviceType": 10,"DEVICEType": 5
      }
      
      SELECT deviceType FROM "factory/room1/temparature" WHERE deviceType = 10
      
        Multiple matches were found for the specified identifier Evaluator Error
      
    • JSONフィールド Keyが Keywordとして使用される単語である場合、ルールクエリ検証時に JSONフィールド Keyがクエリ文で使用できない予約された Keywordと同じであれば、次のようなエラーが発生します。Keywordと同じ JSONフィールド Keyを使用するためには、"(Double Quotes) で括って JSONフィールド Keyであることを明示しなければなりません。

      Unexpected keyword
      

      timeはクエリ文で Keywordなので、「time」 JSONフィールドキーを使用するために「time」を使用します。

      SELECT "time" FROM  "factory/room1/temparature"
      
    • JSONフィールド Keyに .(ピリオド)が含まれている場合、または特殊文字を含む JSONフィールド Keyの場合、ルールクエリでフィールドの .(ピリオド)は JSONメッセージ内でのネストフィールドを意味します。JSONフィール ド Keyに「.」(ピリオド)が含まれている場合、"(Double Quotes) で括ってフィールド Key値の特殊文字として処理できます。

    例)

    • メッセージの内容
      {
      "deviceId": "1",
      "deviceType": "sensor",
      "temperature": 21.3,
      "device.serialNo": 100001,
      "manufacture": {
        "company": "myCompany",
        "buildDate": "2020-01-01"
      }
      }
      
    • ネストフィールドの照会
      SELECT manufacture.company FROM "factory/room1/temparature"
      
    • (ピリオド)が含まれているフィールドの照会
      SELECT "device.serialNo" FROM "factory/room1/temparature"
      
    • 特殊文字を含む JSONフィールド Keyがある場合
      SELECT * FROM "factory/room1/temparature" WHERE "deviceType@number" = "sensor"
      

    ルールクエリの組み込み関数

    ルールクエリを作成する際に便利に使用できる組み込み関数について説明します。組み込み関数の名前は、大文字小文字に関係なく入力できます。組み込み関数は、Alias(別名)を使用してクエリ結果値である JSONの Key値として明確に表示することをお勧めします。「関数名(入力引数)」を入力すると、値が返されます。戻り値の型は、Number(整数または小数)、Integer(整数)、String(文字列)、Bool(真、偽の論理値)、Any(タイプどれでも)

    作成例は次の通りです。

    SELECT ABS(volt) AS volt FROM "topic"
    
    参考
    • 次の各組み込み関数の例で、入力引数は定数値を入力しましたが、入力 JSONメッセージの Key値を入力すると JSON Valueが評価されます。
    • 組み込み関数の引数値は、定数も入力できます。定数値の Stringの場合、'(Single Quote).で括り、bool値は、true、falseで、JSON値は`(Grave Accent)で括って入力します。
    • 組み込み関数の入力引数の数が異なる場合や入力引数の型が異なる場合は、クエリが失敗します。エラーアクションを追加すると、クエリが失敗した理由を確認できます。

    ABS

    絶対値を返します。

    • 構文
      ABS(Number)=Number
      
    • ABS(-10)=10
      

    SIGN

    符号を返します。符号が + であれば1、- であれば-1、ゼロの場合は0を返します。

    • 構文
      SIGN(Number)=Number
      
    • SIGN(-5)=-1, SIGN(5)=1, SIGN(0)=0
      

    CEIL

    最も近い整数に切り上げた値を返します。

    • 構文
      CEIL(Number)=Integer
      
    • CEIL(1.1)=2, CEIL(-1.1)=-1
      

    FLOOR

    最も近い整数に切り捨てた値を返します。

    • 構文
      FLOOR(Number)=Integer   
      
    • FLOOR(1.8)=1, FLOOR(-1.8)=-2
      

    ROUND

    最も近い整数に四捨五入した値を返します。

    • 構文
      ROUND(Number)=Integer
      
    • ROUND(0.5)=1, ROUND(-1.5)=-2
      

    TRUNC

    2番目の引数の数で小数点を切り捨てた値を返します。2番目の引数が負の場合は0、小数の場合は小数の部分を切り捨てて2番目の引数が置き換えられます。

    • 構文
      TRUNC(Number, Number)=Number
      
    • TRUNC(3.3, 0)=3, TRUNC(3.33312, 2)=3.33, TRUNC(3.000, 2)=3, TRUNC(2.23, -2)=2, TRUNC(2.23, 1.5)=2.2
      

    MOD

    最初の引数を2番目の引数で割った余りを返します。% 演算子を代わりに使用できます。

    • 構文
      MOD(Integer, Integer)=Integer
      
    • MOD(5, 2)=1
      

    SQRT

    数字の平方根を返します。

    • 構文
      SQRT(Number)=Number
      
    • SQRT(1.44)=1.2
      

    POWER

    最初の引数を2番目の引数で累乗した結果を返します。

    • 構文
      POWER(Number, Number)=Number
      
    • POWER(2, 4)=16
      

    LOG

    最初の引数の値を2番目の引数の値を下(Base)にして Log値を返します。最初の引数が0の場合、-inf Stringを、0より小さい場合はnan Stringを返します。2番目の引数が0より小さいか1の場合はnan Stringを返します。

    • 構文
      LOG(Number, Number)=Number
      
    • LOG(100, 10)=2
      

    EXP

    e(自然定数、オイラー定数)で入力された数値の累乗値を返します。

    • 構文
      EXP(Number)=Number
      
    • EXP(1)=2.718281828459045
      

    LN

    e(自然定数、オイラー定数)を下(Base)にして、入力された数値の Log値を返します。数字が0より小さければnan、0ならば-inf Stringを返します。

    • 構文
      LN(Number)=Number
      
    • LN(10)=2.302585092994046
      

    三角関数

    三角関数の値を返します。使用可能な三角関数は、SIN(n)、SINH(n) COS(n)、COSH(n)、TAN(n)、TANH(n)、ASIN(n)、ACOS(n)、ATAN(n)、ATAN2(n)、ATANH(n)です。

    • 構文
      三角関数(Number)=Number
      

    BITOR

    2つの値を bit値に変換して、OR演算した値を10進数で返します。

    • 構文
      BITOR(Integer, Integer)=Integer
      
    • BITOR(4, 2)=6
      

    BITAND

    2つの値を bit値に変換して、AND演算した値を10進数で返します。

    • 構文
      BITAND(Integer, Integer)=Integer
      
    • BITAND(4, 2)=0
      

    BITXOR

    2つの値を bit値に変換して、XOR演算した値を10進数で返します。

    • 構文
      BITXOR(Integer, Integer)=Integer
      
    • BITXOR(5, 1)=4
      

    NANVL

    最初の引数が数字なら最初の引数を、数字でなければ2番目の引数を返します。

    • 構文
      NANVL(Any, Any)=Any
      
    • NANVL(1.1, 1.5)=1.1, NANVL('STRING', '3')="3"
      

    ISNULL

    値が null値の場合は真(true)、そうでない場合は偽(false)値で返します。

    • 構文
      ISNULL(Any)=Bool
      
    • ISNULL("not null")=false, ISNULL(null)=true
      

    NULLIF

    入力された2つの引数の値が同じであれば null、異なる場合、最初の引数の値を返します。

    • 構文
      NULLIF(Any, Any)=Any
      
    • 例1
      NULLIF(1, 1)=null
      
    • 例2 deviceIdの値が nullであれば nullを、そうでなければ deviceIdの値を返す
      NULLIF(deviceId, null)
      
    • 例3
      SELECT NULLIF(deviceId, null) AS deviceId FROM "topic" WHERE member IS NOT NULL
      
    • 例4
      SELECT NULLIF(deviceId, '2x33sed') AS deviceId FROM "topic"
      

    EXISTS

    JSON listまたは JSON objectのアイテムが存在するか確認します。存在する場合は真(true)、そうでない場合は偽(false)値で返します。

    • 構文
      EXISTS(Any)=Bool
      
    • 例 1 JSON listまたは JSON object違うので falseで返す
      EXISTS(5)=false 
      
    • 例2
      • Input JSON
          { "device" : [] } または { "device" : {} }
        
      • Query
        SELECT EXISTS(device) as empty_device FROM "iot"
        
      • Result JSON
          { "empty_device" : false }
        

    RAND

    0.0~1.0の範囲の均等確率でランダム値を返します。

    • 構文
      RAND()=Number
      
    • RAND()=0.1897250037492607
      

    CHAR_LENGTH

    文字列の文字数を返します。

    • 構文
      CHAR_LENGTH(String)=Integer
      
    • CHAR_LENGTH('heLLo')=5
      

    UPPER

    大文字で置換して返します。アルファベット以外の文字は影響を受けません。

    • 構文
      UPPER(String)=String
      
    • UPPER('hi99')="HI99"
      

    LOWER

    小文字で置換して返します。アルファベット以外の文字は影響を受けません。

    • 構文
      LOWER(String)=String
      
    • LOWER('NEXT99')="next99"
      

    TRIM

    文字列の前後の特定文字を削除します。TRIM(String)、TRIM(表現式 FROM String)、TRIM(表現式 String FROM String)のように様々な形で使用可能です。

    • LEADINGの場合、先頭の文字列だけを、TRAILINGの場合は末尾の文字列だけを、BOTHは両方を削除します。
    • 基本的には LEADING、TRAILING、BOTHの間に特定文字を指定して、その文字を削除することができ、指定しない場合はスペースを削除します。
    • 構文
      TRIM(表現式 String FROM String)=String
      
    • - TRIM('   foobar   ')                  -- "foobar"
      - TRIM('   \tfoobar\t    ')             -- "\tfoobar\t"
      - TRIM(LEADING FROM '    foobar    ')   -- "foobar    "
      - TRIM(TRAILING FROM '    foobar    ')  -- "    foobar"
      - TRIM(BOTH FROM '    foobar    ')     -- "foobar"
      - TRIM(BOTH '1' FROM '11foobar11')             -- "foobar"
      - TRIM(BOTH '12' FROM '1112211foobar22211122') -- "foobar"
      

    LEADING_PAD

    文字列の先頭に特定の文字列を追加します。

    • 構文
      LEADING_PAD(String, Integer, String(オプション))=String
      
    • LEADING_PAD('device', 2)="&nbsp;&nbsp;device", LEADING_PAD('device', 2, 'm')="mmdevice"
      

    TRAILING_PAD

    文字列の末尾に特定の文字列を追加します。

    • 構文
      TRAILING_PAD(String, Integer, String(オプション))=String
      
    • TRAILING_PAD('device', 2)="device&nbsp;&nbsp;",         TRAILING_PAD('device', 2, 'm')="devicemm"
      

    NUMBYTES

    文字列の UTF-8エンコーディングの基準バイト数を返します。

    • 構文
      NUMBYTES(String)=Integer
      
    • NUMBYTES('good')=4, NUMBYTES('∀')=3
      

    STARTSWITH

    最初の引数が2番目の引数の文字列で始まるかどうかを真(true)、偽(false)値で返します。

    • 構文
      STARTSWITH(String, String)=Bool
      
    • STARTSWITH('hello', 'he')=true
      

    ENDSWITH

    最初の引数が2番目の引数の文字列で終わるかどうかを真(true)、偽(false)値で返します。

    • 構文
      ENDSWITH(String, String)=Bool
      
    • ENDSWITH('hello', 'lo')=true
      

    INDEXOF

    最初の引数に2番目の引数の文字列が存在する場合、同じ最初の文字列の開始インデックスを返します。そうでない場合は、-1を返します。

    • 構文
      INDEXOF(String, String)=Integer
      
    • INDEXOF('hello', 'el')=1, INDEXOF('hello', 'xx')=-1
      

    REPLACE

    最初の引数の文字列で、2番目の引数の文字列を検索し、3番目の引数にすべて置換して返します。

    • 構文
      REPLACE(String, String, String)=String
      
    • REPLACE('hello', 'l', 'ee')="heeeeeo"
      

    REGEXP_REPLACE

    最初の引数の文字列で、2番目の正規表現と一致する文字列をすべて見つけて、3番目の引数に置換して返します。3番目の引数に「$」を使用してキャプチャグループを参照できます。

    • 構文
      REGEXP_REPLACE(String, String, String)=String
      
    • 例1
      REGEXP_REPLACE('xdevice', 'x{.*}', 'invalid')="invalid"
      
    • 例2
      REGEXP_REPLACE('x is b y is a', '(.*) is (.*))', '$2')="a"
      

    REGEXP_MATCHES

    最初の引数の文字列で、2番目の正規表現と一致する文字列が含まれている場合、真(true)値で返します。

    • 構文
      REGEXP_MATCHES(String, String)=Bool
      
    • REGEXP_MATCHES('hello', 'l{2,}')=true, REGEXP_MATCHES('halo', 'l{2,}')=false
      

    REGEXP_SUBSTR

    最初の引数の文字列で、2番目の正規表現と一致する最初の一致する文字列を検索します。

    • 構文
      REGEXP_SUBSTR(String, String)=String
      
    • REGEXP_SUBSTR('byebyeY', '(bye)*')="byebye"
      

    CONCAT

    すべての引数の STRING値を接続します。

    • 構文
      CONCAT(String, String, ...)=String
      
    • CONCAT('he', 'll', 'o')="hello"
      

    LIST

    すべての引数の値を Listに作成して返します。

    • 構文
      LIST(Any, Any, ...)=JSONList
      
    • LIST('he', 1, true, null, `{"a":"b"}`,`[1]`)=["he", 1, true, null, {"a":"b"}, [1,2,3]]
      

    FLATLIST

    すべての引数の値を Listに作成して返します。引数の中に Listがある場合、展開して加えます。

    • 構文
      FLATLIST(Any, Any, ...)=JSONList
      
    • LIST('he', 1, true, null, `{"a":"b"}`,`[1,2,3]`)=["he", 1, true, null, {"a":"b"}, 1, 2, 3]
      

    SUBSTRING

    文字列を切ります。最初の引数値の文字列で、2番目の引数値の数字に該当する文字から3番目の引数値の数だけ文字列を返します。3番目の引数がない場合は、2番目の引数値の数字に該当する文字から後ろのすべての文字列を返します。

    • 構文
      SUBSTRING(String, Integer, Integer)=String
      
    • - SUBSTRING('12345', 0)="12345", SUBSTRING('12345', 1)="12345", SUBSTRING('12345', 3)="345"
      - SUBSTRING('12345', 2, 3)="2", SUBSTRING('12345', -2, 0)="" (empty値) , SUBSTRING('12345', 5, 5)=""(empty)
      

    NEWUUID

    任意の16バイト UUIDを返します。

    • 構文
      NEWUUID()=String
      
    • NEWUUID()="0491e6b5-afee-4a39-97a3-14bc6c35fda9"
      

    HASH

    最初の引数を2番目の引数の型にハッシュを取得します。サポートするハッシュタイプは、MD2、MD5、SHA-1、SHA-224、SHA-384、SHA-256、SHA-512です。大文字と小文字は区別しませんが、正確にタイプを入力する必要があります。

    • 構文

      HASH(String, String)=String
      
    • HASH('iotgood', 'sha-1')="edcf3d81bd181b9b37bc9748766b16345f7fb405"
      

    ENCODE

    最初の引数を2番目の引数のエンコーディグタイプでエンコードします。サポートするエンコーディングタイプは Base64で、正確にタイプを入力する必要があります。

    • 構文

      ENCODE(String, String)=String
      
    • ENCODE('iot', 'base64')="aW90"
      

    DECODE

    最初の引数を2番目の引数のデコーディングタイプでデコードします。サポートするデコーディングタイプは Base64のみをサポートしており、正確にタイプを入力する必要があります。

    • 構文
      DECODE(String, String)=String
      
    • DECODE('aW90', 'base64')="iot"
      

    CHR

    入力された Integerに対応する ASCII文字を返します。

    • 構文
      CHR(Integer)=String
      
    • CHR(65)="A"
      

    GET_ITEM

    最初の引数の値から2番目の引数の順番のアイテムを呼び出します。最初の引数が Stringである場合、対応する Indexの文字を1つ呼び出します。

    • 構文

      GET_ITEM(JSONObject または JSONList または String)=Any
      
      • リストから呼び出す
      GET_ITEM(`["banana", "apple", "grape"]`, 2)="grape"
      
      • オブジェクトから呼び出す
      GET_ITEM(`{"device":"none"}`, 'device')="none"
      
      • Stringから呼び出す
      GET_ITEM('banana', 2)="n"
      

    SIZE

    JSON値の Sizeを返します。

    • 構文

      SIZE(JSONObject または JSONList)=Integer
      
    • 例 1 リストのアイテム数を返す

      • Input JSON
        {
          "lux": [null, 2, "3"]
        }
        
      • Query
        SELECT SIZE(t.lux) AS "count" FROM "topic" AS t
        
      • Result JSON
        {
          "count": 3
        }
        
    • 例 2 キー-値のペアの数を返す

      • Input JSON

        {
          "info": {
            "dv1": 1,
            "volt": "1v",
            "id": null
          },
          "lux": [1, 2]
        }
        
      • Query

        SELECT SIZE(t.info) AS "count" FROM "topic" AS t
        
      • Result JSON

        {
          "count": 3
        }
        
    • 例 3 JSON値を直接入力する場合、`(Grave Accent)で括って入力できます。

      • Query

        SELECT SIZE(`{ "device": 1, "lux": 1}`) AS "count" FROM "topic" AS t
        
      • Result JSON

        {
          "count": 2
        }
        

    COALESCE

    引数が null以外の値のうち、一番左の引数の値を返します。入力引数は可変で、少なくとも1つは入力する必要があります。

    • 構文
      COALESCE(...)=Any
      
    • COALESCE('s', null, 1)='s', COALESCE(null, null, 1)=1,  COALESCE(null, null)=null
      

    CAST

    値をキャストします。typeには、boolean、integer、float、stringを使用することができます。

    • 構文
      CAST(Any AS type)=type
      
    • 例1 Booleanでキャスト(1, 1.0, 「true」のみ trueに変換する。その他は false)
      - CAST(0 AS boolean)=false
      - CAST(1 AS boolean)=true
      - CAST(1.1 AS boolean)=true
      - CAST('1' AS boolean)=false
      - CAST('true' AS boolean)=true
      
    • 例2
      - CAST(true AS integer)=1
      - CAST(false AS integer)=0
      - CAST(1.75 AS integer)=1
      - CAST('aa' AS integer)=(error発生)
      - CAST('22' AS integer)=22
      
    • 例3
      - CAST('2.2' AS float)=2.2
      - CAST(true AS float)=1.0
      - CAST(true  AS string)="true"
      

    UNIXTIME_NOW

    現在時刻の Unixタイムスタンプ(ミリ秒)を取得します。

    • 構文
      UNIXTIME_NOW()=Integer
      
    • UNIXTIME_NOW()=1594614865656
      

    UNIXTIME_TO_STRING

    最初の引数を、2番目の引数の日付フォーマットの形式に合わせて変換して、文字列を変換します。3番目の引数は TimeZoneで値がない場合、UTC TimeZone基準で変換します。

    • 構文
      UNIXTIME_TO_STRING(Integer, String, String(オプション))=String
      
    • 例1
      UNIXTIME_TO_STRING(1594579192000, 'yyyy MM dd hh:mm:ss z', 'Asia/Seoul')="2020 07 13 03:39:52 KST"
      
    • 例2
      UNIXTIME_TO_STRING(1594579192000, 'hh:mm:ss')="06:39:52"
      

    STRING_TO_UNIXTIME

    最初の引数を、2番目の引数の日付フォーマット形式に合わせて文字列を Unixタイムスタンプ(ミリ秒)に変換します。3番目の引数は TimeZoneで、値がない場合、UTC TimeZone基準で変換します。

    • 構文
      STRING_TO_UNIXTIME(String, String, String(オプション))=Integer
      
    • 例1
      STRING_TO_UNIXTIME('2020 07 13 03:39:52', 'yyyy MM dd hh:mm:ss', 'Asia/Seoul')=1594579192000
      
    • 例2
      STRING_TO_UNIXTIME('2020 07 13 06:39:52.222', 'yyyy MM dd hh:mm:ss.SSS')=1594622392222
      

    EXTRACT

    Unixタイムスタンプで表現式を使用して UTC Timezoneに YEAR、MONTH、HOUR、MINUTE、DAY、SECOND値を呼び出せます。

    • 構文
      EXTRACT(表現式 FROM Integer)=Integer
      
    • - EXTRACT(YEAR FROM 1594579192031)                           -- 2020
      - EXTRACT(MONTH FROM 1594579192031)                          -- 7
      - EXTRACT(HOUR FROM 1594579192031)                           -- 18
      - EXTRACT(DAY FROM 1594579192031)                            -- 12
      - EXTRACT(MINUTE FROM 1594579192031)                         -- 39
      - EXTRACT(SECOND FROM 1594579192031)                         -- 52
      

    ADD_TIME

    Unixタイムスタンプで表現式を使用して UTC Timezoneに YEAR、MONTH、HOUR、MINUTE、DAY、SECOND値を加えて引くことができます。2番目の引数の値を3番目の引数の値に表現式の単位で加えます。

    • 構文
      ADD_TIME(表現式, Integer, Integer)=Integer
      
    • ADD_TIME(MINUTE, -10, 1594579198031)=1594578598031
      

    DIFF_TIME

    Unixタイムスタンプで表現式を使用して UTC Timezoneに YEAR、MONTH、HOUR、MINUTE、DAY、SECONDの基準時間の差を求めることができます。3番目の引数の Unixタイムスタンプより2番目の引数の Unixタイムスタンプの方が大きい場合、戻り値が-と表示されます。

    • 構文
      DIFF_TIME(表現式, Integer, Integer)=Integer
      
    • 例1
      DIFF_TIME(SECOND, 1594579192031, 1594579198031)=6
      
    • 例2
      DIFF_TIME(MINUTE, 1594579992031, 1594579198031)=-13
      

    CASE構文

    Case構文を使用して、switchのような分岐処理を行うことができます。少なくとも1つ以上の WHEN節が必要です(ELSE節は選択項目)。WHENでは、評価値が正しいか違うかだけが確認でき、不等号の使用はできません。

    • 例1

      CASE 評価値 WHEN 値1 THEN 戻り値1
      WHEN 値2 THEN 戻り値2 ... 
      ELSE 返却値の残り END
      
    • 例2

      • Input JSON
        { "fruit" : "apple" }
      
      • Query
      SELECT CASE fruit WHEN 'apple' THEN 'red' WHEN 'banana' THEN 'yellow' ELSE 'no color' END as color FROM "fruit/color"
      
      • Result JSON
        { "color": "red" }
      
    • 例 3 評価値と値1、値2 ...には、Number、Stringの両方が可能であり、Key値として JSON Valueを参照できます。

      • Input JSON
        { "my_score" : 31, "team_score" : 30 }
      
      • Query
      SELECT CASE 30 WHEN my_score THEN my_score * 2 WHEN team_score THEN team_score/2 ELSE 'nothing 30' END as final_score FROM "score/30"
      
      • Result JSON
        { "final_score" : 15 }
      

    リテラル構文

    リテラル値を直接作成することができます。

    • 例1

      • Input JSON
        { "xy": [47.606,-122.332] }
      
      • Query
      SELECT {'x': GET_ITEM(xy, 0),'y':GET_ITEM(xy, 1)} as result FROM "topic/coord"
      
      • Result JSON
        { "result" : { "x" : 47.606, "y" : -122.332 } }
      
    • 例2

      • Input JSON
         {"lat" : 47.696, "long" : -122.332}
      
      • Query
      SELECT [lat,long] as lat_long FROM "topic/coord"
      
      • Result JSON
        { "lat_long" : [47.606,-122.332]}
      

    この記事は役に立ちましたか?

    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.