2017-08-30 9 views
1

私たちは、単純な時系列データを含む大きなU-SQLテーブルを持っています。テーブルは1日に分割されます。新しいバッチのデータが受信されるたびに、新しいバッチに古いデータポイントの更新値が含まれている場合、新しい時系列データポイントを挿入し、以前に受信したデータポイントを新しい値で更新する必要があります。テーブルパーティションを動的に切り捨てます

U-SQLで詳細なUPDATEまたはDELETEを実行できないため、影響を受けたパーティションを切り捨て、再計算された1日の値を挿入するだけでした。マージを行うU-SQLスクリプトは、切り詰める必要のあるパーティションを識別します。

残念ながら、U-SQLでループを作成できないため、特定されたパーティションを動的に切り捨てる方法はないようです。他の場所で見つけた提案は、PowerShellスクリプトにパーティションの切り捨てを渡すことでしたが、必要以上に一時的な行セットを格納したり取得したりするのを避けるため、すべて同じU-SQLスクリプトの中に置いておきたいと思います。

カスタムC#関数を使用することを考えましたが、U-SQL SDKがC#関数でデータベースメタデータにアクセス/変更できるようには見えません。その他のオプションはありますか?

答えて

1

SDKでは、メタデータを照会できますが、オブジェクトを操作することはできません。

もう1つの方法として、データに基づいてスクリプトを生成し、生成されたスクリプトを実行するスクリプトを作成する方法があります。それでも、2つのスクリプトを書くことを意味しますが、実際には一時的なデータを格納する必要はありません。

戻って更新する必要があるパーティションの数は分かりますか?

+1

残念ながら、私たちは新しく到着したデータをEXTRACTした後で、ボリュームが原因でコストがかかりすぎるまで、どのパーティションを切り捨てる必要があるのか​​分かりません。データを一時的に保存するコストが正当化されているかどうかを少し試してみましょう。これは逆の投稿を生成するのに比べて、挿入を行うことができます。 – Dan

+0

あなたのシナリオに欠けている機能のリクエストをhttp://aka.ms/adlfeedbackに投稿してください。たとえば、DELETE、UPDATEなどのデータ操作文の要求をupvoteできます。 –

+0

パーティションテーブルを切り詰めようとすると、次のようなエラーが発生します。 'パーティションテーブルを参照するときにパーティション句が必要です。 'テーブルのすべてのパーティションを一度に切り捨てる簡単な方法はありますか、ドロップして再作成するのが最善でしょうテーブル? – Dan