Добрый день. Я пытаюсь найти способ прочитать файл состояния суррогатного ключа, чтобы узнать, каково его текущее значение и как его изменить. Проблема в том, что база данных постоянно обновляется, и мне нужен механизм, в котором я могу получить максимальное значение из таблицы, а затем установить файл состояния суррогатного ключа.
Из того, что я читал, это не похоже на файлы набора данных (.ds), где вы можете использовать инструмент DataStage Designer для его чтения. Я попытался создать небольшое приложение на C #, где оно читалось бы как двоичный файл. В различных статьях объясняется, что это 64-битное целое число без знака. Тем не менее, когда я пытаюсь его прочитать, он дает случайный набор чисел. Он начинается с единицы, затем цифр, заканчивающихся на 999, и затем повторяется. Я пробовал читать его с помощью класса преобразователя битов, но тоже не повезло.
Пока что единственное решение, которое я видел, - это создать параллельное или последовательное задание, которое получает максимальное число из базы данных, а затем создает с его помощью суррогатный ключ, как описано в http://it.toolbox.com/blogs/infosphere/datastage-8-tutorial-surrogate-key-state-files-17403.
Я не первый, кто пытался изменить это с помощью кода, и мне было любопытно, есть ли способ сделать это.
с использованием DataStage 8.7 Пробовал с C # BinaryReader.ReadUInt64, BinaryReader.ReadInt64 и BitConverter.ConvertToUInt64
Обновление 2016-10-19: частичный ответ заключается в том, что его можно читать как двоичный файл. Он разделен на 4 набора по 8 байтов. Примерно так (это можно увидеть с помощью шестнадцатеричного редактора.
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 и т. Д.).
Второй набор - это начальное значение
Третий набор - это следующий номер, который нужно присвоить
Четвертый набор, я думаю, это конец партии, которую нужно назначить. Если вы делаете партии 10 на 10, то третье - 10, а четвертое - 20, или, как я думаю, это работает.
Поэтому для чтения по коду вам нужно прочитать его с помощью двоичного считывателя и получить наборы по 8 байтов для преобразования в UINT64.
Вопрос все еще в силе, потому что я не уверен, что они означают.