我試圖插入一個記錄到三角洲表使用筆記本用python編寫的。這個記錄應該有一個時間戳列,空白的最初,後來我有一個計劃來更新時間戳值。
我該如何插入記錄:
stmt_insert_audit_record = '插入默認值。batch_run (task_name,開始、結束、狀態)值(\”+ param_task_name +“\”, \“+ param_start +“\”, \“+ param_end +“\”, \“+ param_status + ' \ ') ' spark.sql (stmt_insert_audit_record)
這些列,當我設置param_end如下,insert語句效果很好。
param_end = datetime.utcnow () .strftime (“% Y - % m - H % dT %: % m: % S”)
但是我不想設置一個結束日期。從insert語句刪除列名稱會給我一個錯誤,因為火花將希望提到的所有列。我將得到一個異常的列沒有指定插入的結束。
我怎麼設置param_end值,以便Insert語句可以考慮一個空白的價值?
很高興你搞懂了,知道好
附上雙引號中的SQL字符串,指定一個空字符串param_end, SQL字符串,將param_end在單引號,
例如:
param_end = " "
stmt_insert_audit_record = "插入默認值。batch_run (task_name,開始、結束、狀態)值(“+ param_task_name +”、“+ param_start +”、“+ param_end +”,“+ param_status +”)“spark.sql (stmt_insert_audit_record)
這將有助於我相信。
當我試著封閉的param_end雙引號時,我得到以下錯誤:
“‘org.apache.spark。SparkDateTimeException: [CAST_INVALID_INPUT]價值”類型的“字符串”不能把“時間戳”,因為它是畸形的。正確的值根據語法,或改變其目標類型。使用“try_cast”容忍畸形的輸入,返回NULL。如果有必要設置“spark.sql.ansi。啟用”到“false”繞過這個錯誤。
然後我試著在param_end類型轉換函數將其轉化為時間戳。現在這個工作。
另外,我已經設法創建一個dataframe並將它附加到三角洲表,而不是使用spark.sql ()。這是簡單得多。