Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выгрузка > 2.000.000 строк из базы  [new]
TheKLF
Member

Откуда:
Сообщений: 22
Здравствуйте!

Такая задача:

- стоит MS SQL
- создаётся таблица за один день с данными (данных > 90.000.000)
- выполняется запрос на уникальные значения вида
SELECT DISTINCT [SomeItem]  FROM [TableOfDay] 

получаем в результате ~2.200.000 значений

необходимо этот результат выгрузить из БД во что-то, допустим файл

таких выгрузок надо сделать 30 (за месяц) и потом из этих 30ти файлов собрать уникальную коллекцию значений (которая будет процентов на 10 больше чем ежедневные выгрузки)

Выполнять всё это в исходной БД нельзя, из неё можно только выгружать

Вот подскажите как можно организовать данную работу?
Как лучше выгружать ежедневный результат и куда его лучше записывать для дальнейшего анализа?
Хотелось бы это сделать в виде скриптов PowerShell (запрос на уникальные значения легко сделать, только куда сохранить 2.200.000 строк не придумал) и как было бы оптимально пересечения списков дневных сделать?

Спасибо!
8 дек 18, 00:58    [21757715]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка > 2.000.000 строк из базы  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36972
TheKLF
из неё можно только выгружать
Выгружать можно по-разному и в различные дестинейшены.
TheKLF
Как лучше выгружать ежедневный результат и куда его лучше записывать для дальнейшего анализа?
Да хоть в другой MS SQL.

Сообщение было отредактировано: 8 дек 18, 01:04
8 дек 18, 01:03    [21757717]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка > 2.000.000 строк из базы  [new]
TheKLF
Member

Откуда:
Сообщений: 22
Ну такое число записей в CSV наверное глупо выгружать?

А используя PShell скрипты в каком формате было бы практичнее?
8 дек 18, 01:40    [21757731]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка > 2.000.000 строк из базы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
TheKLF
куда его лучше записывать для дальнейшего анализа?
Ну такое число записей в CSV наверное глупо выгружать?
Выгружать надо в том виде, в котором вы будете использовать данные.
Возможно и в CSV, почему бы нет? Миллиард записей сохранял без проблем.

TheKLF
Вот подскажите как можно организовать данную работу?
Как лучше выгружать ежедневный результат?
Хотелось бы это сделать в виде скриптов PowerShell (запрос на уникальные значения легко сделать, только куда сохранить 2.200.000 строк не придумал) и как было бы оптимально пересечения списков дневных сделать?

А используя PShell скрипты в каком формате было бы практичнее?
Можно и PowerShell, можно CMD файл сделать, можно SSIS использовать, который, собственно, и сделан для импорта/экспорта/преобразования данных.

Вам, главное, сначала нужно решить, что вы с этими данными будете делать, отсюда будет понятно, в каком виде их нужно выгрузить.
А потом уже можно будет выбрать инструмент для выгрузки.
8 дек 18, 01:49    [21757733]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка > 2.000.000 строк из базы  [new]
TheKLF
Member

Откуда:
Сообщений: 22
Спасибо большое за ответы!

Задача простым языком звучит как поиск уникальных значений в таблице каждого дня, выгрузка этих уникальных значений в файл, запись первого результата в другую базу и затем всё повторять, за исключением того, что выгруженные данные сравнивать с новой базой, и если есть уникальные, то дописывать их в новую базу.

Поиск и накапление уникальных значений в новой базе.
8 дек 18, 06:41    [21757751]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка > 2.000.000 строк из базы  [new]
L_argo
Member

Откуда:
Сообщений: 1212
Даже access может сгодиться. Он очень быстро вкачивает данные и имеет неплохой конструктор запросов.

Желательно избежать этап "выкачать в файл + закачать файл в другую СУБД". Лучше сразу в СУБД.
8 дек 18, 10:44    [21757785]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка > 2.000.000 строк из базы  [new]
TheKLF
Member

Откуда:
Сообщений: 22
А вы не могли бы показать как это можно сделать?
8 дек 18, 12:06    [21757803]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка > 2.000.000 строк из базы  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1723
Оптимальный вариант - создание на этом же SQL Server-e второй базы данных, и SQL-скрипта, который и будет производить "Поиск и накопление уникальных значений в новой базе".

 --Типа вот этих трёх вариантов (сравните производительность скриптов на своей базе и выберите оптимальный):
  --вариант 1
  insert into GrTest2.dbo.CT([CustomerType])
  select distinct [CustomerType]
  FROM [GrTest].[dbo].[TestBig]
  except
  select [CustomerType]
  from Grtest2.dbo.ct

  --вариант 2
  merge GRtest2.dbo.CT as target
  using
  (select distinct [CustomerType] FROM [GrTest].[dbo].[TestBig]) as source
  on target.[CustomerType]=source.[CustomerType]
  when not matched then
  insert ([CustomerType])
  values(source.[CustomerType]);

  --вариант 3
  insert into GrTest2.dbo.CT([CustomerType])
  select distinct [GrTest].[dbo].[TestBig].[CustomerType]
  FROM [GrTest].[dbo].[TestBig]
  left join 
  Grtest2.dbo.ct
  on [GrTest].[dbo].[TestBig].[CustomerType]=Grtest2.dbo.ct.[CustomerType]
  where Grtest2.dbo.ct.[CustomerType] is null
