我試圖插入一個記錄到三角洲表使用筆記本用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語句可以考慮一個空白的價值?
當我試著封閉的param_end雙引號時,我得到以下錯誤:
“‘org.apache.spark。SparkDateTimeException: [CAST_INVALID_INPUT]價值”類型的“字符串”不能把“時間戳”,因為它是畸形的。正確的值根據語法,或改變其目標類型。使用“try_cast”容忍畸形的輸入,返回NULL。如果有必要設置“spark.sql.ansi。啟用”到“false”繞過這個錯誤。
然後我試著在param_end類型轉換函數將其轉化為時間戳。現在這個工作。
另外,我已經設法創建一個dataframe並將它附加到三角洲表,而不是使用spark.sql ()。這是簡單得多。
我肯定會嚐試f-string。謝謝@Tyler Retzlaff
選擇我嚐試:
還有其他方法來指定空白嗎?
你想嚐試點燃(None)不是列表(沒有),你試了嗎?
我看到你下麵說,你添加了dataframe ehich是容易。我manaipulate dataframes盡可能pyspark直到我需要加入/插入現有表。pyspark方法更容易使用python變量和可能有一些情況需要遍曆列名稱。https://www.sparkbyexamples.com/pyspark巨大的幫助。
讓我知道它是如何工作的
其實我想寫成點燃(沒有)。謝謝你的這個頁麵。我基本上需要製定的火花時把時間戳列。sql輸入。
如:
end_time = =”“支撐”插入默認值。另一個(味精,end_time)值(“+味精+”,演員(“+ end_time +”的時間戳))”