มีข้อความค้นหาใน Snowflake เพื่อระบุอักขระในไฟล์ที่ไม่ถูกต้อง utf8 [ซ้ำ]

Aug 19 2020

ฉันมีไฟล์ที่เมื่อโหลดเข้า Snowflake ได้รับข้อผิดพลาดสำหรับอักขระ UTF-8 ที่ไม่ถูกต้องฉันได้จัดการโหลดลงในตารางโดยใช้การเข้ารหัสอื่นโดยสร้างรูปแบบไฟล์พร้อมตัวเลือกENCODING = 'iso-8859-1'แต่ฉันต้องการหาวิธีรับสิ่งเหล่านั้น อักขระที่ถูกสอบถาม

ฉันได้ลองใช้TO_BINARY(col,'UTF-8')ฟังก์ชันโดยหวังว่ามันจะล้มเหลวใน col ที่มี UTF-8 ที่ไม่ถูกต้อง แต่ไม่สามารถรับผลลัพธ์ที่ถูกต้องในการจับอักขระเหล่านั้นมีใครประสบปัญหาเดียวกัน

คำตอบ

1 DarrenGardner Aug 20 2020 at 02:33

โปรดทราบว่าทั้งหมดข้อมูลตัวอักษรภายในเกล็ดหิมะจะถูกเข้ารหัสโดยใช้UTF-8 ไม่มีทางเลือกอื่น ในขณะที่ย้อนกลับไปสิ่งนี้ไม่เป็นความจริงอย่างเคร่งครัดและเป็นไปได้ที่จะมีข้อมูลตัวละครใน Snowflake ที่ไม่ใช่ UTF-8 ที่ถูกต้อง แต่ตอนนี้ไม่น่าจะเป็นไปได้

การระบุENCODING = 'iso-8859-1'อ็อพชันสั่งให้ Snowflake (ระหว่างการดำเนินการ COPY INTO) ทำการแปลชุดอักขระบนไฟล์ (ซึ่งถูกตีความว่าถูกเข้ารหัสใน ISO-8859-1) โดยแม็ปอักขระทั้งหมดให้เทียบเท่า UTF-8 ตามที่เขียนลงใน เกล็ดหิมะ. ด้วยเหตุนี้ข้อมูลทั้งหมดใน Snowflake จึงมีการเข้ารหัส UTF-8 ดังนั้นจึงไม่ควรมีอักขระใด ๆ ที่ไม่ใช่ UTF-8 ให้ค้นหา ที่กล่าวว่าผลลัพธ์ของการแปลชุดอักขระอาจไม่ลงเอยด้วยการแปลเป็นอักขระ UTF-8 ที่ถูกต้อง / ที่คาดไว้หากไฟล์ (ต้นทาง) ไม่ได้เข้ารหัสอย่างแท้จริงด้วยการเข้ารหัสที่คุณระบุระหว่าง COPY INTO (ในกรณีนี้คือ ISO -8859-1)

ด้วยเหตุนี้ปัญหาสุดท้ายที่คุณพยายามแก้ไขที่นี่คืออะไร? คุณโหลดไฟล์ต้นฉบับโดยENCODING = 'iso-8859-1'ที่มันไม่ใช่ ISO-8859-1 จริงหรือ? หรือคุณกำลังบอกว่าแฟ้มแหล่งที่มาถูกเข้ารหัสอย่างแท้จริงเป็น ISO-8859-1 และ แต่อย่างใดตัวละครที่เกิดในเกล็ดหิมะมีทั้ง (1) ที่ไม่ถูกต้องหรือ (2) ไม่ถูกต้อง UTF-8? หรือคุณกำลังพยายามตรวจสอบการเข้ารหัสจริงของไฟล์ต้นฉบับ (ไม่สนใจทั้ง ISO-8859-1 ทั้งหมด)

Monem_منعم Aug 19 2020 at 19:08

พบคำตอบโดยละเอียดที่นี่จะค้นหาแถวที่มีอักขระที่ไม่ใช่ utf8 ใน Snowflake ได้อย่างไร?

ควรทำเครื่องหมายคำถามของฉันว่าซ้ำกันและโปรดอ้างอิงลิงก์