Мы можем сделать это в самих данных загрузки, но мне потребовалось время, чтобы это понять. Сообщите мне, если у вас возникнут какие-либо проблемы, которые у меня работают, убедитесь, что вы заменили schema_name и path в запросе соответственно, а также избегаете пробелов в названиях столбцов. Использовать таблицу продолжительности в базе данных как тип данных времени.
Используемая таблица создания:
create table BUS
(
id int,
Duration time,
totalcustomer int
);
Оператор Load:
LOAD DATA LOCAL INFILE 'C:\\Users\\path\\Downloads\\BUS.csv'
INTO TABLE schema_name.bus FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 ROWS
(id, @END_TIME,@START_TIME,@MALE_CUST,@FEMALE_CUST)
SET
Duration = timediff(str_to_date(@START_TIME,'%H:%i:%S'),str_to_date(@END_TIME,'%H:%i:%S')),
totalcustomer = @MALE_CUST+@FEMALE_CUST;
Это данные CSV, которые я использовал
ID,START_TIME,END_TIME,MALE_CUST,FEMALE_CUST
1,00:00:00,00:01:11,20,30
Вывод в таблице BUS
после выполнения оператора Load data
# id Duration totalcustomer
1 00:01:11 50
Вот что я понял, у вас есть первый столбец таблицы id
не используется @
, поскольку он автоматически сопоставляется с первым именем столбца идентификатора в csv, остальные столбцы не отображаются напрямую, поэтому мы используем @
и col_name в
(id, @END_TIME,@START_TIME,@MALE_CUST,@FEMALE_CUST)
Вы можете попробовать изменить эту строку выше с помощью @ID
вам может потребоваться сопоставить id=@ID
после SET
, вы должны использовать столбцы таблицы после SET
Duration =
totalcustomer =
и приравнять его к столбцам данных из csv источник на RHS.