8 дек 18, 12:33    [21757810]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка > 2.000.000 строк из базы  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1723
[GrTest].[dbo].[TestBig] - это таблица-источник, откуда берём значения;
GrTest2.dbo.CT - где храню уникальные значения.

Соответственно, GrTest2.dbo.CT была создана из [GrTest].[dbo].[TestBig] при помощи скрипта
SELECT distinct [CustomerType]
INTO GrTest2.dbo.CT
FROM [GrTest].[dbo].[TestBig]
WHERE [CustomerType] =1
8 дек 18, 12:38    [21757811]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка > 2.000.000 строк из базы  [new]
TheKLF
Member

Откуда:
Сообщений: 22
Спасибо большое!
К сожалению на том сервере сделать ничего нельзя. С него можно считывать, а накопление делать на другой физической машине. Поэтому и нужно через некий файл-выгрузка это делать.
Нашли уникальные -- записали результат в файл -- перенесли его на другую машину и там уже выполняем анализ полученных результатов.
8 дек 18, 17:29    [21757947]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка > 2.000.000 строк из базы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
TheKLF
К сожалению на том сервере сделать ничего нельзя. С него можно считывать, а накопление делать на другой физической машине. Поэтому и нужно через некий файл-выгрузка это делать.
Нашли уникальные -- записали результат в файл -- перенесли его на другую машину и там уже выполняем анализ полученных результатов.
Так можно писать сразу на другой сервер.
Ведь эти запросы, которые вам написали, они могут писать в базу на другом сервере, причём запросы могут там и выполняться, и запускаться там по расписанию.

Или, если вы сделаете пакет SSIS, он тоже может сразу брать данные с одного сервера, и писать на другой.

Не обязательно делать всё это через файл
Хотя я так делал, когда к другому серверу был доступ только по FTP. В этом случае для записи в файл лучше выбрать native-формат, и ещё можно его сжимать, если сетка медленная.
8 дек 18, 17:40    [21757957]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка > 2.000.000 строк из базы  [new]
TheKLF
Member

Откуда:
Сообщений: 22
У меня мсожалению есть только одна возможность это сделать выгрузку. Больше никаких операций я делать не могу.
И вариант с промежуточным файлом самый реальный для моей задачи.
8 дек 18, 20:26    [21758104]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка > 2.000.000 строк из базы  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1723
Второй сервер или хотя бы простой комп с установленным SQL Server-ом на нём есть? Или доступен только какой-нибудь Access?
8 дек 18, 20:29    [21758109]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка > 2.000.000 строк из базы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
TheKLF
У меня мсожалению есть только одна возможность это сделать выгрузку. Больше никаких операций я делать не могу.
И вариант с промежуточным файлом самый реальный для моей задачи.
Ну, тогда через файл. В общем, это неважно, для такой микроскопической выгрузки.

Изучите утилиту BCP (идёт в комплекте с любым MSSQL), прочитайте обе страницы описания, выгружайте в native-формате
Сначала ей выгрузите данные в файл, потом ей же и загрузите на сервер назначения.
Но можно и в CSV формате, если вам нужно кому то отдать этот файл именно в нём, тоже не проблема.
9 дек 18, 12:28    [21758389]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка > 2.000.000 строк из базы  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7758
TheKLF,

выгрузкой таких объемов Вы, с какой-то вероятностью нарушите работу пользователей той базы. Если использовать "грязные чтения" для уменьшения влияния, то есть риск получить недостоверные данные.

Без определенного вмешательства в настройки сервера и базы качественно эту задачу Вы не решите.
10 дек 18, 12:32    [21758984]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка > 2.000.000 строк из базы  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
TheKLF
У меня мсожалению есть только одна возможность это сделать выгрузку. Больше никаких операций я делать не могу.
И вариант с промежуточным файлом самый реальный для моей задачи.
Это простите чем продиктовано? На том серевере это будет просто SELECT, а вот писать результаты вы можете куда угодно, хоть в файл, хоть сразу на другой сервер. Просто непонятно зачем промежуточные файлы плодить? У вас доступ только по ftp что-ли?
11 дек 18, 03:09    [21759737]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить