Чтение файла JSON в таблицу - PullRequest
1 голос
/ 10 октября 2019

Я пытаюсь прочитать файлы JSON из местоположения и записать в таблицу сервера SQL. Файлы в местоположении меняются каждый день, поэтому мне может понадобиться найти динамический способ выбора имени файла.

Я пытался использовать OPENROWSET, однако я прочитал, что не могу параметризовать имя местоположенияс этим. Я пытался использовать OPENROWSET с динамическим запросом, но я получаю сообщение об ошибке, что местоположение файла не может быть найдено. После прочтения кажется, что это может быть проблема с правами доступа к папке.

Что я не пытаюсь и надеюсь получить помощь, так это то, как я могу прочитать текстовый файл JSON и записать данные в таблицу, а затем могуиспользуйте функцию OPENJSON оттуда.

Может кто-нибудь помочь мне с тем, как я могу загрузить сервер SQL с данными JSON в какой-то тип BLOB-объекта, используя T-SQL или SSIS.

Ответы [ 3 ]

1 голос
/ 23 октября 2019

- Массовый импорт данных из файла

Select BulkColumn from openrowset(Bulk'D:\home\HS\HS-Web\wwwroot\Json files\test.json',single_blob)JSON;

- Просмотр импортированных данных из Массового импорта в виде одного столбца

DECLARE @TestDetails VARCHAR(MAX)
SELECT @TestDetails = BulkColumn FROM 
OPENROWSET(BULK'D:\Omkar\Projects\HS\Documents\test.json', SINGLE_BLOB) JSON;

SELECT @TestDetails as SingleRow_Column

- Проверка правильности импортированных данных. или нет, если = 1 данные действительны

if(ISJSON(@TestDetails)=1)
BEGIN
PRINT 'Valid Data Imported'
END
ELSE
BEGIN
PRINT 'Invalid Data Imported'
END
GO

- Теперь выберите Данные для добавления в таблицу здесь. $ .tests - имя объекта массива

SELECT testCode,Test,Method FROM OPENJSON(@TestDetails, '$.Tests')
WITH(
testCode nvarchar(50)'$.testCode',
Test nvarchar(50)'$.Test',
Method nvarchar(50)'$.Method'
)

- Теперь вставьте данные втаблица, если значения по умолчанию должны быть вставлены, то в select принимают значение по умолчанию

Insert into TestDetails(Active,CreatedDate,testCode,Test,Method)
SELECT '1','2019-10-23 06:01:10.7927233',testCode,Test,Method FROM 
OPENJSON(@TestDetails, '$.Tests')
WITH(
testCode nvarchar(50)'$.testCode',
Test nvarchar(50)'$.Test',
Method nvarchar(50)'$.Method'
)[Json file Screen Shot][1]
0 голосов
/ 10 октября 2019

Убедитесь, что к файлу можно получить доступ с помощью SQL

IF OBJECT_ID('tempdb..#JsonFile') IS NOT NULL
DROP TABLE #JsonFile;

CREATE TABLE #JsonFile
    (
        [JsonLine] NVARCHAR(MAX)
    );

BULK INSERT #JsonFile
FROM '\\UNC_path\file.json'
WITH ( ROWTERMINATOR = '' );

SELECT *
FROM   #JsonFile;
0 голосов
/ 10 октября 2019

Так что, если я правильно понял, ваша проблема не в том, как прочитать JSON, а в том, как получить файл?

Как вы выяснили, любое взаимодействие с файловой системой из SQL-Сервер (T-SQL) может быть очень сложным. SQL-сервер ограничен для своего пользователя и будет видеть свою собственную машину. Таким образом, путь на C:\ может быть не тем, который вы ожидали.

Однако, прежде чем возиться с разрешениями, Kerberos для , действующий как -аутентификация, и общие пути, которые я бы предложил создатьпромежуточная таблица, например:

CREATE TABLE dbo.JSONImport_staging
                           (ID INT IDENTITY CONSTRAINT PK_JSONImport_staging PRIMARY KEY
                           ,ImportDate DATETIME2 NOT NULL CONSTRAINT DF_JSONImport_staging_ImportDate DEFAULT(SYSUTCDATETIME())
                           ,FileLocation NVARCHAR(1000) NULL
                           ,Content NVARCHAR(MAX) NULL
                           ,ProcessedOn DATETIME2 NULL
                           ,Success BIT NULL);

И использовать один из многих подходов, которые вы найдете в сети, для хранения данных в такой таблице

  • PowerShell (что-то )по этому )
  • Любой язык программирования на ваш выбор
  • SSIS
  • и многие другие

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

Как всегда в таких случаях:

  • Сохраните промежуточную таблицу как можно более открытой, универсальной и устойчивой к ошибкам.
  • Делайте любые проверки целостности, преобразование и обработку транзакций безопасными на пути между промежуточной таблицей и целевыми таблицами. ,
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...