Импорт данных из файла в существующую таблицу
С помощью подкоманды import file
вы можете импортировать данные из CSV- или TSV-файлов в существующую таблицу.
Импорт выполняется методом BulkUpsert
, который обеспечивает высокоэффективную пакетную вставку большого количества строк без гарантий атомарности. Запись данных разбивается на несколько независимых транзакций, каждая их которых затрагивает единственную партицию, с параллельным исполнением. В случае успеха гарантируется вставка всех данных.
Если в таблице уже содержатся данные, они будут заменены импортируемыми при совпадении первичного ключа.
Импортируемый файл должен быть в кодировке UTF-8. Обработка переноса строки внутри поля данных не поддерживается.
Общий вид команды:
ydb [connection options] import file csv|json|parquet|tsv [options]
, где [connection options] - опции соединения с БД
Параметры подкоманды
Обязательные параметры
-p, --path STRING
— путь к таблице в базе данных.--input-file STRING
— путь к файлу на локальной файловой системе, данные которого нужно импортировать.
Дополнительные параметры
--skip-rows NUM
— количество строк от начала файла, которое будет пропущено при импорте. Значение по умолчанию:0
.--header
— укажите этот параметр, если первая строка (исключая пропущенные при использовании параметра--skip-rows
) содержит имена столбцов данных, которые будут сопоставлены соответствующим столбцам таблицы. Если строка заголовка не указана, данные будут сопоставлены в порядке следования столбцов в схеме таблицы.--delimiter STRING
— символ-разделитель столбцов данных. В этом параметре нельзя указать символ табуляции в качестве разделителя. Чтобы импортировать файл с таким разделителем, используйте подкомандуimport file tsv
. Значение по умолчанию:,
.--null-value STRING
— значение, которое будет импортировано какNULL
. Значение по умолчанию:""
.--batch-bytes VAL
— разбивать загружаемый файл на пакеты указанного размера. Если строка не умещается в пакет целиком, она будет отброшена и передана в следующем пакете. При любом значении размера пакет будет состоять минимум из одной строки. Значение по умолчанию:1 Миб
.--max-in-flight VAL
— количество одновременно загружаемых пакетов данных. Для ускорения импорта больших файлов можно увеличить значение этого параметра. Значение по умолчанию:100
.
Примеры
В примерах используется профиль db1
, о создании которого рассказано в статье Знакомство с YDB CLI раздела "Начало работы".
Перед выполнением примеров создайте таблицу series
.
Импортировать файл
Файл содержит данные без дополнительной информации. в качестве разделителя используется символ ,
:
1,Айтишники,The IT Crowd is a British sitcom.,13182
2,Silicon Valley,Silicon Valley is an American comedy television series.,16166
Примечание
Столбец release_date
таблицы series
имеет тип Date, поэтому дата релиза в файле для импорта представлена в виде числа. Чтобы импортировать значения в формате timestamp, используйте для них столбцы таблицы строкового типа, либо импортируйте их во временную таблицу и выполните преобразование к нужному типу.
Чтобы импортировать такой файл, выполните команду:
ydb import file csv -p series --input-file series.csv
В результате будут импортированы следующие данные:
┌──────────────┬───────────┬───────────────────────────────────────────────────────────┬──────────────────┐
| release_date | series_id | series_info | title |
├──────────────┼───────────┼───────────────────────────────────────────────────────────┼──────────────────┤
| "2006-02-03" | 1 | "The IT Crowd is a British sitcom." | "Айтишники" |
├──────────────┼───────────┼───────────────────────────────────────────────────────────┼──────────────────┤
| "2014-04-06" | 2 | "Silicon Valley is an American comedy television series." | "Silicon Valley" |
└──────────────┴───────────┴───────────────────────────────────────────────────────────┴──────────────────┘
|
Импортировать файл с разделителем Файл содержит данные без дополнительной информации. в качестве разделителя используется символ |
:
1|IT Crowd|The IT Crowd is a British sitcom.|13182
2|Silicon Valley|Silicon Valley is an American comedy television series.|16166
Чтобы импортировать такой файл, укажите параметр --delimiter
со значением |
:
ydb import file csv -p series --input-file series.csv --delimiter "|"
Пропустить строки и считать заголовки столбцов
Файл содержит дополнительную информацию в первой и второй строке, а также заголовки столбцов в третьей. Порядок данных в строках файла не соответствует порядку столбцов в таблице:
#The file contains data about the series.
#
series_id,title,release_date,series_info
1,Айтишники,13182,The IT Crowd is a British sitcom.
2,Silicon Valley,16166,Silicon Valley is an American comedy television series.
Чтобы пропустить комментарии в первой и второй строке, укажите параметр --skip-rows 2
. Чтобы обработать строку третью строку как заголовки и сопоставить данные файла нужным столбцам таблицы, укажите параметр --header
:
ydb import file csv -p series --input-file series.csv --skip-rows 2 --header
NULL
Заменить значения на Файл содержит часто используемое для NULL
обозначение — \N
, а также пустую строку.
1,Айтишники,The IT Crowd is a British sitcom.,13182
2,Silicon Valley,"",\N
3,Lost,,\N
Укажите параметр --null-value "\N"
, чтобы интерпретировать значение \N
как NULL
:
ydb import file csv -p series --input-file series.csv --null-value "\N"
В результате будут импортированы следующие данные:
┌──────────────┬───────────┬─────────────────────────────────────┬──────────────────┐
| release_date | series_id | series_info | title |
├──────────────┼───────────┼─────────────────────────────────────┼──────────────────┤
| "2006-02-03" | 1 | "The IT Crowd is a British sitcom." | "Айтишники" |
├──────────────┼───────────┼─────────────────────────────────────┼──────────────────┤
| null | 2 | "" | "Silicon Valley" |
├──────────────┼───────────┼─────────────────────────────────────┼──────────────────┤
| null | 3 | "" | "Lost" |
└──────────────┴───────────┴─────────────────────────────────────┴──────────────────┘