このトピックでは、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_eq op_eq(v("name") 、"xiao ming")
等しくない ( !
op_ne op_ne(v("name") 、"xiao ming")
大なり ( >
)op_gt op_gt(ct_int(v("age"))), )
以上 ( >=
)op_ge op_ge(ct_int(v("age")), 18)
小なり ( <
)op_lt op_lt(ct_int(v("年齢")) 、18)
以下 ( <=
)op_le op_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_and op_and(op_gt(v("age"), 18), op_lt(v("age"), 31))
論理演算子OR ( or
)op_or op_or(op_le(v("age"), 18), op_gt(v("age"), 65))
論理演算子NOT ( not
)op_not op_not(op_gt(v("age"), 18))
- 論理演算子の使用
その他の演算子
特定のDSLオペレータを標準モードで直接使用することはできません。 Log Serviceは、操作の実行に使用できる機能を提供します。 次の表に、演算子と関数を示します。
この例では、操作 機能 例: 加算 ( +
)op_add op_add(v("age"), 2)
減算 ( -
)op_sub op_sub(v("age"), 2)
乗算 ( *
)op_mul op_mul(v("size"), 2)
累乗 ( **
)op_pow op_pow(v("サイズ"), 2)
切り捨て除算 ( //
)op_div_floor op_div_floor(v("bytes") 、1024)
剰余演算 ( %
)op_mod op_mod(v("age"), 10)
符号反転 ( -
)op_neg op_neg(v("profit"))
存在チェック ( in
)op_in op_in(["pass", "ok"], v("result"))
非存在チェック ( not in
)op_not_in op_not_in(["pass", "ok"], v("result"))
文字列スライス ( [ ...]
)op_slice op_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 |
Numeric | 0 や 0.0 以外 | 0 または 0.0 |
String | 空でない | Empty string |
バイト | 空でない | 空のバイト |
Tuple | 空でない | 空のタプル |
List | 空でない | 空のリスト |
辞書 | 空でない | 空の辞書 |
テーブル | 1つ以上のテーブルが存在する | テーブルが存在しません |
Datetime | 1つ以上の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フィールドが存在し、このフィールドの値に数字のみが含まれる場合、ログは破棄されます。