Импорт CSV
Примеры
В следующих примерах используется файл flights.csv.
Чтение CSV-файла из диска, автоматическое определение параметров:
SELECT * FROM 'flights.csv';
Использование функции read_csv с настраиваемыми параметрами:
SELECT *
FROM read_csv('flights.csv',
delim = '|',
header = true,
columns = {
'FlightDate': 'DATE',
'UniqueCarrier': 'VARCHAR',
'OriginCityName': 'VARCHAR',
'DestCityName': 'VARCHAR'
}); Чтение CSV из стандартного ввода, автоматическое определение параметров:
cat flights.csv | duckdb -c "SELECT * FROM read_csv('/dev/stdin')" Чтение CSV-файла в таблицу:
CREATE TABLE ontime (
FlightDate DATE,
UniqueCarrier VARCHAR,
OriginCityName VARCHAR,
DestCityName VARCHAR
);
COPY ontime FROM 'flights.csv'; В качестве альтернативы можно создать таблицу без ручного указания схемы, используя оператор CREATE TABLE .. AS SELECT:
CREATE TABLE ontime AS
SELECT * FROM 'flights.csv'; Мы можем использовать синтаксис FROM-первый синтаксис, чтобы опустить SELECT *.
CREATE TABLE ontime AS
FROM 'flights.csv'; Запись результата запроса в CSV-файл.
COPY (SELECT * FROM ontime) TO 'flights.csv' WITH (HEADER, DELIMITER '|');
Если мы сериализуем всю таблицу, мы можем просто обратиться к ней по имени.
COPY ontime TO 'flights.csv' WITH (HEADER, DELIMITER '|');
Загрузка CSV
Загрузка CSV, т.е. импорт CSV-файлов в базу данных, является очень распространенной, но и довольно сложной задачей. Хотя CSV-файлы кажутся простыми на первый взгляд, в них часто встречаются несоответствия, которые могут затруднить их загрузку. CSV-файлы бывают самых разных типов, часто повреждены и не имеют схемы. Читатель CSV должен справляться со всеми этими различными ситуациями.
Читатель CSV DuckDB может автоматически определить используемые флаги конфигурации, проанализировав CSV-файл с помощью анализатора CSV. Это будет работать правильно в большинстве случаев и должно быть первым вариантом. В редких случаях, когда читатель CSV не может определить правильную конфигурацию, можно вручную настроить читатель CSV для правильного парсинга CSV-файла. Подробнее об этом см. на странице автоматического определения.
Параметры
Ниже приведены параметры, которые можно передать читателю CSV. Эти параметры принимаются функцией read_csv. Однако не все параметры принимаются оператором COPY.
| Имя | Описание | Тип | Значение по умолчанию |
|---|---|---|---|
all_varchar | Опция для пропуска обнаружения типа при разборе CSV и предположения, что все столбцы имеют тип VARCHAR. Эта опция поддерживается только функцией read_csv. | BOOL | false |
allow_quoted_nulls | Опция, позволяющая преобразовывать значения в кавычках в значения типа NULL | BOOL | true |
auto_detect | Включает автоматическое обнаружение параметров CSV. | BOOL | true |
auto_type_candidates | Эта опция позволяет указать типы, которые будет использовать сканер при обнаружении типов столбцов CSV. Тип VARCHAR всегда включён в обнаруженные типы (как резервный вариант). См. пример. | TYPE[] | типы по умолчанию |
columns | Структура, которая определяет имена столбцов и типы столбцов, содержащихся в файле CSV (например, {'col1': 'INTEGER', 'col2': 'VARCHAR'}). Использование этой опции подразумевает, что автоматическое обнаружение не используется. | STRUCT | (пусто) |
compression | Тип сжатия файла. По умолчанию он определяется автоматически из расширения файла (например, t.csv.gz будет использовать gzip, а t.csv будет использовать none). Доступные опции: none, gzip, zstd. | VARCHAR | auto |
dateformat | Указывает формат даты для разбора дат. См. Формат даты. | VARCHAR | (пусто) |
decimal_separator | Десятичный разделитель чисел. | VARCHAR | . |
delimiter | Указывает разделитель символов, разделяющий столбцы в каждой строке (строке) файла. Псевдоним для sep. Эта опция доступна только в операторе COPY. | VARCHAR | , |
delim | Указывает разделитель символов, разделяющий столбцы в каждой строке (строке) файла. Псевдоним для sep. | VARCHAR | , |
escape | Указывает строку, которая должна появляться перед последовательностью символов данных, соответствующей значению quote. | VARCHAR | " |
filename | Нужно ли включать дополнительный столбец filename в результат. | BOOL | false |
force_not_null | Не сравнивать значения указанных столбцов со строкой NULL. В стандартном случае, когда строка NULL пустая, это означает, что пустые значения будут читаться как строки нулевой длины, а не как NULL. | VARCHAR[] | [] |
header | Указывает, что файл содержит заголовок с именами каждого столбца в файле. | BOOL | false |
hive_partitioning | Интерпретировать ли путь как путь Hive с разбиением. | BOOL | false |
ignore_errors | Опция для игнорирования любых ошибок разбора и игнорирования строк с ошибками вместо этого. | BOOL | false |
max_line_size | Максимальный размер строки в байтах. | BIGINT | 2097152 |
names | Имена столбцов в виде списка, см. пример. | VARCHAR[] | (пусто) |
new_line | Установить новый символ(ы) новой строки в файле. Доступные варианты: '\r', '\n', или '\r\n'. Обратите внимание, что парсер CSV различает только разделители строк из одного и двух символов. Поэтому он не различает '\r' и '\n' | VARCHAR | (пусто) |
normalize_names | Булевое значение, указывающее, нужно ли нормализовать имена столбцов, удаляя из них все символы, не являющиеся буквенно-цифровыми. | BOOL | false |
null_padding | Если эта опция включена, при отсутствии столбцов в строке, оставшиеся столбцы справа будут заполнены значениями null. | BOOL | false |
nullstr | Указывает строку, представляющую значение NULL или (с версии v0.10.2) список строк, представляющих значение NULL. |
VARCHAR или VARCHAR[]
| (пусто) |
parallel | Используется ли параллельный читатель CSV. | BOOL | true |
quote | Указывает строку, используемую для выделения значения данных, заключённого в кавычки. | VARCHAR | " |
sample_size | Количество образцовых строк для автоматического обнаружения параметров. | BIGINT | 20480 |
sep | Указывает разделитель символов, разделяющий столбцы в каждой строке (строке) файла. Псевдоним для delim. | VARCHAR | , |
skip | Количество строк в начале файла, которые нужно пропустить. | BIGINT | 0 |
timestampformat | Указывает формат даты для разбора временных меток. См. Формат даты. | VARCHAR | (пусто) |
types или dtypes
| Типы столбцов в виде списка (по позиции) или структуры (по имени). Пример здесь. |
VARCHAR[] или STRUCT
| (пусто) |
union_by_name | Объединять ли столбцы из нескольких схем по имени, а не по позиции. Обратите внимание, что использование этой опции увеличивает потребление памяти. | BOOL | false |
auto_type_candidates Подробности
Опция auto_type_candidates позволяет указать типы данных, которые должен учитывать читатель CSV при обнаружении типов данных столбцов. Пример использования:
SELECT * FROM read_csv('csv_file.csv', auto_type_candidates = ['BIGINT', 'DATE']); Значение по умолчанию для опции auto_type_candidates равно ['SQLNULL', 'BOOLEAN', 'BIGINT', 'DOUBLE', 'TIME', 'DATE', 'TIMESTAMP', 'VARCHAR'].
Функции CSV
Модуль read_csv автоматически пытается определить правильную конфигурацию ридера CSV, используя анализатор CSV. Он также автоматически определяет типы столбцов. Если файл CSV содержит заголовок, он будет использовать имена из этого заголовка для именования столбцов. В противном случае столбцы будут именоваться column0, column1, column2, .... Пример с файлом flights.csv:
SELECT * FROM read_csv('flights.csv'); | FlightDate | UniqueCarrier | OriginCityName | DestCityName |
|---|---|---|---|
| 1988-01-01 | AA | New York, NY | Los Angeles, CA |
| 1988-01-02 | AA | New York, NY | Los Angeles, CA |
| 1988-01-03 | AA | New York, NY | Los Angeles, CA |
Путь может быть относительным (относительно текущего каталога) или абсолютным.
Мы также можем использовать read_csv для создания постоянной таблицы:
CREATE TABLE ontime AS
SELECT * FROM read_csv('flights.csv');
DESCRIBE ontime; | column_name | column_type | null | key | default | extra |
|---|---|---|---|---|---|
| FlightDate | DATE | YES | NULL | NULL | NULL |
| UniqueCarrier | VARCHAR | YES | NULL | NULL | NULL |
| OriginCityName | VARCHAR | YES | NULL | NULL | NULL |
| DestCityName | VARCHAR | YES | NULL | NULL | NULL |
SELECT * FROM read_csv('flights.csv', sample_size = 20_000); Если мы явно зададим delim/sep, quote, escape, или header , мы можем обойти автоматическое определение этого параметра:
SELECT * FROM read_csv('flights.csv', header = true); Несколько файлов можно прочитать одновременно, указав шаблон или список файлов. Дополнительную информацию см. в разделе нескольких файлов.
Запись с помощью инструкции COPY
Инструкцию COPY можно использовать для загрузки данных из файла CSV в таблицу. Эта инструкция имеет тот же синтаксис, что и в PostgreSQL. Чтобы загрузить данные с помощью инструкции COPY , необходимо сначала создать таблицу с правильной схемой (которая соответствует порядку столбцов в файле CSV и использует типы, соответствующие значениям в файле CSV). COPY автоматически определяет параметры конфигурации CSV.
CREATE TABLE ontime (
flightdate DATE,
uniquecarrier VARCHAR,
origincityname VARCHAR,
destcityname VARCHAR
);
COPY ontime FROM 'flights.csv';
SELECT * FROM ontime; | flightdate | uniquecarrier | origincityname | destcityname |
|---|---|---|---|
| 1988-01-01 | AA | New York, NY | Los Angeles, CA |
| 1988-01-02 | AA | New York, NY | Los Angeles, CA |
| 1988-01-03 | AA | New York, NY | Los Angeles, CA |
Если мы хотим вручную указать формат CSV, мы можем сделать это, используя параметры конфигурации COPY.
CREATE TABLE ontime (flightdate DATE, uniquecarrier VARCHAR, origincityname VARCHAR, destcityname VARCHAR); COPY ontime FROM 'flights.csv' (DELIMITER '|', HEADER); SELECT * FROM ontime;
Чтение поврежденных файлов CSV
DuckDB поддерживает чтение поврежденных файлов CSV. Подробнее см. на странице Чтение поврежденных файлов CSV.
Ограничения
Ридер CSV поддерживает только файлы с кодировкой символов UTF-8. Для файлов CSV с другими кодировками используйте, например, командную утилиту iconv для преобразования их в UTF-8. Например:
iconv -f ISO-8859-2 -t UTF-8 input.csv > input-utf-8.csv
Сохранение порядка
Ридер CSV учитывает параметр preserve_insertion_order конфигурации. При true (по умолчанию) порядок строк в наборе результатов, возвращаемом ридером CSV, совпадает с порядком соответствующих строк, считанных из файла(ов). При false, порядок не гарантируется.
Страницы в этом разделе
© Copyright 2018–2024 Stichting DuckDB Foundation
Licensed under the MIT License.
https://duckdb.org/docs/data/csv/overview.html