Spec-Zone.ru › DuckDB

Импорт 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API