Загрузка данных в MySQL из CSV ,, но атрибуты в таблице SQL должны выполнять такие же вычисления на основе данных - PullRequest
0 голосов
/ 12 июля 2020

Мне нужно назначить дату загрузки из csv, но атрибут данных в csv ins не соответствует таблице SQL. Схема таблицы SQL, например

BUS(id, Duration, totalcustomer) 

Но заголовок файла csv, например

id=1, Start time =00:00:00, end time=00:01:11, male customer=20, female customer=20

Вывод таблицы будет иметь вид id=1, drration=00:01:11, total customer =40

Итак, в SQL таблица, Duration= end time -start time и totalcustomer=male customer + female customer.

Я пробую SQL выражения, как показано ниже, но не работают

LOAD DATA LOCAL INFILE 'BUS.csv'  
INTO TABLE BUS  
FIELDS ENCLOSED BY '\"'TERMINATED BY ','  
LINES TERMINATED BY '\n'  
(@id, @Duration, @totalcustomer)  
SET  'end time' - 'start time' = @Duration,  
     'male customer'+ 'female customer' = @totalcustomer 

Итак, мне нужно создать новую таблицу для загрузки данных csv и выполнения расчета в MySQL?

Ответы [ 2 ]

0 голосов
/ 12 июля 2020

Мы можем сделать это в самих данных загрузки, но мне потребовалось время, чтобы это понять. Сообщите мне, если у вас возникнут какие-либо проблемы, которые у меня работают, убедитесь, что вы заменили 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.

0 голосов
/ 12 июля 2020

Переменные в операторе загрузки предназначены для столбцов в таблице и / или временных переменных, которыми можно управлять и загружать с помощью оператора set. Таким образом, ваш груз должен выглядеть как

(id, @starttime, @endtime, @malecustomer,@femalecustomer)  
SET  duration = @endtime - @starttime,  
     totalcustomer = @malecustomer + @femalecustomer 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...