标签: database-partitioning

Sql Server查询选择Top和分组依据

SpousesTable SpouseID

SpousePreviousAddressesTable PreviousAddressID,SpouseID,FromDate,AddressTypeID

我现在所拥有的是更新整个表的最新版本并分配最新的,无论SpouseID是AddressTypeID = 1

我想为SpousePreviousAddresses表中的每个唯一SpouseID分配最新的SpousePreviousAddress.AddressTypeID = 1.

UPDATE spa 
SET spa.AddressTypeID = 1
FROM SpousePreviousAddresses AS spa INNER JOIN Spouses ON spa.SpouseID = Spouses.SpouseID,
(SELECT TOP 1 SpousePreviousAddresses.* FROM SpousePreviousAddresses 
    INNER JOIN Spouses AS s ON SpousePreviousAddresses.SpouseID = s.SpouseID 
    WHERE SpousePreviousAddresses.CountryID = 181 ORDER BY SpousePreviousAddresses.FromDate DESC) as us
WHERE spa.PreviousAddressID = us.PreviousAddressID
Run Code Online (Sandbox Code Playgroud)

我想我需要一个小组,但我的sql并不是那么热门.谢谢.

正在运行的更新

我之前找到了解决方案的错误.以下是我要解决的问题

WITH result AS
(
    SELECT ROW_NUMBER() OVER (PARTITION BY SpouseID ORDER BY FromDate DESC) AS rowNumber, *
    FROM …
Run Code Online (Sandbox Code Playgroud)

sql sql-server database-partitioning

1
推荐指数
1
解决办法
805
查看次数

基于变量值的分区表 - SQL Server 2008

我是否可以在一个范围内指定在GETDATE()中早于一个月的CreatedDate列中具有值的所有行应放在一个分区中,其余的放在另一个分区中,以便我应该在第二个分区中查询最新数据,在第一个分区中查询归档数据?

sql-server sql-server-2008 database-partitioning

1
推荐指数
1
解决办法
1212
查看次数

使用Prepared Statement设置LONG数据类型

我的情况是我需要在特定时间动态创建数据库分区.我使用Statement的如下:

alter table table_name split partition default_partition values (' +
id + ') into (  partition " + partitionName + ", partition
default_partition) update indexes
Run Code Online (Sandbox Code Playgroud)

这很好,完全符合我的预期.但是,价值id来自未经授权的人可能访问的输入.因此,上述语句容易受到SQL注入攻击.我想用一个PreparedStatement,但我无法弄清楚如何.

问题是oracle中的分区表将" id"值放入HIGH_VALUE列中,该列为LONG.我认为没有合适的setter来执行此操作(因为String无法工作).我已经尝试过使用各种流消息,a StringReaderByteArrayInputStream值都没有用.我知道LONGs不应再被使用了,但这就是Oracle拥有它的方式所以我无法真正解决它.

当我尝试任何一种方式时,这就是我得到的:

ORA-14308: partition bound element must be one of: string, datetime or interval literal, number, or NULL
Run Code Online (Sandbox Code Playgroud)

Oracle doc有关于如何获取LONG(oracle数据类型,类似于LOB)但不知道如何设置它的良好信息.任何人都可以帮我这个吗?我也研究了JDBC驱动程序的Oracle实现,但它似乎也没有setLONG类型方法.有没有办法可以做到这一点?

java oracle jdbc prepared-statement database-partitioning

1
推荐指数
1
解决办法
3404
查看次数

如何绕过sql-server的分区最大值?

我的团队正在尝试运行源代码管理中的脚本来创建分区,但我们遇到了以下错误: CREATE/ALTER partition function failed as only a maximum of 1000 partitions can be created.

部分脚本:

CREATE PARTITION FUNCTION [PFDailyPartition](DATETIME)
    AS RANGE RIGHT FOR VALUES ('01/01/2005 00:00:00'
 '01/02/2005 00:00:00'
 '01/03/2005 00:00:00'
 '01/04/2005 00:00:00'
 '01/05/2005 00:00:00'
 '01/06/2005 00:00:00'
 '01/07/2005 00:00:00'
 '01/08/2005 00:00:00'
 '01/09/2005 00:00:00'
 '01/10/2005 00:00:00'
 '01/11/2005 00:00:00'
 '01/12/2005 00:00:00'
 '01/13/2005 00:00:00'
 '01/14/2005 00:00:00'
 etc...
Run Code Online (Sandbox Code Playgroud)

select * from sys.partition_range_values在我们当前的设置上运行显示我们有超过 10,000 个分区。

有什么办法可以绕过这个 1000 限制吗?我们无法弄清楚我们是如何拥有这么多分区的。

这可能是两种设置之间的环境差异吗?

提前致谢!

sql-server sql-server-2008 database-partitioning

1
推荐指数
1
解决办法
6742
查看次数

SQL SERVER QUERY获取表中的Number of Distinct列

这是样本预期结果表

在此输入图像描述

如您所见,我有一个具有相应区域的租户列表.我需要创建一个列'Count',它将计算给定TENANT中不同Area的数量.例如,租户'CMBINA13'有两个不同的区域.因此它应该在计数列中输出2,与仅具有1个不同区域的下一个租户示例相同.

这是我最初得到的

select tenantcode ,  b.name , AreaSqm  ,
       COUNT(*) OVER (PARTITION BY AreaSqm) AS 'Count'
from    TENANT
Run Code Online (Sandbox Code Playgroud)

并且它提供了这样的逻辑错误输出

在此输入图像描述

任何帮助将不胜感激 :)

sql sql-server-2008 database-partitioning

1
推荐指数
1
解决办法
40
查看次数

我可以在 oracle 中对已经存在的表进行分区吗?

我的 oradb 中有一个表,其中已经有很多行。

我想通过不重新创建它来按月对该表进行分区。所以我不想丢失表中的数据。

我想要这种分区类型:

PARTITION BY RANGE (date_column)
INTERVAL (NUMTOYMINTERVAL (1,'MONTH')) 
         (partition transaction_old values less than (to_date('01-01-2015','DD-MM-YYYY')));
Run Code Online (Sandbox Code Playgroud)

如何将其设置为已存在的表?我想使用alter table功能,但它不起作用:

alter table mytable
    PARTITION BY RANGE (date_column)
    INTERVAL (NUMTOYMINTERVAL (1,'MONTH')) 
             ( partition transaction_old values less than (to_date('01-01-2015','DD-MM-YYYY') ));
Run Code Online (Sandbox Code Playgroud)

我的问题有什么解决方案吗?

oracle database-partitioning partition

1
推荐指数
1
解决办法
2万
查看次数

更新分区键,不允许行移动

我想更新分区键。分区如下

PARTITION_NAME  LAST_ANALYZED   NUM_ROWS    BLOCKS  SAMPLE_SIZE HIGH_VALUE
PORTAL_SERVICE_1    12/8/2016   4133    174 4133    1
PORTAL_SERVICE_2    6/8/2016    4474    174 4474    2
PORTAL_SERVICE_3    10/8/2016   29602   2014    29602   3
PORTAL_SERVICE_OTHERS   24/5/2016   0   110     DEFAULT
Run Code Online (Sandbox Code Playgroud)

此分区应用于列 Portal_Service_id。我想将门户服务 ID 的值从 2 更新为 1。

当我尝试

update trans set PORTAL_SERVICE_ID = 1 where ID = 2054;
Run Code Online (Sandbox Code Playgroud)

我收到错误:错误报告 - SQL 错误:ORA-14402:更新分区键列会导致分区更改 14402. 00000 -“更新分区键列会导致分区更改”

我不允许使用启用行移动。

任何人都可以建议更新行的任何替代方法。

如果这可以在场景中使用,任何人都可以解释一下:

UPDATE <table_name> PARTITION (<partition_name>)
SET <column_name> = <value>
WHERE <column_name> <condition> <value>;
Run Code Online (Sandbox Code Playgroud)

oracle partitioning database-partitioning sql-update

1
推荐指数
1
解决办法
1万
查看次数

Cosmos DB 的分区键

我正在使用 ASP.NET Core 和 Cosmos DB 构建一个宁静的 API。有一个需要分区键的 GetItemById 请求。

 public static async Task<T> GetItemAsync(string itemId, string name)
    {
        try
        {
            Document document =
                await client.ReadDocumentAsync(UriFactory.CreateDocumentUri(DatabaseId, CollectionId, itemId),
                    new RequestOptions() { PartitionKey = new PartitionKey(name) });

            return (T)(dynamic)document;
        }
        catch (DocumentClientException e)
        {
            if (e.StatusCode == System.Net.HttpStatusCode.NotFound)
            {
                return null;
            }
            else
            {
                throw;
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

GetByIdAsync() 函数调用此 GetItemAsync() 方法。

    [HttpGet("{itemId}")]
    public async Task<IActionResult> GetByIdAsync(string itemId, string name)
    {
        var item = await DocumentDBRepository<TodoItem>.GetItemAsync(itemId, name);
        if (item == null) …
Run Code Online (Sandbox Code Playgroud)

api azure database-partitioning asp.net-core azure-cosmosdb

1
推荐指数
1
解决办法
6806
查看次数

按周/月//季度/年进行分区以超出分区限制?

我有32年的数据要放入分区表中。但是BigQuery表示我超出了限制(4000个分区)。

对于像这样的查询:

CREATE TABLE `deleting.day_partition`
PARTITION BY FlightDate 
AS 
SELECT *
FROM `flights.original` 
Run Code Online (Sandbox Code Playgroud)

我收到如下错误:

查询产生的分区过多,允许2000个,查询至少产生11384个分区

我怎样才能超过这个限制?

database-partitioning google-bigquery

1
推荐指数
1
解决办法
640
查看次数

Oracle Apex 是否支持表分区?

我是 Oracle 和 Apex 的新手,我正在构建一个可能会随着时间的推移变得非常大的表。

按日期范围分区,然后按哈希子分区是理想的。

Apex 是否支持表分区?
谷歌搜索没有结果,这让我认为它不受支持。
(我能找到的只是 Oracle DB 文章,而不是 Apex。)

sql oracle partitioning database-partitioning oracle-apex

1
推荐指数
1
解决办法
77
查看次数