2016-10-18 1 views
0

おやすみなさい。私は、代理キー状態ファイルを読み込んで、現在の値と変更方法を取得する方法を見つけようとしています。問題は、データベースが絶えずリフレッシュされていることです。テーブルから最大値を取得し、代理キー状態ファイルを設定できるメカニズムが必要です。代理キー生成プログラムの状態ファイルは、別のプログラム言語からファイルを読み込む方法はありますか?

DataStage Designerツールを使用して読むことができるデータセット(.ds)ファイルとは異なります。私はそれをバイナリファイルとして読む小さなC#アプリケーションを作ろうとしました。さまざまな記事は、それが符号なし64ビット整数であることを説明しています。それでも私がそれを読もうとすると、乱数のセットが返されます。それは1で始まり、999で終わる数字が続き、それが繰り返されます。私はビットコンバータクラスでそれを読むことを試みたが運もない。

私が見た唯一の解決策は、http://it.toolbox.com/blogs/infosphere/datastage-8-tutorial-surrogate-key-state-files-17403で説明されているように、データベースから最大数を取得して代理キーを作成する並列ジョブまたは順次ジョブを作成することです。

私はコードで変更しようとする最初の人ではなく、それを行う方法があれば興味がありました。

アップデート2016年10月19日のDataStage 8.7 C#BinaryReader.ReadUInt64、BinaryReader.ReadInt64とBitConverter.ConvertToUInt64で試してみました

を使用して:部分的な答えは、それはバイナリファイルとして読み取ることができるということである 。 8バイトの4つのセットに分割されています。この(あなたがバイナリエディタでそれを見ることができます。

01 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 05 
00 00 00 00 00 00 00 08 
00 00 00 00 00 00 00 08 

私は増分番号(1、5、などだと思う最初のセット)

第二セットは、初期値

あるような何か

第三セットは、私が割り当てるためのバッチの終わりだと思う

第4セットを割り当てるための次の番号である。あなたは10×10バッチを行っている場合は、第三、私はそれをどのように考えるか10で、第四が20であるか、つまり、作品。

コードで読み込むには、バイナリリーダーで読み込み、UINT64に変換する8バイトのセットを取得する必要があります。

私はそれらが何を意味するかわからないので、質問はまだ立っています。

答えて

0

を行うだろう、すべてこの理由は、私が代理キーの状態のバグを探していますということですファイル。 複雑なトランスフォーマーに移動すると(写真が表示されません)、プロパティに移動して、サロゲートキータブが表示されます。あなたは3つの設定があります。 1つはファイルのためのもので、1つは初期値用であり、もう1つはブロックサイズ用です。

ファイルには、現在の代理キーが保存されています。私はそれがどのようにフォーマットされるかをすぐに説明します。初期値は開始する番号からのもので、ブロックサイズは変圧器の番号のグループを予約するものです。

ファイルは16バイト単位でフォーマットされます。最初は現在の番号です。割り当てる番号はこの番号+ 1で、2番目の番号はブロックサイズの最後です。初期値またはブロックサイズを定義しない場合は、16バイトになります。これらを定義すると、32バイトになります。最後の2つの値は現在の番号とブロックの終わりです。

したがって、同じファイルを使用して2つ以上の変圧器がある場合。新しいブロックを取得する前に利用可能な番号を持つブロックを割り当て、必要に応じてファイルサイズを16バイト増やします。

ブロックサイズを定義せずに初期値を定義すると、システムブロックサイズは約1000程度になります。あなたが持っているのは、シーケンシャルファイルで終わる変圧器に接続された行生成器です。必要なのは1行です。何回も実行し、初期値が200であるとします。200,201,203,204、(1)、205となります。なんらかの理由でDataStage 8.7のバグがあり、ブロックサイズを定義していない場合は、ブロックサイズが返されます。

私は見て見ていて、サロゲートキーをうまく使用する方法があまりないので、この調査が誰かを助けてくれることを願っています。

エラーを早く発生させたい場合は、ファイルを削除してC#で新しいファイルを作成するだけで、BYTESとして保存された4つのUINT64値を割り当てます。最初の2つの値1,1,200,300。最終的には、私が説明したことを実行します。

1

なぜサロゲートキージェネレータの段階が必要だと思いますか? 代替とはるかに簡単な解決策は、番号付けを行うTransformerステージと、それを初期化するSequential File(またはパラメータ)です。処理後の新しい数は、データベースシーケンスに書き戻すことができます。したがって、プログラミングをしないでフラットファイルを処理するだけで済みます。パーティションを考慮しなければならない

変圧器内で一意の番号を生成する(パラレル) - この式は

(@NUMPARTITIONS * (@INROWNUM - 1)) + @PARTITIONNUM + Max_Field1 
+0

解決策を理解するには、件名をもっと読む必要があります。それはすでに作られているので、私はそれが必要です。私はちょうどリフレッシュがあるときに不一致のサロゲートキーの問題を修正しようとしています。それでもあなたの数式は役に立ちます。 – ThorDivDev

関連する問題