日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

加工引擎啟動錯誤

本文檔為您介紹加工引擎啟動錯誤的原因以及排查處理方法。

數據加工任務的第一個環節便是啟動加工引擎。該環節產生錯誤主要是由于在啟動加工引擎過程時,檢測到您編寫的SLS DSL規則存在錯誤,導致加工引擎內部的安全審核不通過。加工引擎啟動

錯誤日志

在加工引擎啟動過程中,如果檢測到您編寫的SLS DSL規則存在錯誤,會報如下形式的錯誤。

{
  "errorMessage": "ETL config doesn't pass security check, detail: XXXXXX"
}
說明

錯誤日志可以在數據加工診斷報表的異常詳情中或者internal-etl-log Logstore中查看。

  • 在加工引擎啟動階段產生錯誤時,加工任務會一直重試,直到重試成功或被手動停止。

  • 修改加工規則后,加工任務重試成功,繼續正常工作,不會產生日志的丟失或冗余。

常見錯誤排查

  • 基本語法錯誤。

    您編寫了不符合SLS DSL語法的加工規則,例如:多或者少括號、逗號(,)寫成冒號(:)等。

    • 錯誤日志

      {
        "errorMessage": "ETL config doesn't pass security check, detail: invalid syntax"
      }
      {
        "errorMessage": "ETL config doesn't pass security check, detail: unexpected EOF while parsing"
      }
      ...
    • 排查方法

      根據錯誤日志中的traceback信息定位具體的語法錯誤位置。例如:將e_set("test", v("status"))錯寫成e_set("test": v("status")),如下圖所示。錯誤日志語法

  • 非法使用運算符。

    SLS DSL中所有的操作都需要通過SLS DSL提供的函數來完成。數值運算、大小比較等操作都需要通過op_*函數完成,而不能直接使用運算符。

    • 錯誤日志

      {
        "errorMessage": "ETL config doesn't pass security check, detail: invalid type detected: <class `_ast.BinOp`> "
      }
    • 排查方法

      檢查SLS DSL規則,確保所有的操作例如運算、大小比較等都是通過SLS DSL提供的函數完成的。

    • 示例

      e_set("b", v("a") - 10) # 錯誤示例
      e_set("b", op_sub(v("a"), 10)) # 正確示例
      
      e_set("b", v("a") >= v("c")) # 錯誤示例
      e_set("b", op_ge(v("a"), v("c"))) # 正確示例
  • 函數參數類型傳遞錯誤或調用不存在的函數。

    如果傳遞給函數的參數類型和函數接收的參數類型不一致,或者調用了不存在的函數,會產生錯誤。

    • 錯誤日志

      {
        "errorMessage": "ETL config doesn't pass security check, detail: invalid call in detected: function_name"
      }
    • 排查方法

      • 首先檢查對應的函數是否存在,函數名是否拼寫錯誤等。如果函數存在且名稱正確,則檢查函數的參數類型是否傳遞正確。

      • 根據錯誤日志中的traceback信息定位產生錯誤的函數。例如:定位到dt_totimestamp函數產生錯誤,首先判斷該函數是存在的,接著檢查規則中調用dt_totimestamp函數的地方,是否傳遞了正確類型的參數給該函數。函數錯誤信息

    • 示例

      dt_totimestamp函數接收的參數類型是日期時間對象,此處v("time1")是字符串類型,即傳遞了錯誤類型的參數給日期時間函數,引發報錯。

      您可以使用dt_parse函數將字符串轉化為日期時間對象,再傳遞給dt_totimestamp函數。也可以使用dt_parsetimestamp函數代替dt_totimestamp函數,該函數可以接收字符串類型。

      #錯誤示例
      e_set("time1", "2019-06-03 2:41:26")
      e_set("time2", dt_totimestamp(v("time1")))
      
      #正確示例
      e_set("time1", "2019-06-03 2:41:26")
      e_set("time2", dt_totimestamp(dt_parse(v("time1"))))
      
      #正確示例
      e_set("time1", "2019-06-03 2:41:26")
      e_set("time2", dt_parsetimestamp(v("time1")))
  • 在全局操作中調用表達式函數。

    SLS DSL語法中提供兩種類型的函數:全局操作函數和表達式函數。只有全局操作函數才能作為加工規則的一個步驟,在全局操作進行調用。如果在全局操作中調用表達式函數,則會產生錯誤。

    • 錯誤日志

      {
        "errorMessage": "ETL config doesn't pass security check, detail:  invalid type detected: <class '_ast.Expr'>"
      }
    • 排查方法

      檢查是否在全局操作調用了表達式函數,作為加工規則的一個步驟。

    • 示例

      #錯誤示例
      op_add(v("a"), v("b"))
      str_lower(v("name"))
      
      #正確示例
      e_set("add", op_add(v("a"), v("b")))
      e_set("lower", str_lower(v("name")))
  • 非法使用變量定義賦值。

    SLS DSL語法中不支持變量定義賦值,變量值只能通過無狀態方式調用傳遞。

    • 錯誤日志

      {
        "errorMessage": "ETL config doesn't pass security check, detail: invalid assign detected: variable_name"
      }
    • 排查方法

      • 檢查SLS DSL規則中是否使用了變量定義賦值。

      • 根據錯誤日志中的traceback信息定位產生錯誤的位置。

    • 示例

      #錯誤示例
      sum_value = op_add(v("a"), v("b"))
      e_set("sum", sum_value)
      
      #正確示例
      e_set("sum", op_add(v("a"), v("b")))