2008-12-02 2 views
2

У меня есть таблица с записями 7M. Я хочу обрезать до 10k для dev. Я попробовал удалить, но весь мир был почти перегружен размером журнала транзакций, поэтому я усекал таблицу.Как ограничить количество обрабатываемых записей в пакете SSIS?

Теперь я хочу вставить записи 10k из исходной таблицы в таблицу dev, но у нее есть столбец идентификаторов и множество других столбцов, поэтому я подумал, что попробую SSIS (через мастер) , который отлично справляется с идентификацией, но не дает мне места для редактирования запроса. Поэтому я быстро сделал представление с верхним предложением и изменил свойство RowSet источника на представление. Теперь все терпит неудачу, потому что ничего не видит в представлении, хотя я скопировал и вставил имя вида из моего оператора представления представления, который не срабатывает второй раз, потому что, действительно, представление действительно существует.

Определяет ли SSIS, какие объекты БД используются при создании пакета, что исключает новое представление, и если да, то как я могу его обновить?

+0

Имеют ли 7 миллионов записей транзакции? Если это так, то может иметь смысл идентифицировать 1000 или около того недавних клиентов, а затем принимать их транзакции только из каждой таблицы. Если вы используете случайные записи, вы можете получить только старые записи стиля и неполные клиенты. – 2009-01-03 17:34:33

ответ

1

Нет необходимости использовать SSIS для этого. Вы должны иметь возможность вставлять записи, используя SQL. Во-первых, вам нужно установить IDENTITY_INSERT для включения. Затем, вы должны быть в состоянии выполнить что-то вроде этого:

SET IDENTITY_INSERT db.schema.dev_table ON

INSERT INTO dev_table Выбор TOP (10000) * FROM prod_table

+0

Моя проблема здесь перечисляет все поля. Возможно, я нашел способ их написания, но спешил начать работу и думал, что SSIS предложит хороший, быстрый и удобный способ. – ProfK 2009-03-01 21:03:06

0

Вы пытались закрыть и снова открыть пакет? Я бы не ожидал, что вам придется это делать. Моей первой мыслью было бы это проблема безопасности - вы не предоставили себе выбор на нем.

+0

Я вернулся к волшебнику (длинный вперед четвертый процесс) и переделал его с запросом на выбор верхнего 10k вместо того, чтобы просто копировать таблицу. Я должен все еще проверить, как второй пакет отличается от первого. – ProfK 2008-12-02 22:28:40

0

Вы используете полное имя для просмотра? У Doe sit есть другой владелец, чем владелец по умолчанию? Откройте источник данных и сделайте предварительный просмотр данных, чтобы убедиться, что все подключено.

1

Ed является правильным, SSIS является излишеством для этой задачи - тем более, что вы только вставляете 10K записей.

Предполагая, что схема таблицы DEV идентична произведению, сценарий Ed отображается очень хорошо.

Если схема отличается, вы можете указать столбцы конкретно - включая столбец идентификатора (помните, чтобы после этого установить идентификатор вставки OFF). Например:

SET IDENTITY_INSERT dbo.dev_table ON 
INSERT INTO dev_table (Id, Col1,Col2,Col3,Col4) 
SELECT TOP 10000 Id, Col1, Col2, Col3, Col4 FROM prod_table 
SET IDENTITY_INSERT dbo.dev_table OFF 
+0

Это решение, по-видимому, предполагает, что Dev и Prod находятся на одном и том же сервере, связанный сервер был настроен между Dev и Prod, или временная база данных была создана на Prod, которая будет заполнена и перенесена в Dev, или копия Prod был восстановлен в Dev. Хорошее решение, если четвертое верно. – 2009-01-03 17:30:49

1

Можно также использовали контроль выборки строки, чтобы извлечь случайное число записей из общих данных, а не просто получать верхние 10000 строк. Это даст лучшую выборку для использования в разработке/тестировании, так как вы не будете разрабатывать против только 10000 самых старых (если ваш дистрибутив похож на большинство таблиц, которые я видел), а вместо этого выборки из всего вашего файла.

Смежные вопросы