我在Databricks中有一个增量表,创建者为:
%sql
CREATE TABLE IF NOT EXISTS dev.bronze.test_map (
id INT,
table_updates MAP<STRING, TIMESTAMP>,
CONSTRAINT test_map_pk PRIMARY KEY(id)
) USING DELTA
LOCATION "abfss://bronze@Table Path"
初始值:
INSERT INTO dev.bronze.test_map
VALUES (1, null),
(2, null),
(3, null);
注意,在列“table_updates”中没有值。
在我们的平台中处理其他表之后,我将表更新信息作为Python字典,如下所示:
table_updates_id1 =
{'id1_table_1': datetime.datetime(2023, 3, 26, 4, 33, 22, 323000),
'id1_table_2': datetime.datetime(2023, 3, 26, 4, 33, 22, 323000)}
现在,我想使用“SQL UPDATE命令”更新id=1的列“table_update”的值(注意,我想更新表而不是 Dataframe )。
我尝试了不同的方法,但都失败了。
第1次试验:
spark.sql(f"""
UPDATE dev.bronze.test_map
SET
table_updates = map({table_updates_id1})
WHERE
id = 1
""")
错误:
第二次试验:
spark.sql(f"""
UPDATE dev.bronze.test_map
SET
table_updates = map('{','.join([f'{k},{v}' for k,v in table_updates_id1.items()])}')
WHERE
id = 1
""")
错误:
有什么办法解决这个问题吗?谢谢。
1条答案
按热度按时间f45qwnt81#
这一点:
结果:
它实际上是'map'中的一个字符串。您需要将每个值引用起来:
结果是: