2016-12-16 12 views
1

月ごとに分割されたSQL DWテーブルがあります。数ヶ月前に私たちのDBAが動いたので、テーブルは分割されていません。私たちはテーブルの速度が遅くなったために気づいた。SQL DW - 分割を使用した分割

我々は、スプリット機能を使って、パーティションを追加しようとすると、我々は

下のエラーを取得するには、「パーティションが空ではないので、ALTER PARTITION文のSPLIT句に失敗しました。」

我々は、それが失敗したが、最後の行の後に次の

CREATE TABLE [data].[sessions_range] 
WITH 
(
    CLUSTERED COLUMNSTORE INDEX, 
    DISTRIBUTION = HASH([sesh_id]), 
    PARTITION 
    (
     -- SAMPLE RANGE 
     [session_start_dt] RANGE RIGHT FOR VALUES 
     (
      '2016-12-01' 
     ) 
    ) 
) 
AS 
SELECT * 
FROM [data].[sessions] 
WHERE 1=2 
; 

ALTER TABLE [data].[sessions] SWITCH PARTITION <guessed at a partition number> 
TO [data].[sessions_range] PARTITION 2; 

ALTER TABLE [data].[sessions] SPLIT RANGE ('2016-12-01'); 

そのを試してみました。私たちが範囲内の対応するパーティションを見つけるまで、パーティション番号を調べなければならなかったが、スイッチパーティションは問題なく動作しているようだ。

私たちが切り替えた後でも、分割中にパーティションがまだ空でないと言っている理由は誰でも助けてくれますか?

+1

Columnstoreインデックスを無効にし、SPLITを実行してから、Columnstoreインデックスを再構築します。 Columnstoreがテーブルに存在する場合、空のパーティションのみが分割されます。ごめんなさい。 –

+0

https://redphoenix.me/2014/08/18/how-to-split-non-empty-partitions-when-a-clustered-columnstore-index-exists-on-the-table/を参照してください。これに対処する方法について。 –

+0

それは動作しません。 – Thomas

答えて

2

推測する必要はありません。 AzureのSQLデータウェアハウスには、以下のDMVをサポートしています。あなたは、関連するパーティションを空にすることができますので、

sys.partitions 
sys.partition_functions 
sys.partition_parameters 
sys.partition_range_values 
sys.partition_schemes 

これは、あなたがあなたのテーブルに値にマップする方法を見つけましょう。

AzureのSQLデータウェアハウスでのパーティショニングのヒントについては、この記事のレビュー:

https://docs.microsoft.com/en-us/azure/sql-data-warehouse/sql-data-warehouse-tables-partition

はまた、パーティションの切り替えをデモし、ターゲット表が同じパーティションレイアウトを持たなければならない方法を示し、この最近の答えを確認これが機能するためには、ソース:

Using Polybase to load data into an existing table in parallel

あなたのDBAは本当に計画やハンドオーバーのいずれかの種類を残していないですか?