Databricks,如何使用 python 字典和 SQL UPDATE 命令更新增量表中具有 MAP 数据类型的列的值?

问题描述 投票:0回答:1

我在 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
""")

错误:

知道如何解决这个问题吗?谢谢。

sql dictionary apache-spark databricks updates
1个回答
0
投票

这个:

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')
© www.soinside.com 2019 - 2024. All rights reserved.