Можно ли загрузить только первые 10 строк файла CSV с помощью MySQL - LOAD DATA LOCAL INFILE?

Можно ли загрузить только первые 10 строк файла CSV с помощью MySQL - LOAD DATA LOCAL INFILE? Я пытался использовать LIMIT, но это не работает.

Вот мой PHP-скрипт:

    $sql = "LOAD DATA LOCAL INFILE '".@mysql_escape_string($this->file_name).
         "' INTO TABLE branches
              FIELDS TERMINATED BY ',' ENCLOSED BY '\"'
              LINES TERMINATED BY '\r\n'
              IGNORE 1 LINES                  
              (
                Name,
                Address_Line_1, 
                City, 
                State, 
                Country_Code,
                Postal_Code, 
                Main_Phone, 
                Google_Places_Link, 
                Custom_Directory_1, 
                Custom_Directory_2, 
                Custom_Directory_3,  
                business_id,
                username
              ) SET branches.business_id=(".$this->business_id."), branches.username=('".$this->username."') LIMIT 0,10  
              ";

person sai    schedule 19.02.2013    source источник
comment
с помощью LOAD DATA .. НЕТ, другими способами, да   -  person    schedule 20.02.2013
comment
Запустить этот первый head -n 11 myfile.sql > myfile_first_11_lines.sql и загрузить более короткий файл?   -  person John Carter    schedule 20.02.2013


Ответы (2)


Согласно последней документации mysql https://dev.mysql.com/doc/refman/8.0/en/load-data.html:

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    [CHARACTER SET charset_name]
    [{FIELDS | COLUMNS}
        [TERMINATED BY 'string']
        [[OPTIONALLY] ENCLOSED BY 'char']
        [ESCAPED BY 'char']
    ]
    [LINES
        [STARTING BY 'string']
        [TERMINATED BY 'string']
    ]
    [IGNORE number {LINES | ROWS}]
    [(col_name_or_user_var
        [, col_name_or_user_var] ...)]
    [SET col_name={expr | DEFAULT},
        [, col_name={expr | DEFAULT}] ...]

нет способа/команды, которая может сделать то, что вы хотите.

person step    schedule 05.10.2018

Приведенное ниже решение обеспечивает поведение в стиле LIMIT для LOAD DATA INFILE. Используйте IGNORE n LINES и установите общее количество строк — любое небольшое число, которое вы хотите протестировать.

Это не экономит на сканировании файлов, не элегантно и работает в обратном направлении (буквально). Но для таблиц умеренной длины менее миллиона строк, для меня это полезно для тестирования. (Это может работать для гораздо больших таблиц, но у меня не было возможности проверить это.)

Например, последние 20 строк большой таблицы со 101 773 строками будут

LOAD DATA INFILE 'c:/temp/input/datafile.csv'
    -- IGNORE
    INTO TABLE `mytable`
    
    CHARACTER SET utf8mb4
    FIELDS  TERMINATED BY '\t' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '\b'
    LINES TERMINATED BY '\r\n'
    IGNORE 101753 LINES
person wistlo    schedule 21.03.2021