我有一個δ表由:
如果不存在dev.bronze % sql創建表。test_map (INT id, table_updates MAP < STRING,時間戳>,約束test_map_pk主鍵(id))使用三角洲位置“abfss: / / bronze@Table路徑”
初始值:
插入dev.bronze。test_map值(空),(2,null),(零);
注意,在列“table_updates”沒有價值。
在我們的平台處理其他表後,我有表更新信息如下python字典像:Beplay体育安卓版本
table_updates_id1 = {id1_table_1: datetime。datetime(33 2023, 26日,4日,22日,323000年),“id1_table_2”: datetime。datetime(33 2023, 26日,4日,22日,323000)}
現在,我想更新的值列“table_update”,使用SQL update命令id = 1(注意,我想更新表不是dataframe)。
我嚐試了不同的方法但失敗了。
試驗1:
火花。sql (f”“dev.bronze更新。test_map設置table_updates =地圖({table_updates_id1}) id = 1”“”)
錯誤:
實驗2:
火花。sql (f”“dev.bronze更新。test_map設置table_updates =地圖(' {','。加入([f ' {k}, {v}’k、v在table_updates_id1.items ()))}”) id = 1”“”)
錯誤:
知道如何解決這個問題嗎?謝謝。
@Mohammad劍:
你收到的錯誤消息表明,SQL UPDATE命令是期待一個map < string,時間戳>類型的列,而是接收一個字符串或一個不匹配的數據類型。為了解決這個問題,你可以將Python字典轉換為一個有效的SQL地圖格式使用map_from_entries函數火花SQL。
這裏有一個例子如何使用map_from_entries函數來更新table_updates列在你的三角洲表:
從pyspark.sql。功能導入map_from_entries #將Python字典的鍵值對列表table_updates_list =列表(table_updates_id1.items()) #鍵值對列表轉換為SQL地圖格式table_updates_map = map_from_entries (table_updates_list) #使用SQL UPDATE命令更新三角洲表火花。sql (f”“dev.bronze更新。test_map設置table_updates = {table_updates_map} id = 1”“”)
在這個例子中,map_from_entries table_updates_id1詞典轉換為一個鍵值對列表,然後傳遞到map_from_entries函數來創建一個SQL映射。然後生成的SQL映射中使用SQL UPDATE命令來更新table_updates列的行id = 1,