หนึ่งรายการเตือนจากยูทิลิตี้ 'mysqlimport' ได้อย่างไร?


28

ในการเริ่มต้นสิ่งนี้ไม่เกี่ยวกับการโหลดข้อมูลจากภายใน MySQL แต่ใช้เครื่องมือบรรทัดคำสั่ง "mysqlimport"

ฉันใช้มันเพื่อโหลด CSV ลงในตารางโดยตรงและต้องการดูคำเตือนที่สร้างขึ้น ดูเหมือนว่าฉันจะไม่ได้รับคำเตือนให้แสดงเมื่อเปิดใช้งาน verbose หรือดีบัก ความคิดใด ๆ

(MySQL 5.0.5)

คำตอบ:


31

เป็นไปไม่ได้กับ mysqlimport อย่างไรก็ตามคุณสามารถทำสิ่งต่อไปนี้แทน:

mysql --execute="LOAD DATA LOCAL INFILE '$WORKDIR/$table.csv' INTO TABLE $table FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' IGNORE 1 LINES (listOfColumnNames); SHOW WARNINGS"

แทนที่listOfColumnNamesด้วยรายการคอลัมน์ที่เหมาะสม

ความมหัศจรรย์คือ (ดังที่ Eduard ระบุไว้ก่อนหน้านี้) คือการเรียกใช้งานโหลดข้อมูล INFILE และคำสั่ง SHOW WARNINGS พร้อมกันในเซสชันเดียวกันเนื่องจาก mysqlimport ไม่ได้มีวิธีในการรับคำเตือนโดยตรง


น่ารักขอบคุณ! ฉันเพิ่งเริ่มเขียนข้อความเช่นนี้หลังจากเห็นความคิดเห็นของ Eduard ขอบคุณนะ! ขอบคุณ
ปาก

ใช้งานได้หรือไม่หากtables.csvเป็นไฟล์ในเครื่อง (เช่นไม่ใช่บนเซิร์ฟเวอร์ของฐานข้อมูล)
Raffi Khatchadourian

งานต่อไปนี้สำหรับฉันสร้างตารางก่อนจากนั้นทำ stackoverflow.com/questions/14127529/mysql -u root --execute="LOAD DATA LOCAL INFILE 'c:\\crp\\blah3.csv' INTO TABLE blah3 FIELDS TERMINATED BY ','; SHOW WARNINGS" whateverdbnameegcsv_db ที่เกี่ยวข้อง
Barlop

และสามารถเพิ่มเช่นประมาณ utf8 mysql> LOAD DATA LOCAL INFILE 'c:\\crp\\blah5.csv' INTO TABLE blah5 CHARACTER SET UTF8 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'; SHOW WARNINGS;ดังที่กล่าวถึงstackoverflow.com/questions/4957900/…
barlop

ปัญหาคือรหัสทางออกอยู่เสมอ0ดังนั้นฉันเดาว่าคุณต้องแยกวิเคราะห์คำสั่งผลลัพธ์เพื่อตรวจสอบว่าการนำเข้าประสบความสำเร็จเมื่อสคริปต์ด้านบน (?)
pkaramol

5

เช่นเดียวกับคนอื่น ๆ กล่าวว่าปัญหาที่แท้จริงคือเพื่อให้ SHOW WARNINGS ทำงานคุณต้องอยู่ในช่วงเชื่อมต่อเดียวกัน mysqlimport ยกเลิกการเชื่อมต่อจากเซสชันทันทีที่การนำเข้าเสร็จสิ้นทำให้การจับคำเตือนเป็นไปไม่ได้ในเวอร์ชันปัจจุบัน ฟังดูเหมือนเป็นโอกาสที่จะบริจาคแพทช์ :)


1

ฉันไม่พบวิธีพิมพ์คำเตือนด้วย mysqlimport เช่นกัน แต่เนื่องจาก mysqlimport ไม่ได้ทำอะไรนอกจาก "LOAD DATA INFILE" ทำไมคุณไม่ใช้คำสั่ง mysql เพื่อนำเข้าข้อมูลตามด้วย "SHOW WARNINGS"?


ขอบคุณ! ชนิดที่น่ารำคาญของ mysqlimport นั้นเล่นได้ไม่ดีเลย: /
brink

ใช้ "คำเตือนการแสดง;" คำสั่งหลังจาก "โหลด"
Eduard Wirch
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.