取消
顯示的結果
而不是尋找
你的意思是:

時間戳列設置為空白當δ表中插入一個記錄

naga_databricks
新的貢獻者三世

我試圖插入一個記錄到三角洲表使用筆記本用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語句可以考慮一個空白的價值?

1接受解決方案

接受的解決方案

naga_databricks
新的貢獻者三世

當我試著封閉的param_end雙引號時,我得到以下錯誤:

“‘org.apache.spark。SparkDateTimeException: [CAST_INVALID_INPUT]價值”類型的“字符串”不能把“時間戳”,因為它是畸形的。正確的值根據語法,或改變其目標類型。使用“try_cast”容忍畸形的輸入,返回NULL。如果有必要設置“spark.sql.ansi。啟用”到“false”繞過這個錯誤。

然後我試著在param_end類型轉換函數將其轉化為時間戳。現在這個工作。

另外,我已經設法創建一個dataframe並將它附加到三角洲表,而不是使用spark.sql ()。這是簡單得多。

在原帖子查看解決方案

8回答說8

etsyal1e2r3
貢獻者

首先,我建議使用多行f-string火花。sql是這樣……

火花。sql (f“插入默認值。batch_run (task_name,開始、結束、狀態)值({param_task_name}, {param_start}, NULL, {param_status}”)

還有其他的選項如果零並不像我沒試過

沒有一個

點燃(沒有)

讓我知道哪個適合你:slightly_smiling_face:

我肯定會嚐試f-string。謝謝@Tyler Retzlaff

選擇我嚐試:

  1. “沒有”,它將無法與其他連接字符串。我得到這個錯誤”隻能連接str str(不是“NoneType”)”
  2. 列表(沒有)拋出一個錯誤”列不是iterable”
  3. 零——這將不是火花,就會意識到這是一個標識符。

還有其他方法來指定空白嗎?

你想嚐試點燃(None)不是列表(沒有),你試了嗎?

我看到你下麵說,你添加了dataframe ehich是容易。我manaipulate dataframes盡可能pyspark直到我需要加入/插入現有表。pyspark方法更容易使用python變量和可能有一些情況需要遍曆列名稱。https://www.sparkbyexamples.com/pyspark巨大的幫助。

讓我知道它是如何工作的:slightly_smiling_face:

其實我想寫成點燃(沒有)。謝謝你的這個頁麵。我基本上需要製定的火花時把時間戳列。sql輸入。

如:

end_time = =”“支撐”插入默認值。另一個(味精,end_time)值(“+味精+”,演員(“+ end_time +”的時間戳))”

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map