このトピックでは、Log Serviceのドメイン固有言語 (DSL) の基本構文について説明します。

Comments

ステップのコメントを番号記号 (#) で開始します。 例:
# デフォルトのトピックを指定します。 これはステップの最初のコメントです。 
e_set("__topic__", "access_log") # デフォルトのトピックを指定します。 これはステップの最後のコメントです。 

行の折り返し

関数のパラメータリストまたは文字列が1行に収まらない場合は、パラメータリストまたは文字列を区切ることができます。
  • パラメーターリストにコンマ (,) が含まれている場合は、パラメーターリストをコンマ (,) の直後に分割できます。
  • 文字列を分割する場合は、バックスラッシュ (\) を使用して、文字列が次の行に続くことを示します。
例:
e_set("__topic__", "v1",
        "type", "v2", # コンマ (,) を改行として使用します。 
        「長さ」、100)
e_set("__topic__", "this is a very long long long long long ............" \ # 改行としてバックスラッシュ (\) を使用します。 
                            "...... 長いテキスト")

関数呼び出し

  • 基本関数を呼び出す
    e_set("abc", "xyz")
    説明 データ変換ステートメントを記述するときは、関数に渡すデータ型とパラメーターの数が関数の構文を満たしている必要があります。
  • 基本変数パラメータを渡す
    str_replace(value, old [,new [,count] ]) 
    説明 角括弧 [] で囲まれたパラメータはオプションです。 たとえば、上記の関数のnewパラメーターとcountパラメーターはオプションです。 これらのパラメーターは、名前付きパラメーターと同じ方法で渡すことはできません。 これらのパラメータを順番に渡す必要があります。
    # 無効な例
    str_replace("a-b-c", "-", new='%')
    str_replace("a-b-c", "-", new='%', count=1)
    # 有効な例
    str_replace("a-b-c", "-", '%')
    str_replace("a-b-c", "-", '%', 2)
  • 名前付きパラメーターを渡す
    デフォルト値を持つパラメータは、名前付きパラメータと呼ばれます。 たとえば、関数 e_set("abc", "xyz", mode="fill")mode パラメーターは名前付きパラメーターです。
    • 特定の条件に基づいて、特定の関数で名前付きパラメーターの値を渡す必要があります。 詳細については、各関数のパラメーターの説明をご参照ください。
    • mode=... の形式でパラメータを設定すると、名前付きパラメータの値を渡すことができます。.
    • 複数の名前付きパラメータをランダムな順序で渡すことができます。 たとえば、e_csv("data", ["f1", "f2", "f3"], sep='#', quote="|")e_csv("data", ["f1", "f2", "f3"], quote="|", sep='#') は同義です。
    説明 名前付きパラメータは、非名前付きパラメータの後に続く。
  • 関数の組み合わせを呼び出す
    関数の戻り値をパラメーターの値として別の関数に渡すことができます。 この場合、返される値がパラメーターの値と同じデータ型であることを確認する必要があります。 例:
    e_set("abc", v("xyz"))
    e_set("abc", str_lower(v("xyz")))
  • 可変パラメーター

    変数パラメーターを特定の関数に渡すことができます。 The v("f1" 、....) 機能指定が複数のパラメータ合格することができます。 Example: v("f1" 、"f2" 、"f3")

    変数パラメーターと名前付きパラメーターの両方を渡す必要がある場合は、変数パラメーターの後に名前付きパラメーターを配置する必要があります。 例: v("f1", "f2", "f3", "f4", mode="fill")

演算子

  • 比較演算子

    The以下の比較事業者でサポートされているためDSL Log Service標準モード: > 、<,>=, <=,! =,==. You使用することができ比較機能によって提供されてLog Service操作を実行する。
    • 比較演算子の使用
      # 次の例は、比較演算子の使用方法を示しています。 比較条件がTrueに評価された場合、関連するログは破棄されます。 
      e_if(3 > 2, DROP) #3が2より大きい場合、ログは破棄されます。 
      e_if(3 < 2, DROP) #3が2未満の場合、ログは破棄されます。 
      e_if(3 >= 2, DROP) #3が2以上の場合、ログは破棄されます。 
      e_if(3 <= 2, DROP) #3が2以下の場合、ログは破棄されます。 
      e_if(3 == 2, DROP) #3が2に等しい場合、ログは破棄されます。 
      e_if(3 != 2, DROP) #3が2に等しくない場合、ログは破棄されます。 
      e_if(1 < 2 < 3, DROP) #2が1より大きく、2が3より小さい場合、ログは破棄されます。 
      e_if(0 < ct_int(v('x')) < 100, DROP) # xフィールドの値が0より大きく100より小さい場合、ログは破棄される。 
    • Log Serviceが提供する比較機能を使用する
      操作機能例:
      等しい (==)op_eqop_eq(v("name") 、"xiao ming")
      等しくない (!op_neop_ne(v("name") 、"xiao ming")
      大なり (>)op_gtop_gt(ct_int(v("age"))), )
      以上 (>=)op_geop_ge(ct_int(v("age")), 18)
      小なり (<)op_ltop_lt(ct_int(v("年齢")) 、18)
      以下 (<=)op_leop_le(ct_int(v("age")), 18)
  • 論理演算子

    DSL for Log Serviceの標準モードでは、AND、OR、NOTの論理演算子がサポートされています。 Log Serviceが提供する論理関数を使用して操作を実行することもできます。
    • 論理演算子の使用
      # 次の例は、論理演算子の使用方法を示しています。 論理条件がTrueに評価された場合、関連するログは破棄されます。 
      e_if(True and False, DROP) # Falseが返されます。
      e_if(True or False, DROP) # Trueが返されます。
      e_if(True and not False, DROP) # Trueが返されます。
      e_if(3 > 2 and 1 < 3, DROP) # Trueが返されます。
      e_if(ct_int(v('x'))) > 100またはct_int(v('y')) < 100, DROP) # xフィールドの値が100より大きいか、yフィールドの値が100より小さい場合、Trueが返される。
    • Log Serviceが提供する論理関数を使用する
      操作機能例:
      論理演算子AND (and)op_andop_and(op_gt(v("age"), 18), op_lt(v("age"), 31))
      論理演算子OR (or)op_orop_or(op_le(v("age"), 18), op_gt(v("age"), 65))
      論理演算子NOT (not)op_notop_not(op_gt(v("age"), 18))
  • その他の演算子

    特定のDSLオペレータを標準モードで直接使用することはできません。 Log Serviceは、操作の実行に使用できる機能を提供します。 次の表に、演算子と関数を示します。
    操作機能例:
    加算 (+)op_addop_add(v("age"), 2)
    減算 (-)op_subop_sub(v("age"), 2)
    乗算 (*)op_mulop_mul(v("size"), 2)
    累乗 (**)op_powop_pow(v("サイズ"), 2)
    切り捨て除算 (//)op_div_floorop_div_floor(v("bytes") 、1024)
    剰余演算 (%)op_modop_mod(v("age"), 10)
    符号反転 (-)op_negop_neg(v("profit"))
    存在チェック (in)op_inop_in(["pass", "ok"], v("result"))
    非存在チェック (not in)op_not_inop_not_in(["pass", "ok"], v("result"))
    文字列スライス ([ ...])op_sliceop_slice(v("message"), 0, 20)
    この例では、aフィールドの値は3600*6です。 次の例は、フィールドの値を指定するための無効な関数と有効な関数を示しています。
    # *
    e_set("a" 、3600*6) # 無効
    e_set("a", op_mul(3600, 6)) # 有効
    
    # /
    e_set("bytes_kb", v("bytes") / 1024) # 無効
    e_set("bytes_kb", op_div_floor(v("bytes"), 1024)) # 有効

真または偽の評価

イベント処理ロジックを指定する条件がtrueかfalseかをチェックする関数もあります。 条件は、固定値または式関数によって返される値にすることができます。

DSL for Log Serviceオーケストレーションのすべてのタイプのデータに対して、真または偽の評価を実行できます。 次の表に、真または偽の評価のルールを示します。
データ型正しい間違い
Boolean真、真偽、偽
なしN/A常にfalse
Numeric0 や 0.0 以外0 または 0.0
String空でないEmpty string
バイト空でない空のバイト
Tuple空でない空のタプル
List空でない空のリスト
辞書空でない空の辞書
テーブル1つ以上のテーブルが存在するテーブルが存在しません
Datetime1つ以上のdatetimeオブジェクトが存在するdatetimeオブジェクトが存在しません
次の関数を使用して、条件に基づいてログを破棄できます。
e_if(True, DROP) # 最初のパラメーターの値がTrueの場合、ログは破棄されます。 
e_if(1, DROP) # 最初のパラメーターの値が1の場合、ログは破棄されます。 
e_if(v("abc"), DROP) # abcフィールドが存在し、このフィールドの値が空でない場合、ログは破棄されます。 
e_if(str_isdigit(v("abc")), DROP) # abcフィールドが存在し、このフィールドの値に数字のみが含まれる場合、ログは破棄されます。