Задать вопрос
drno-reg
@drno-reg
см не кратко

Как правильно посчитать количество строк в CSV при field larger than field limit (131072)?

Здравствуйте.

Необходимо из Oracle перегнать данные в Vertica.
Решил воспользоваться через CSV файл, т.к. Vertica достаточно быстро их грузит.
На тестовых таблицах все без проблем.

Принятся работать с боевой схемой, все бы хорошо, НО по статистики из Oracle в CSV ушло 40 000 строк, после загрузки в Vertica оказалось на 300 меньше.
Ни ошибок ни чего.
Хочу разобраться почему так происходит, не нашел друго варианта кроме как посчитать количество строк в CSV файле, по идее их должно быть 40 0000.

вроде бы должно быть все тривиально,

with open(filename,"r", encoding='UTF8') as f:
    reader = csv.reader(f,delimiter = ";")
    data = list(reader)
    row_count = len(data)
print(row_count)


НО уперся в ограничение

data = list(reader)
_csv.Error: field larger than field limit (131072)


какие есть варианты обойти это узкое место или другие методы решения?
  • Вопрос задан
  • 2529 просмотров
Подписаться 1 Оценить 3 комментария
Решения вопроса 1
Astrohas
@Astrohas
Python/Django Developer
Посчитать количество \n в файле?
UPD:
Подсмотрел у симтрикса
import sys
import csv

csv.field_size_limit(sys.maxsize)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
drno-reg
@drno-reg Автор вопроса
см не кратко
благодарю всех,

рабочий вариант учитывающий все особенности у sim3x

import sys
import csv
maxInt = sys.maxsize
decrement = True

while decrement:
    # decrease the maxInt value by factor 10
    # as long as the OverflowError occurs.

    decrement = False
    try:
        csv.field_size_limit(maxInt)
    except OverflowError:
        maxInt = int(maxInt/10)
        decrement = True

with open(filename,"r", encoding='UTF8') as f:
    reader = csv.reader(f,delimiter = ";")
    data = list(reader)
    row_count = len(data)
print(row_count/2)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы