Kontext:
我有一个将源数据库表垂直拆分为两个分区的程序:
来源:
id | col1 | col2
1 | v1_1 | v1_2
2 | v2_1 | v2_2
分区#1:
id | col1
1 | v1_1
2 | v2_1
分区#2:
id | col2
1 | v1_2
2 | v2_2
对于客户端/用户,它应该总是看起来只有一个表。当他选择所有数据时,应用程序将分区合并到一个表中。
架构:
Client <--> Server <--> Databases (MySQL)
客户端将参数发送到服务器。服务器在DBMS上创建并执行MySQL查询并返回结果(取决于操作/查询)。
更新操作问题:
客户端使用更新的数据向HTTP服务器发送请求:
HTTP1.1 | PUT
body: {
db:'Partition_1',
table: 'test_table',
data: [
{id:1, col1:'w1_1', col2:'w1_2'}
]
}
服务器创建以下语句:
UPDATE 'Partition_1'.'test_table' SET col1='w1_1' AND col2='w1_2';
这将导致错误#1054,因为第一个分区不知道列'col2'! (而第二个分区不知道'col1')
我不想在请求中添加参数。 有没有办法忽略错误并只设置现有列?
( - &gt;这应该更新第一个分区。将为第二个分区发送类似的请求。)
答案 0 :(得分:0)
答案 1 :(得分:0)
使用x %>% group_by(id) %>%
summarize(
value = sum(value[key == 'total']) - sum(value[key %in% c('a', 'b')]),
key = 'n'
) %>%
bind_rows(x) %>%
select(id, key, value) %>% # back to original column order
arrange(id, key) # and a start a row order
# # A tibble: 9 × 3
# id key value
# <dbl> <chr> <dbl>
# 1 1 a 1
# 2 1 b 2
# 3 1 n 7
# 4 1 total 10
# 5 2 a 4
# 6 2 b 3
# 7 2 n 5
# 8 2 total 12
# 9 2 x 1
将列过滤为该服务器上存在的列。以下查询将告诉您哪些列有效:
INFORMATION_SCHEMA.COLUMNS
然后,您可以使用此结果在SELECT column_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = 'Partition_1'
AND table_name = 'test_table'
AND column_name IN ('col1', 'col2');
查询中构建分配。
顺便说一句,要分配给多个列,请将其与UPDATE
分开,而不是,
:
AND
答案 2 :(得分:0)
谢谢你的帮助......
我通过更改请求的参数来解决它。客户端现在只发送表中包含的列的值。
我没有更改服务器,因为他不应该知道数据库的数据模型。