SQL 分区表 - 如何将不需要分区的数据插入分区表?

Posted

技术标签:

【中文标题】SQL 分区表 - 如何将不需要分区的数据插入分区表?【英文标题】:SQL Partitioned Table - How do I Insert data that doesn't need to be partitioned into a partitioned table? 【发布时间】:2016-11-08 15:21:23 【问题描述】:

我使用以下步骤对事实表进行了分区:

    重命名事实表(作为备份) 根据数据的加载 ID 创建了两个文件组(我正在处理加载 ID 1 的 1000 行和加载 ID 2 的 1000 行) 创建了一个分区函数,涵盖了两个负载中值的左侧范围。 为这些文件创建了相应的方案,其中包含两个文件组和一个 [主] 文件组。 使用分区创建了新的事实表并将数据重新插入。

这一切都很好。 问题是我有其他数据无法被范围覆盖,我需要将其插入新表中。 (不需要对这些数据进行分区)

我可以简单地在新表中插入其他数据吗?如果我这样做,这些数据会去哪里,即哪个文件组?

或者我是否需要告诉分区函数/方案将这些其他数据放在某处但不在分区文件组中?

我们将不胜感激。 非常感谢:)

【问题讨论】:

您询问的是哪个 dbms? mysql 还是 SQL Server? 在 MySQL 中,如果您不打算拥有一百万行,为什么还要进行分区? 【参考方案1】:

您应该在两端包装您的分区,并为您的分区函数提供一个缓冲区以转储左右范围之外的数据,您可以通过 SQL Server 中的分区方案将文件分配给分区函数。

File 1 - BUFFER PARTITION A
File 2 - BUFFER PARTITION AA
File 3 - PARTITION LEFT
File 4 - PARTITION RIGHT
File 5 - BUFFER PARTITION Z
File 6 - BUFFER PARTITION ZZ

BUFFER PARTITION AABUFFER PARTITION Z 可以处理溢出。

然后你可以做一些有用的事情,比如换出文件或插入和重新排序。

【讨论】:

嗨,罗斯,感谢您的回复,您能否举个例子说明我如何处理这个问题。这是在方案和功能中都定义的东西吗?非常感谢 创建分区方案,将分区函数映射到文件上,两端额外的文件作为扇出,但是这是SQL Server的标准,MySQL可能有其他分区技术。跨度> 【参考方案2】:

分区表意味着它将使用分区函数来确定每一行的放置位置。不存在表中的数据被分区而不被分区的情况。也许你应该有第二张桌子。或者您可以尝试创建一个计算列,将所有不应分区的行放入它自己的分区中,并在计算列上创建分区函数。如果您要为分区函数使用计算列,请确保将其定义为持久化。

【讨论】:

【参考方案3】:

如果您的表已分区,它将根据您的架构进入您拥有的一个或多个分区。你可以只做一个插入,服务器会自动把它放到合适的分区中。

【讨论】:

以上是关于SQL 分区表 - 如何将不需要分区的数据插入分区表?的主要内容,如果未能解决你的问题,请参考以下文章

sql 分区表操作

如何更新oracle表中的分区字段

SQL SERVER分区具体例子详解

PL/SQL 插入和分区

Mysql PARTITION BY分区记录

如何在 BigQuery UI 中插入覆盖分区表?