Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Загрузка данных из большого файла / 25 сообщений из 36, страница 1 из 2
19.05.2020, 09:47
    #39959265
estro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из большого файла
Доброго времени суток.
Работаем с СУБД Оракл много лет, но тут принесли файл, сказали дамп базы, размером в 43 гигабайта и сказали нужно в этом дампе найти все данные по нескольким организациям. Файл текстовый, с расширением sql такого вида:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
USE [prdb]
GO
/****** Object: Table [dbo].[Address] Script Date: 18.01.2020 13:39:49 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Address](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[PostCode] [nvarchar](6) NULL,
[Text] [nvarchar](150) NULL,
CONSTRAINT [PK_Address] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[Organ] Script Date: 18.01.2020 13:39:49 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Organ](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[Text] [nvarchar](2000) NULL,
[Inn] [nvarchar](20) NOT NULL,
[Date] [datetimeoffset](7) NULL,
[Status] [int] NOT NULL,
[Type] [int] NOT NULL,
CONSTRAINT [PK_Organ] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
--и другие таблицы, описанные подобным образом
SET IDENTITY_INSERT [dbo].[Address] ON

INSERT [dbo].[Address] ([Id], [PostCode], [Text]) VALUES (1, N'4000000', N'Ленина 27')
--и другие подобные строки на 43 гигабайта, на разные таблицы. Таблицы заполняются по очереди.



Никаких объяснений по файлу нет.
Судя по OPTIMIZE_FOR_SEQUENTIAL_KEY это Ms sql 2019. У нас имеется развернутый в свое время сервер БД MS sql 2016 Enterprise, но использовать его так и не пришлось и человек, кто этим занимался уволился, поэтому задание поручили мне.
Вопрос, каким образом загрузить данные этого файла в БД? В SSMS ничего подобного не нашел. Может можно как то выполнить этот sql запрос, чем он по сути и является, но не получается это сделать, слишком большой размер.
Поиском пользовался, но ничего подобного не нашел.
Спасибо за помощь.
...
Рейтинг: 0 / 0
19.05.2020, 09:52
    #39959266
NORT96
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из большого файла
Пробуй грузить кусочками
...
Рейтинг: 0 / 0
19.05.2020, 09:53
    #39959267
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из большого файла
...
Рейтинг: 0 / 0
19.05.2020, 10:02
    #39959272
estro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из большого файла
invm,
Спасибо, попробую, но только завтра и отпишусь, уверен был, что есть что-то подобное, как в Oracle.
...
Рейтинг: 0 / 0
19.05.2020, 10:22
    #39959283
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из большого файла
estro,

Можно взять grep и ничего никуда не грузить. Судя по [dbo].[Organ] sql тебе ничем не поможет. Общую структуру только понять надо.

Ставишь cygwin/wsl/linux и делаешь
grep "<строчка-которую-надо-найти>" файл-в-котором-ищешь > файл-в-который-сохранить-результат
...
Рейтинг: 0 / 0
19.05.2020, 10:25
    #39959287
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из большого файла
estro
человек, кто этим занимался уволилс

Это он не спроста.
...
Рейтинг: 0 / 0
19.05.2020, 11:47
    #39959339
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из большого файла
estro,

Залить файл можно из командной строки используя sqlcmd
https://docs.microsoft.com/en-us/sql/tools/sqlcmd-utility?view=sql-server-ver15

Поскольку в файле упомянуты фичи от 2019, то можно их убрать перед первым запуском.
Базу лучше перевести в SIMPLE режим, чтобы лог не раздувался.

Полагаю, что потребуется несколько попыток, чтобы залилось успешно.
...
Рейтинг: 0 / 0
19.05.2020, 11:59
    #39959357
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из большого файла
estro,

файл можно попробовать выполнить с помощью SQLCMD.EXE. Большой может не поместиться в буфере SSMS.
...
Рейтинг: 0 / 0
19.05.2020, 12:18
    #39959371
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из большого файла
komrad
Поскольку в файле упомянуты фичи от 2019, то можно их убрать перед первым запуском.


поставить временный 2019 инстанс будет всяко быстрее
...
Рейтинг: 0 / 0
19.05.2020, 12:34
    #39959387
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из большого файла
Критик
komrad
Поскольку в файле упомянуты фичи от 2019, то можно их убрать перед первым запуском.


поставить временный 2019 инстанс будет всяко быстрее

В общем - да, но всё зависит от возможностей автора - есть ли куда ставить, захочет ли морочиться и т.п.
...
Рейтинг: 0 / 0
19.05.2020, 12:54
    #39959405
Нестандартное мышление
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из большого файла
estro,



По мне так проще сделать скрипт и распарсить этот запрос в CSV файл и пульнуть BULK'ом в таблицу
...
Рейтинг: 0 / 0
19.05.2020, 13:38
    #39959445
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из большого файла
Сначала надо убедиться, что в файле все корректно подготовлено, что не факт. Пролистать пару десятков страниц в толковом редакторе на предмет паразитного переноса строки, корректных кавычек, дат и т.д.
Потом можно наваять простую прогу, которая будет построчно оттуда вычитывать и выполнять.

Готовые решения под подобные задачи на редкость унылы.
...
Рейтинг: 0 / 0
19.05.2020, 14:00
    #39959459
Нестандартное мышление
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из большого файла
L_argo,

Паразитные строки скриптом игнорить
Обработчик грамотный нужен.
Но согласен, решение сложное.
...
Рейтинг: 0 / 0
19.05.2020, 15:07
    #39959523
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из большого файла
L_argo
Сначала надо убедиться, что в файле все корректно подготовлено, что не факт. Пролистать пару десятков страниц в толковом редакторе на предмет паразитного переноса строки, корректных кавычек, дат и т.д.
Потом можно наваять простую прогу, которая будет построчно оттуда вычитывать и выполнять


Решение должно быть эффективным с точки зрения затрат времени, и уж явно разработка дополнительного ПО не является правильным путём решения задачи)
...
Рейтинг: 0 / 0
19.05.2020, 15:37
    #39959543
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из большого файла
Критик
и уж явно разработка дополнительного ПО не является правильным путём решения задачи)
Ну как сказать... Правильным, если задача будет успешно решена. В том числе повторно.

Может получиться, что без дополнительного ПО придется долго плясать с бубном. И в ручном режиме кое-как медленно и печально выполнить задачу. Без возможности быстрого повторения.

Тем более, что такая прога пишется за полчаса. И на подготовку данных для нее вообще ничего не надо. Просто скормить файл и получить наполненные таблицы.
...
Рейтинг: 0 / 0
19.05.2020, 17:37
    #39959610
Нестандартное мышление
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из большого файла
Критик
L_argo
Сначала надо убедиться, что в файле все корректно подготовлено, что не факт. Пролистать пару десятков страниц в толковом редакторе на предмет паразитного переноса строки, корректных кавычек, дат и т.д.
Потом можно наваять простую прогу, которая будет построчно оттуда вычитывать и выполнять


Решение должно быть эффективным с точки зрения затрат времени, и уж явно разработка дополнительного ПО не является правильным путём решения задачи)


С таким подходом предлагаю распечатать файл на бумаге в ворде и посадить оператора вводить данные вручную.

Эффект 146%
...
Рейтинг: 0 / 0
19.05.2020, 18:37
    #39959632
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из большого файла
L_argo
Потом можно наваять простую прогу, которая будет построчно оттуда вычитывать и выполнять.
Разве SQLCMD не делает это?
По моему, у неё нет ограничений на размер файла.
...
Рейтинг: 0 / 0
19.05.2020, 23:27
    #39959713
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из большого файла
estro,

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

Хорошо бы иметь запросы, которые делались к этой базе.

ИМХО я бы сначала прошерстил файл в текстовом виде (нужен хороший редактор, например консольный) на предмет какие там таблицы/объекты, потом бы развернул нужные таблицы, возможно не в полном объёме, и там уже смотреть по месту.
...
Рейтинг: 0 / 0
20.05.2020, 00:29
    #39959725
Relic Hunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из большого файла
estro
принесли файл, сказали дамп базы, размером в 43 гигабайта и сказали нужно в этом дампе найти все данные по нескольким организациям. Файл текстовый, с расширением sql такого вида:
Да уж, тот кто создал этот файл троль был знатный)))
...
Рейтинг: 0 / 0
20.05.2020, 09:14
    #39959764
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из большого файла
Нестандартное мышление
С таким подходом предлагаю распечатать файл на бумаге в ворде и посадить оператора вводить данные вручную.
Эффект 146%
Это бла-бла-бла поумничать ниачомъ.
Мой опыт показывает, что такой подход работает. Мне попадались разные файлы с данными. И часто приходилось к ним делать "индивидуальный подход", т.к. стандартные инструменты откровенно пасовали.
В этих файлах встречались: глючные строки, разделители, форматы, разнородные форматы (н-р дат или чисел), автозамены каких-то спецсимволов, мягкие переносы, двойные переносы, БОМы, хаос с кавычками и т.д.

Помню встретился в теле файла древний символ "конец данных". Не помню его аски-номера, но был такой. Стандартный импорт тупо стопорил на этом символе, а текстовый редактор его показывал обычным пробелом. Пришлось призадуматься. Благо, что нашел и все зашло стандартно.

"А ты говоришь купаться — вода холодная" (с)
...
Рейтинг: 0 / 0
20.05.2020, 12:26
    #39959816
estro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из большого файла
Всем спасибо, сегодня вышел на работу и занялся загрузкой этого файла через sqlcmd, все скушало, но загрузив чуть более 5 млн. строк (это около 5 %) все встало из за ошибки "105 уровень 15 незакрытие строки в конце символьной строки", а это печаль и боль.
Неужели нельзя игнорировать эти ошибки? Ну не смогла строчку загрузить, пусть дальше идет!
Таблиц всего 5 и найти связи между ними можно, id у всех есть.
Парсить файл не хотелось бы, но видимо придется или нет?
...
Рейтинг: 0 / 0
20.05.2020, 12:28
    #39959817
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из большого файла
estro
Неужели нельзя игнорировать эти ошибки?
Нельзя. Это ошибка компиляции, а не выполнения.

Можете написать простенький парсер, который разобьет исходный файл на множество мелких по разделителю "go"
Потом последовательно их в цикле выполнять.
Так править подобные ошибки будет намного легче.
...
Рейтинг: 0 / 0
20.05.2020, 12:30
    #39959818
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из большого файла
estro
Парсить файл не хотелось бы, но видимо придется или нет?

Да выбери что надо grep'ом на коленке, что ты мучаешься? Если там всего 5 таблиц. Найди idшники нужные и вперёд.
...
Рейтинг: 0 / 0
20.05.2020, 12:31
    #39959819
estro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из большого файла
crutchmaster,

grep не поможет, id повторяются, не уникальные для всей БД. Я пробовал в тотале по f3 искать так, тяжело и не интересно. :)
...
Рейтинг: 0 / 0
20.05.2020, 12:37
    #39959822
estro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка данных из большого файла
Критик,
22135663
Mssql 2016 тоже должен все это скушать, кроме этого ключа, остальное создалось норм.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Загрузка данных из большого файла / 25 сообщений из 36, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]