สายงานดึงข้อมูลเพื่อใช้สำหรับวิเคราะห์ข้อมูล แปลงข้อมูล จัดรูปแบบข้อมูลต่างๆไม่ว่าวัตถุประสงค์ที่จะทำ ETL, Data warehouse , Data Science, Data Lake สิ่งที่จะเกิดขึ้นบ่อยๆคือ
update student_regist
set WITHDRAWAL_TYPE = case
when lower(WITHDRAWAL_TYPE) = 'w' then 'ถอนติด W'
when lower(WITHDRAWAL_TYPE) = 'c' then 'ถอนเพราะวิชาปิด'
when lower(WITHDRAWAL_TYPE) = 'r' then 'ถอน'
when lower(WITHDRAWAL_TYPE) = 'n' then 'ถอน'
when lower(WITHDRAWAL_TYPE) is null then 'ลงทะเบียนปกติ'
else 'xxx'
end;
DROP MATERIALIZED VIEW REGIST_ALL;CREATE MATERIALIZED VIEW REGIST59
BUILD IMMEDIATE
REFRESH COMPLETE
START WITH sysdate
NEXT sysdate+1
WITH PRIMARY KEY
ASSELECT *
FROM REGIST where year >'2558';COMMENT ON MATERIALIZED VIEW REGIST59 IS 'snapshot table for snapshot REGIST';
subquery เป็นตัวช่วยทำงานในการแยกข้อมูลที่ต้องการออกมาเป็นส่วนๆแล้วนำไปประมวลผลต่อ ในกลุ่มนี้ with … as ถือว่ามีการใช้งานบ่อยครั้ง คำสั่ง With … as ข้อมูลที่ได้มาเปรียบได้กับ local temporary 1 table นำไป query ต่อได้
WITH dept_count AS (
SELECT deptno, COUNT(*) AS dept_count
FROM emp
GROUP BY deptno)SELECT e.ename AS employee_name,
dc.dept_count AS emp_dept_count
FROM emp e
JOIN dept_count dc ON e.deptno = dc.deptno;
ตอนที่ 1 นี้ขอจบแต่เพียงเท่านี้ ตอนต่อๆไปจะเรียบเรียงข้อมูลตามที่ใช้ทำงานจริงๆในการทำงานด้าน ETL, Data Science และ Data Lake ต่อไปนะครับ ขอบคุณที่เข้ามาอ่านกันนะครับ
โดยจากโค้ดข้างต้นจะพบว่า ไฟล์ที่จะใช้ในการรวบรวมจะต้องเป็นไฟล์ PDF ซึ่งในการทำงานจริงของเรา การแนบไฟล์เอกสาร/หลักฐานสามารถแนบได้ทั้งไฟล์ที่เป็น PDF และไฟล์ที่เป็นรูปภาพด้วย ดังนั้น ก่อนที่จะทำการรวมไฟล์ จึงต้องทำการตรวจสอบว่ามีไฟล์ดังกล่าวอยู่จริงหรือไม่ รวมทั้งตรวจสอบชนิดของไฟล์ด้วย หากพบว่าไฟล์ดังกล่าวไม่ได้อยู่ในรูปแบบ PDF ไฟล์ ให้ทำการแปลงไฟล์รูปภาพเหล่านั้นให้เป็น PDF เสียก่อน เพื่อป้องกันความผิดพลาดที่จะเกิดขึ้นในขณะทำการรวมไฟล์นั่นเอง
2. เขียนเมธอดในการรวมไฟล์ดังกล่าวและสร้างเป็นไฟล์ PDF ตัวใหม่
public static void CombineMultiplePDFs(string[] fileNames, string outFile)
{
// ขั้นที่ 1: สร้าง document ที่จะรวมไฟล์ทั้งหมดขึ้นมา
Document document = new Document();
// สร้าง FileStream object ที่จะใช้งานและต้องอย่าลืม dispose เมื่อใช้งานเรียบร้อยแล้ว
using (FileStream newFileStream = new FileStream(outFile, FileMode.Create))
{
// ขั้นที่ 2: สร้างตัว
PdfCopy writer = new PdfCopy(document, newFileStream);
if (writer == null)
{
return;
}
//ขั้นที่ 3:เปิดการใช้งานตัว document
document.Open();
// วนเพื่ออ่านค่าชื่อไฟล์ และทำการเพิ่มข้อมูลลงในเอกสารตัวใหม่ที่จะรวมไฟล์ทั้งหมด
foreach (string fileName in fileNames)
{
// สร้างตัว reader จากเอกสารแนบที่กำลังวน
PdfReader reader = new PdfReader(fileName);
reader.ConsolidateNamedDestinations();
// ขั้นที่ 4: ทำการเพิ่มหน้าข้อมูลจาก reader ให้กับตัว writer ทีละหน้า
for (int i = 1; i <= reader.NumberOfPages; i++)
{
PdfImportedPage page = writer.GetImportedPage(reader, i);
writer.AddPage(page);
}
PRAcroForm form = reader.AcroForm;
if (form != null)
{
writer.CopyAcroForm(reader);
}
reader.Close();
}
// ขั้นที่ 5: ปิดการทำงาน document และ writer
writer.Close();
document.Close();
}
}
3.เขียนเมธอดในแปลงไฟล์รูปภาพให้เป็นไฟล์ PDF
public static void ConvertImageToPdf(string srcFilename, string dstFilename)
{
iTextSharp.text.Rectangle pageSize = null;
using (var srcImage = new Bitmap(srcFilename))
{
pageSize = new iTextSharp.text.Rectangle(0, 0, srcImage.Width, srcImage.Height);
}
using (var ms = new MemoryStream())
{
var document = new iTextSharp.text.Document(pageSize, 0, 0, 0, 0);
iTextSharp.text.pdf.PdfWriter.GetInstance(document, ms).SetFullCompression();
document.Open();
var image = iTextSharp.text.Image.GetInstance(srcFilename);
document.Add(image);
document.Close();
File.WriteAllBytes(dstFilename, ms.ToArray());
}
}