我在 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 命令”更新列“table_update”的值,其中 id=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
""")
错误:
知道如何解决这个问题吗?谢谢。
这个:
f"""map('{','.join([f'{k},{v}' for k,v in table_updates_id1.items()])}')""")
结果:
map('id1_table_1,2023-03-26 04:33:22.323000,id1_table_2,2023-03-26 04:33:22.323000')
这确实是“地图”中的单个字符串。您需要引用每个值:
f"""{','.join([f"'{k}','{v}'" for k,v in table_updates_id1.items()])}"""
产量:
map('id1_table_1','2023-03-26 04:33:22.323000','id1_table_2','2023-03-26 04:33:22.323000')