Выбрать с помощью большого JSONPython

Программы на Python
Anonymous
Выбрать с помощью большого JSON

Сообщение Anonymous »

Я тестирую etl в Python, когда я извлекаю массив json из одной таблицы, чтобы затем сопоставить его с другой, изначально он содержит более 60 000 символов, но возвращает один из более чем 5000, поэтому, когда я вставляю его, он отображается в другая таблица пропускает записи. Я думаю, что библиотека (psycopg2) или сервер базы данных (postgre) не могут обрабатывать такие большие строки. Какое решение может быть?
Запрос такой:

Код: Выделить всё

SELECT json as new FROM {config.JDATA_TABLE}
ORDER by timeinstant DESC
Чтобы вставить это время:
INSERT INTO {config.AVERAGES_EST_MAGN_TABLE} (
код станции, год, месяц, день, час, момент времени, магнитуда, valuecams, идентификатор станции, величинаид, часутк, часутксис, идентификатор объекта)

Код: Выделить всё

SELECT DISTINCT LPAD(D.stationcode, 8,'0'), D.year::float8, D.month::float8, D.day::float8, D.hour::float8, D.timeinstant, D.magnitude, D.valuecams::float8, D.shortcodestation, D.magnitudeid, D.hourutc, D.hourutcsys, D.entityid
FROM (
SELECT DISTINCT stationcode,year, month, day, hour,
to_timestamp(day || '/' || month || '/' || year || ' ' || hour, 'DD/MM/YYYY HH24:MI') timeinstant,
magnitude, coalesce(valuecams::float8, 0) valuecams,
E.shortcodestation, CASE magnitude
WHEN 'NO2' THEN '008'
WHEN 'PM2.5' THEN '009'
WHEN 'PM10' THEN '010'
WHEN 'O3' THEN '014'
ELSE NULL
END AS magnitudeid
,
TO_TIMESTAMP(TO_CHAR(TO_TIMESTAMP(day || '/' || month || '/' || year || ' ' || hour, 'DD/MM/YYYY HH24:MI:SS') AT TIME ZONE 'UTC', 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') AS hourutc,
TO_TIMESTAMP(TO_CHAR(TO_TIMESTAMP(day || '/' || month || '/' || year || ' ' || hour, 'DD/MM/YYYY HH24:MI:SS') AT TIME ZONE 'UTC', 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') AS hourutcsys,
stationcode || magnitude || year || month ||day || hour as entityid
FROM (
SELECT t.*
FROM (SELECT DISTINCT
data->>'cod_estacion' AS stationcode,
data->>'anno' AS year,
data->>'mes' AS month,
data->>'dia' AS day,
data->>'hora' AS hour,
data->>'magnitud' AS magnitude,
data->>'valor_cams' AS valuecams
FROM jsonb_array_elements('{str(inserted_data).replace("'",'"')}'::jsonb) AS data) t
) DE
LEFT JOIN {config.STATION_TABLE} E
ON LPAD(DE.stationcode, 8,'0') = E.europeancode
) D
WHERE NOT EXISTS (
SELECT 1
FROM (
SELECT DISTINCT stationcode, year, month, day, hour, magnitude, valuecams
FROM (
SELECT DISTINCT
data->>'cod_estacion' AS stationcode,
data->>'anno' AS year,
data->>'mes' AS month,
data->>'dia' AS day,
data->>'hora' AS hour,
data->>'magnitud' AS magnitude,
data->>'valor_cams' AS valuecams
FROM jsonb_array_elements('{str(inserted_data).replace("'",'"')}'::jsonb) AS data
)t
) D, {config.AVERAGES_EST_MAGN_TABLE} PDB
WHERE PDB.stationcode = LPAD(D.stationcode, 8,'0')
AND PDB.year = D.year::float8
AND PDB.month = D.month::float8
AND PDB.day = D.day::float8
AND PDB.hour = D.hour::float8
AND PDB.magnitude = D.magnitude
);
Структура таблиц, к которым нужно обращаться, аналогична структуре изображения.
Я хочу получить весь json, а затем сопоставить его с другой таблицей< /п>

Подробнее здесь: https://stackoverflow.com/questions/786 ... large-json

Вернуться в «Python»